Использование Equinox P2 - получение информации об установленных функциях и плагинах - PullRequest
4 голосов
/ 16 августа 2011

Я использую Eclipse 3.7 для разработки проекта, и мне нужно кое-что сделать, используя информацию об установленных плагинах и функциях:

Я использую функцию обеспечения P2, чтобы разрешить обновления программного обеспечения.

1: Мне нужно получить список плагинов и функций, которые установлены и работают в данный момент. Мне нужно что-то вроде того, что отображается в «Установленном программном обеспечении», которое можно просмотреть через «Справка> О программе> Сведения об установке».

Примечание. Я буду использовать эту информацию для получения данных об установленных функциях, таких как номер версии и описание.

2: мне нужно получить список недавно установленных программ. Мне нужно что-то вроде того, что отображается в «Истории установки», которую можно просмотреть через «Справка> О программе> Сведения об установке».

Примечание: я буду использовать эту информацию для добавления функциональности для очистки старых установок. Что-то вроде «Сохранить только последние пять установок».

1 Ответ

4 голосов
/ 17 августа 2011
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;
}
...