Java Eclipse:OSGI首选项与PreferenceStore
我正在开发一个Eclipse插件(或者实际上是一个基于Eclipse的应用程序的插件),它需要用户输入一些配置 从文档来看,似乎有两个首选API—一个在中,扩展/实现,另一个在中,特定于JFace。那我们也有 OSGI API有一个层次节点树-首选项节点(Java Eclipse:OSGI首选项与PreferenceStore,java,eclipse,osgi,preferences,jface,Java,Eclipse,Osgi,Preferences,Jface,我正在开发一个Eclipse插件(或者实际上是一个基于Eclipse的应用程序的插件),它需要用户输入一些配置 从文档来看,似乎有两个首选API—一个在中,扩展/实现,另一个在中,特定于JFace。那我们也有 OSGI API有一个层次节点树-首选项节点(首选项或IEclipsePreferences)可以有多个子节点,其本身既可以包含单个名称-值对,也可以包含更多子节点。这似乎适用于我的用例——我有一个动态数量的“首选项组”,每个组大约有三个字符串属性(name、description、com
首选项
或IEclipsePreferences
)可以有多个子节点,其本身既可以包含单个名称-值对,也可以包含更多子节点。这似乎适用于我的用例——我有一个动态数量的“首选项组”,每个组大约有三个字符串属性(name、description、command),可以很好地映射到这些节点
JFace API没有这样的层次结构,每个插件只有一个平面IPreferenceStore
。但它提供了首选项编辑器页面,然后可以通过实现iWorkbenchReferencePage
和,将这些页面包括在常用的首选项对话框(窗口/首选项)中。(我仍然需要自己实现偏好页面的一部分,但这个API似乎为此提供了一个很好的基础。)
似乎API通过提供基于IEclipsePreferences的IPreferenceStore实现,以某种方式连接了这两个API,但我仍然不知道如何使用它
因此,我的问题是:如何在首选项对话框中使用分层OSGI
首选项?
我只需要一个级别,但我需要用户能够动态添加新节点(每个节点大约有三个首选项)。(不过,这些节点不必有新的首选项页面。)在首选项页面级别,它似乎希望使用首选项存储。大多数插件从org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore()
提供的默认值获取其首选项存储。这大致可以转换为一个ScopedReferenceStore,其中包含一个InstanceScope,该InstanceScope的节点与其bundle.id匹配
获取匹配的IEclipsePreferences对象的等效对象是
InstanceScope.INSTANCE.getNode(“bundle.id”)
。这将允许您在下面添加更多节点,但无法从IPreferenceStore访问这些节点。但是,您的首选项页面可以将其首选项存储设置为插件的主首选项存储,并且仍然使用IECLipseReferences或辅助IPreferenceStore来访问额外的首选项(您只需自己编写代码,类似于org.eclipse.ui.internal.dialogs.EditorsPreferencePage
).我通过覆盖getPreference存储解决了这个问题,如下所示:
@Override
public IPreferenceStore getPreferenceStore() {
if (preferenceStore == null) {
preferenceStore = new ScopedPreferenceStore( InstanceScope.INSTANCE, ID );
}
return preferenceStore;
}
对我有用谢谢,这也是我到目前为止收集的。我现在正沿着这个方法工作。