Как мне легко запросить работающий Eclipse для его установленных функций? - PullRequest
1 голос
/ 29 марта 2012

Я создаю функцию Eclipse, требование которой соответствует этому ... Функция должна иметь возможность автоматического удаления, если у пользователя отозвана лицензия.

Если вам нужна дополнительная справочная информация об этом, вот еще один вопрос, который я задал по этой теме.

Благодаря ответам на этот вопрос я пытался изучить API-интерфейс Eclipse p2. Я нашел несколько классов, которые выглядят полезными здесь

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

Я застрял, потому что мне нужно снабдить OperationFactory набором объектов IInstallableUnit.

private void scheduleUninstallOperationJob(
        Collection<? extends IVersionedId> toUninstall) 
{
    OperationFactory oFactory = new OperationFactory();
    Collection<URI> repos = null;
    UninstallOperation op = null;
    try {
        op = oFactory.createUninstallOperation(toUninstall, repos, null);
    } catch (ProvisionException e) {
        e.printStackTrace();
    }
    IStatus result = op.resolveModal(null);
    if (result.isOK()) {
        op.getProvisioningJob(null).schedule();
    }
}

Я не вижу способа легко попросить работающий экземпляр Eclipse предоставить мне коллекцию установленных в настоящее время InstallableUnits, чтобы я мог легко передать тот, который хочу удалить, в OperationFactory.createUninstallOperation () метод.

Я пытался использовать исходный код Eclipse в качестве примера, но я обнаружил код org.eclipse.equinox.p2.ui.ProvisioningUI, и он тесно связан с пользовательским интерфейсом, который используется при удалении InstallableUnits вручную , Этот код также использует код, который находится в страшных Eclipse внутренних пакетах, которые я хотел бы по возможности избегать.

Спасибо за внимание, Трассировка

Ответы [ 2 ]

2 голосов
/ 22 мая 2012

Этот код получает коллекцию IU, которые управляются профилем работающей в данный момент системы:

/**
 * This Activator informs user about the IUs which are currently installed in
 * the running environment.
 * 
 * This code is intended for demo only and should be much more defensive for
 * production use.
 * 
 * @author Ilya Shinkarenko
 * 
 */
public class SelfInformerActivator extends Plugin {

@Override
public void start(final BundleContext ctx) throws Exception {
    super.start(ctx);

    ServiceReference<IProvisioningAgentProvider> sr = ctx.getServiceReference(IProvisioningAgentProvider.class);
    IProvisioningAgentProvider agentProvider = ctx.getService(sr);
    URI p2InstanceURI = null; // myself
    final IProvisioningAgent agent = agentProvider.createAgent(p2InstanceURI);

    IProfileRegistry regProfile = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME);

    IProfile profileSelf = regProfile.getProfile(IProfileRegistry.SELF);

    IQuery<IInstallableUnit> query = QueryUtil.createIUAnyQuery();

    //This is what you need:
    IQueryResult<IInstallableUnit> allIUs = profileSelf.query(query, new NullProgressMonitor());

    //Let's output it:
    Iterator<IInstallableUnit> iterator = allIUs.iterator();
    while (iterator.hasNext()) {
        IInstallableUnit iu = iterator.next();
        System.out.println(iu);
    }

}

}

0 голосов
/ 30 марта 2012

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

Что ж, похоже, эти требования изменились, и мне больше не нужно будет программно удалять компоненты Eclipse на основе аннулированной лицензии. Поэтому сейчас я перестану исследовать, как это сделать.

Если вы хотите решить эту проблему, свяжитесь со мной, оставив комментарий здесь или ответив на этот вопрос другим вопросом. :)

...