設定を保持するIPreferenceStoreについて
さて、前ページのソースコード上でGoogleのキー値を設定画面から取得している箇所があります。
String myGoogleKey = GooglePlugin.getDefault().getPreferenceStore()
.getString(PreferenceConstants.GOOGLE_KEY);
これはプラグインの設定情報を保持するIPreferenceStoreインターフェイスの機能を用いています。この機能は以下のインターフェイスや拡張ポイントで構成されています。
- プラグインの設定を保存する場所となる org.eclipse.jface.preference.IPreferenceStore
- IPreferenceStoreに値を設定するためのダイアログを形成する org.eclipse.ui.IWorkbenchPreferencePage
- 初期値を設定するための拡張ポイント org.eclipse.core.runtime.preferences
- 初期値を設定するためのクラス org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer
拡張ポイントorg.eclipse.core.runtime.preferences
まずは初期値を設定するための拡張ポイントと実装クラスを作成します。「META-INF/MANIFEST.MF」をマニフェストエディタで開き、[拡張]タブを選択して[追加]をクリックします。すると、拡張ポイントを選択するダイアログが開くので、「org.eclipse.core.runtime.preferences」を選択し[終了]をクリックします。
下のように拡張ポイントが追加されました。

次に、この「org.eclipse.core.runtime.preferences」を右クリックして[新規]-[initializer]を選択します。下に要素が追加されました。そして、右側にクラス名が表示されているので、そのクラス名を「nu.mine.kino.plugin.google.ui.initializer.GooglePreferenceInitializer」とします。
最終的に「plugin.xml」の記述は次のようになりました。
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.2"?> <plugin> <extension point="org.eclipse.core.runtime.preferences"> <initializer class="nu.mine.kino.plugin.google.ui.initializer.GooglePreferenceInitializer"/> </extension> </plugin>
実装クラスnu.mine.kino.plugin.google.ui.initializer.GooglePreferenceInitializer
次にplugin.xmlに記述したクラス「GooglePreferenceInitializer」を作成します。拡張ポイント「org.eclipse.core.runtime.preferences」に定義されたクラスは、プラグインが活性化されたときにEclipseから呼び出されるようになっています。
package nu.mine.kino.plugin.google.ui.initializer; import nu.mine.kino.plugin.google.ui.GooglePlugin; import nu.mine.kino.plugin.google.ui.preferences.PreferenceConstants; import org.apache.log4j.Logger; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.jface.preference.IPreferenceStore; public class GooglePreferenceInitializer extends AbstractPreferenceInitializer { private static final Logger logger = Logger .getLogger(GooglePreferenceInitializer.class); // @Override public void initializeDefaultPreferences() { logger.debug("initializeDefaultPreferences() - start"); IPreferenceStore store = GooglePlugin.getDefault().getPreferenceStore(); logger.debug(store); store.setDefault(PreferenceConstants.GOOGLE_KEY, ""); // ↑ここで初期値を設定している logger.debug( GooglePlugin.getDefault().getPreferenceStore().getString( PreferenceConstants.GOOGLE_KEY)); logger.debug("initializeDefaultPreferences() - end"); } }
プラグイン内のクラスが呼び出されたときに、プラグインが活性化され、
public void initializeDefaultPreferences();
が呼び出されます。ここではこのメソッド内で、プラグインのプリファレンスを保持するIPreferenceStoreをプラグインクラスから取得し、
store.setDefault(PreferenceConstants.GOOGLE_KEY, "");
と値をセットしました。つまりこのプラグインの設定情報として、PreferenceConstants.GOOGLE_KEYというキー値に""(空文字)がセットされたことになります。
ちなみに上で出てきたPreferenceConstantsインターフェイスは定数を保持するクラスで、あらかじめ次のように定義しておきました。
package nu.mine.kino.plugin.google.ui.preferences; public interface PreferenceConstants { public static final String GOOGLE_KEY = "stringPreference"; }
拡張ポイントorg.eclipse.ui.preferencePages
次に設定画面を作成します。設定画面は、「org.eclipse.ui.preferencePages」拡張ポイントと、設定画面クラス「org.eclipse.ui.IWorkbenchPreferencePage」の実装クラスから成っています。
<extension point="org.eclipse.ui.preferencePages"> <page class="nu.mine.kino.plugin.google.ui.preferences
.GooglePreferencePage"
id="nu.mine.kino.plugin.google.ui.preferences.GooglePreferencePage" name="Google検索"/> </extension>
これでEclipseの[Window]-[設定]で呼び出される設定画面に以下の項目が追加されました。
まだ設定画面の実装クラスを作成していないため、右側の設定画面にはエラーが表示されています。
設定画面org.eclipse.ui.IWorkbenchPreferencePageの実装クラスGooglePreferencePage
続いて設定画面の実装クラスを作成します。拡張ポイントに記述した「nu.mine.kino.plugin.google.ui.preferences.GooglePreferencePage」クラスを、次のように作成しました。
package nu.mine.kino.plugin.google.ui.preferences; import nu.mine.kino.plugin.google.ui.GooglePlugin; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; public class GooglePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public GooglePreferencePage() { super(GRID); // 実際のKey,Valueを格納する、PreferenceStoreを設定。 setPreferenceStore(GooglePlugin.getDefault().getPreferenceStore()); setDescription("Google検索時のキーを設定します"); } // @Override protected void createFieldEditors() { addField(new GoogleKeyFieldEditor(PreferenceConstants.GOOGLE_KEY, "&Google Key:", getFieldEditorParent())); // ↑画面にキー値を入力するボックスと、 // Google SOAP Search APIのページへ // 遷移するボタンを配置するクラスを作成しました。 // 詳細はソースをご参照ください。 } public void init(IWorkbench workbench) { } }
ここではFieldEditorPreferencePageを使用して画面にキー値を入力するボックスを配置しています。上のようにクラスを定義しておくと、次のような設定画面が表示されます。
この画面で値を入力して[適用]などを押下するとPreferenceConstants.GOOGLE_KEYのキー値に入力ボックス内の値が格納されるわけです。
また、設定画面で設定した値には、次のようにアクセスすることができます。
String myGoogleKey = GooglePlugin.getDefault().getPreferenceStore()
.getString(PreferenceConstants.GOOGLE_KEY);



