Обнаружение запущенного Equinox IApplication ID - PullRequest
0 голосов
/ 07 июня 2018

У меня есть приложение RCP E4 с графическим интерфейсом (JavaFX).Он также содержит несколько экземпляров IApplication без GUI.Проблема в том, что некоторые службы DS запускаются автоматически, и я хочу определить, какое приложение (IApplication / ID продукта) запущено из этих служб DS.Это возможно и какую информацию я могу получить?

1 Ответ

0 голосов
/ 07 июня 2018

IApplicationContext содержит несколько методов, чтобы сообщить вам о том, что он называет «приложением для брендинга».

getBrandingApplication дает вам идентификатор запущенного приложения (всегда org.eclipse.e4.ui.workbench.swt.E4Application` для e4, например).

getBrandingId - идентификатор продукта.

getBrandingName - имя, указанное для продукта.

В приложении e4 вы можете просто ввести IApplicationContext.IApplication приложениям передаются cpntext в качестве параметра метода запуска.Его также можно найти, выполнив поиск в службах OSGi:

IApplicationContext getApplicationContext(BundleContext context) {
    Collection<ServiceReference<IApplicationContext>> references;
    try {
        references = context.getServiceReferences(IApplicationContext.class, "(eclipse.application.type=main.thread)"); 
    } catch (InvalidSyntaxException e) {
        return null;
    }
    if (references == null || references.isEmpty())
        return null;
    // assumes the application context is available as a service
    ServiceReference<IApplicationContext> firstRef = references.iterator().next();
    IApplicationContext result = context.getService(firstRef);
    if (result != null) {
        context.ungetService(firstRef);
        return result;
    }
    return null;
}

(приведенный выше код адаптирован из org.eclipse.core.internal.runtimeInternalPlatform)

...