SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Webサービスを利用したEclipseプラグインの作成

Google Web APIsを使用したEclipseのプラグインの作成

Webサービスを利用したEclipseプラグインの作成 第2回


設定を保持するIPreferenceStoreについて

 さて、前ページのソースコード上でGoogleのキー値を設定画面から取得している箇所があります。

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」の記述は次のようになりました。

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から呼び出されるようになっています。

GooglePreferenceInitializerのソース
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」の実装クラスから成っています。

plugin.xmlに追加した内容
<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]-[設定]で呼び出される設定画面に以下の項目が追加されました。

Eclipseの設定画面
Eclipseの設定画面

 まだ設定画面の実装クラスを作成していないため、右側の設定画面にはエラーが表示されています。

設定画面org.eclipse.ui.IWorkbenchPreferencePageの実装クラスGooglePreferencePage

 続いて設定画面の実装クラスを作成します。拡張ポイントに記述した「nu.mine.kino.plugin.google.ui.preferences.GooglePreferencePage」クラスを、次のように作成しました。

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を使用して画面にキー値を入力するボックスを配置しています。上のようにクラスを定義しておくと、次のような設定画面が表示されます。

Eclipseの設定画面
Eclipseの設定画面

 この画面で値を入力して[適用]などを押下するとPreferenceConstants.GOOGLE_KEYのキー値に入力ボックス内の値が格納されるわけです。

 また、設定画面で設定した値には、次のようにアクセスすることができます。

String myGoogleKey = GooglePlugin.getDefault().getPreferenceStore()
                .getString(PreferenceConstants.GOOGLE_KEY);

次のページ
テストプラグインの作成

この記事は参考になりましたか?

Webサービスを利用したEclipseプラグインの作成連載記事一覧

もっと読む

この記事の著者

木野 雅富(キノ マサトミ)

2000年にシンクタンク系のSIerに入社後、サーバサイドJava開発やWEBサービスを利用したリッチクライアント開発など、さまざまな開発プロジェクトに携わる。2008年より株式会社プライムブレインズにて、システムコンサルタントとして従事。現在は会社作りも楽しんでいます!専門はJ2EEと最近はEcl...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1368 2008/08/22 19:07

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー