Utilizando Equinox P2 - Obtendo informações sobre plugins e features instaladas

1 resposta
B

Bom dia a todos.

Estou utilizando o Eclipse 3.7 para desenvolver um projeto e estou precisando fazer algumas coisas, utilizando as informações dos plugins e das features instaladas:

Estou utilizando o recurso de provisionamento P2 para permitir a atualização do software.

1º: Preciso obter a lista de plugins e features que estão instaladas e que estão rodando no momento. Preciso de algo como o que é exibido na aba “Installed Software”, que pode ser visualizada no menu “Ajuda > Sobre > Installation Details”.

Obs.: Irei utilizar essa informação para obter dados sobre as features instaladas, como número de versão e descrição.

2º: Preciso obter a lista das instalações realizadas. Preciso de algo como o que é exibido na aba “Installation History”, que pode ser visualizada no menu “Ajuda > Sobre > Installation Details”.

Obs.: Irei utilizar essa informação para adicionar uma funcionalidade de limpar instalações antigas. Algo como “Manter apenas as 5 últimas instalações”.




1 Resposta

B

Bom dia a todos.

Após analisar como funciona a janela que exibe os plugins e feature instalados, desenvolvi o seguinte código:

import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.p2.engine.IProfileRegistry;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.IQueryable;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.ui.ProvisioningUI;

...


try {
	ProvisioningUI provisioningUI = ProvisioningUI.getDefaultUI();

	if ( null == provisioningUI ) {
		return;
	}

	String profileId = provisioningUI.getProfileId();

	ProvisioningSession provisioningSession = provisioningUI.getSession();

	if ( null == provisioningSession ) {
		return;
	}

	IQueryable<IInstallableUnit> queryable = ((IProfileRegistry) provisioningSession.getProvisioningAgent().getService(IProfileRegistry.SERVICE_NAME))
			.getProfile( profileId );


	if ( null == queryable ) {
		return;
	}

	// to get the product ID
	//String pId = Platform.getProduct().getId();
	
	String pId = "feature.1";

	if ( null != queryable ) {
		IQueryResult<IInstallableUnit> iqr = queryable.query( QueryUtil.createIUQuery( pId ), null );

		if ( null != iqr ) {
			Iterator<IInstallableUnit> ius = iqr.iterator();
			if( ius.hasNext() ) {
				IInstallableUnit iu = ius.next();
				Version v = iu.getVersion();

				if ( null != v ) {
					System.out.println( "ID: " + iu.getId() + " | IU: " + iu.toString() + " | Version: " + v.toString() );
				}
			}
		}
	}
} catch ( Exception e ) {
	System.out.println( e.getStackTrace() );
	return;
}

Gostaria que saber se alguém tem uma forma melhor de fazer isso, ou se ve algum problema em ser feito dessa forma.

VLW

Criado 16 de agosto de 2011
Ultima resposta 17 de ago. de 2011
Respostas 1
Participantes 1