java - Eclipse:OSGI 首选项与 PreferenceStore

标签 java eclipse osgi preferences jface

我正在开发一个 Eclipse 插件(或者实际上,一个基于 Eclipse 的应用程序的插件),它需要用户输入一些配置。

通过查看文档,似乎有两个首选项 API - 一个在 org.eclipse.core.runtime.preferences 中,扩展/实现 OSGI prefererence API ,另一个,JFace 特定的,在 org.eclipse.jface.preference 中.然后我们有 org.eclipse.ui.preferences ,也是。

OSGI API 有一个层次结构的节点树 - 一个首选项节点(PreferencesIEclipsePreferences)可以有多个子节点,它们本身可以包含两个单独的名称-值对以及更多的子节点。这似乎适合我的用例 - 我有一个动态数量的“首选项组”,每个组都有大约三个字符串属性(名称、描述、命令),可以很好地映射到这些节点。

JFace API 没有这样的层次结构,每个插件只有一个平面 IPreferenceStore。但它提供了首选项编辑器页面,然后可以通过实现 IWorkbenchPreferencePageusing the "org.eclipse.ui.preferencePages" extension point 将其包含在通常的首选项对话框(Window/Preferences)中. (我仍然必须自己实现部分首选项页面,但是这个 API 似乎为此提供了一个很好的基础。)

似乎org.eclipse.ui.preferences API 通过提供基于 IEclipsePreferences 的 IPreferenceStore 实现以某种方式桥接了这两个 API,但我仍然看不出如何使用它。

所以我的问题是:如何在首选项对话框中使用分层 OSGI Preferences我只需要一个级别,但我需要用户能够动态添加新节点(每个节点大约有三个首选项)。 (不过,这些节点不必具有新的首选项页面。)

最佳答案

似乎在偏好页面级别,它想要与偏好商店合作。大多数插件从 org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore() 提供的默认设置中获取它们的偏好存储。这松散地转换为带有 InstanceScope 的 ScopedPreferenceStore,其节点与其 bundle.id 匹配。

获取匹配的 IEclipsePreferences 对象的等效方法是 InstanceScope.INSTANCE.getNode("bundle.id")。这将允许您在下面添加更多节点,但无法从您的 IPreferenceStore 访问它们。但是,您的首选项页面可以将其首选项存储设置为插件的主要存储,并且仍然使用 IEclipsePreferences 或辅助 IPreferenceStore 来访问额外的首选项(您只需自己编写代码,类似于 org.eclipse.ui。 internal.dialogs.EditorsPreferencePage).

关于java - Eclipse:OSGI 首选项与 PreferenceStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792565/

相关文章:

java - Java 中的整数对应哪一位

Android actionbar 如何为 Eclipse 添加支持库 v7 appcompat

java - Eclipse 不以 Debug模式启动 tomcat-7 服务器

java - 帕克斯考试 2 : gave up waiting for service

java - 设置 OSGi 包的权限

C# 使用 Java SOAP 服务 WSSecurity

java - import 语句是否会增加类的大小

java - Java 中的奇怪行为

android - 无法将 android.support.v7 添加到我的项目构建路径

eclipse - 管理团队 bundle