我正在开发一个Eclipse插件(或者实际上是基于Eclipse的应用程序的插件),该插件需要用户输入一些配置。
通过查看文档,似乎有两种首选项API- 一种在org.eclipse.core.runtime.preferences,用于扩展/实现OSGI优先API,另一种在,是JFace特定的org.eclipse.jface.preference。然后我们也有org.eclipse.ui.preferences。
org.eclipse.core.runtime.preferences
org.eclipse.jface.preference
org.eclipse.ui.preferences
OSGI API具有分层的节点树- 首选项节点(Preferences或IEclipsePreferences)可以具有多个子节点,它们本身可以包含单独的名称- 值对以及更多的子节点。这似乎对我的用例是正确的-我有一个动态的“首选项组”,每个都有大约三个字符串属性(名称,描述,命令),可以很好地映射到这些节点。
Preferences
IEclipsePreferences
JFace API没有这样的层次结构,IPreferenceStore每个插件只有一个平面。但是它提供了首选项编辑器页面,然后可以通过实现IWorkbenchPreferencePage和使用“ org.eclipse.ui.preferencePages”扩展点将其包含在通常的首选项对话框(窗口/首选项)中。(我仍然必须自己实现首选项页面的一部分,但看来此API提供了良好的基础。)
IPreferenceStore
IWorkbenchPreferencePage
似乎该org.eclipse.ui.preferencesAPI通过提供基于IEclipsePreferences的IPreferenceStore实现以某种方式桥接了这两个API,但是我仍然看不到如何使用它。
所以这是我的问题: 如何Preferences在Preferences-dialog中使用分层OSGI ?我只需要一个级别,但是我需要用户能够动态添加新节点(每个节点具有大约三个首选项)。(不过,这些节点不必具有新的首选项页面。)
似乎在首选项页面级别,它想与首选项存储一起使用。大多数插件从提供的默认设置中获取其首选项存储org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore()。松散地转换为Instanced的ScopedPreferenceStore,该Scope的节点与其bundle.id相匹配。
org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore()
获得匹配的IEclipsePreferences对象的等效项是InstanceScope.INSTANCE.getNode("bundle.id")。这样一来,您可以在下面添加更多节点,但是无法从IPreferenceStore中访问它们。但是,您的首选项页面可以将其首选项存储设置为插件的主存储,并且仍使用IEclipsePreferences或辅助IPreferenceStore来访问额外的首选项(类似于,您只需自己编写代码org.eclipse.ui.internal.dialogs.EditorsPreferencePage)。
InstanceScope.INSTANCE.getNode("bundle.id")
org.eclipse.ui.internal.dialogs.EditorsPreferencePage