检测正在运行的Equinox IApplication ID

时间:2018-06-07 15:37:36

标签: osgi eclipse-rcp equinox efxclipse

我有GUI(JavaFX)的RCP E4应用程序。它还包含几个没有GUI的IApplication实例。问题是,有些DS服务自动运行,我想检测哪些应用程序(IApplication /产品ID)是从这些DS服务中启动的。这可能吗,我能得到什么信息?

1 个答案:

答案 0 :(得分:2)

IApplicationContext包含许多方法来告诉您它所谓的“品牌应用”。

getBrandingApplication为您提供正在运行的应用程序的ID(例如,总是为e4设置org.eclipse.e4.ui.workbench.swt.E4Application`)。

getBrandingId是产品ID。

getBrandingName是为产品指定的名称。

在e4应用中,您只需注入IApplicationContext即可。 IApplication个应用程序被赋予cpntext作为start方法的参数。通过搜索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