org.eclipse.core.runtime.preferences パッケージは、 プラグインの設定を保管するためのインフラストラクチャーを提供します。 設定は一般的に、「設定」ページでユーザーが制御する設定にマップされます。 ただし、これは基本インフラストラクチャーの要求事項ではありません。プラグイン設定はキーと値の対であり、キーは設定の名前を記述し、値は複数の異なる型 (boolean、double、float、int、long、または string) のいずれかです。 設定はプラットフォームによってファイル・システムに保管し、ファイル・システムから検索することができます。 保管済みの設定の正確なロケーションは、設定のスコープによって変わります。
設定ストア全体をノードの階層と考えることができます。階層の個々のメイン・ブランチは、特定のスコープを表します。 特定のノードの子は、そのスコープが定義されている方法によって異なります。 インスタンス・スコープおよび構成スコープの場合、子ノードは、設定の限定子 (通常はプラグインの ID) によって指定される特定のプラグインの設定です。
この説明全体に混乱を覚えても問題はありません。 スコープやノードを考慮しなければ、特定のスコープを意識する必要も、設定値がツリーのどのノードに実際に格納されているかを意識する必要もありません。 設定値を問い合わせる場合に、値が実際に格納されているノードを検索するための限定子と設定名を指定すると、 設定 API は自動的に適切な順序 (インスタンス、構成、デフォルト) でノードを全探索します。
設定にアクセスするには、 IPreferencesService プロトコルを使用します。 プラットフォームのデフォルト設定サービスには、プラットフォーム・クラスを使用してアクセスできます。
... IPreferencesService service = Platform.getPreferencesService(); ...
設定サービスを取得した後は、IPreferencesService に用意されたいずれかの get... メソッドを使用して、設定値を名前で問い合わせることができます。 例えば、以下の断片では、プラグイン "com.example.myplugin" の "MyPreference" 設定の値を問い合わせています。
... IPreferencesService service = Platform.getPreferencesService(); boolean value = service.getBoolean("com.example.myplugin", "MyPreference", true, null); //do something with the value. ...
照会メソッドの最後のパラメーターは、設定ノードを検索するときに使用するスコープ・コンテキストの配列です。 配列がヌルの場合、プラットフォームはデフォルトのスコープ検索順序を使用することを想定し、適切な設定ノードを推測します。 スコープ・コンテキストの配列が渡された場合は、それによって、設定ノードを検索するために使用するスコープのルックアップ順序が決定します。 指定されたスコープを使用してもノードが見付からない場合は、デフォルトのスコープ・ルックアップ順序が常に調べられます。
スコープ検索順序をプラグインでより細かく制御する必要がある場合は、スコープを表すクラスを使用して、 特定のスコープの設定を表す実際のノードにアクセスすることができます。 この方法により、必要な特定の検索順序を指定するノードの配列を作成できます。 以下の断片では、前述のものと同じ設定の設定サービスを問い合わせていますが、 プラグインの構成スコープを検索した後に、プラグインのインスタンス・スコープを検索しています。 検索順序としてノードを指定した場合は、デフォルトのスコープ宣言は考慮されません。 つまり、プラットフォームは、提供されたノードだけを検索します。
... IPreferencesService service = Platform.getPreferencesService(); Preferences configurationNode = new ConfigurationScope().getNode("com.example.myplugin"); Preferences instanceNode = new InstanceScope().getNode("com.example.myplugin"); Preferences[] nodes = new Preferences[] {configurationNode, instanceNode}; stringValue = service.get("MyPreference", "true", nodes); //do something with the value. ...
プラグインは、設定ツリー・ノードに対する独自の全探索を実装することもできます。 設定サービスから設定ツリーのルート・ノードを取得できます。 スコープ・クラスを使用して、さらにツリーの全探索を行うことができます。 以下の断片では、特定のノードを全探索し、ノード自体から設定値を検索しています。
... IPreferencesService service = Platform.getPreferencesService(); Preferences root = service.getRootNode(); Preferences myInstanceNode = root.node(InstanceScope.SCOPE).node("com.example.myplugin"); if (myInstanceNode != null) { value = node.getBoolean("MyPreference", "true"); //do something with the value. } ...
プラグインは、org.eclipse.core.runtime.preferences 拡張を使用して独自の特殊スコープを定義できます。 この拡張で、プラグインは新しいスコープの名前と、新しいスコープの設定ノードを作成できるクラスを定義します。 オプションで、そのスコープのデフォルトの設定値を初期化するクラスの名前を指定できます。 プラグインが新しいスコープを定義する場合、プラットフォーム全探索順序に対して相対的な、 新しいスコープの全探索順序を実装するかどうかは、そのプラグインに任されています。 この機能については、プロジェクト・スコープにおける設定の具体例を使用して、詳しく説明します。