eclipseで設定を保存したり、読んだりする。


org.eclipse.ui.preferences.ScopedPreferenceStore


マジオススメ。読み込みと保存をかなりイイ感じにやってくれる。

ここでの、Scopeは色々ある。
例えば、僕が使おうと思ったのは、プロジェクト単位での設定。
eclipse3.1辺りから、プロジェクトフォルダの直下に、.settingsなんてフォルダがあって、
こんな感じでファイルがあったりする。これと同じことが出来るナリ。

中身は、キー=値形式のいわゆるpropertiesファイルってのと、大体同じ。
これを生成する時には、ズバリorg.eclipse.core.resources.ProjectScope。


兄弟には、InstanceScopeとか、ConfigurationScopeなんてのがいたりする。
それぞれ、設定ファイルを、どこに出力するかが違う感じ。
まぁ、ボチボチ使うがヨロシ。


んでね、基本的には、org.eclipse.ui.dialogs.PropertyPageをサブクラス化して、
画面を作るヨロシ。
これで、プロジェクト単位の設定を作れるシ。
コードは、ざっくばらんに、必要な所だけ書くと、こんな感じ。

public class SamplePropertyPage extends PropertyPage {
    protected Control createContents(Composite parent) {
        setPreferenceStore(new ScopedPreferenceStore(new ProjectScope(
                (IProject) getElement()), "org.example.hoge"));
    }

    public boolean performOk() {
        IPreferenceStore store = getPreferenceStore();
        boolean hoge = store.getBoolean("hoge");
        int piro = store.getInt("piro");
        String moge = store.getString("moge");

        store.setValue("hoge", hoge ^ true);
        store.setValue("piro", 2333 + piro);
        store.setValue("moge", "fuga" + moge);

        return true;
    }
}

plugin.xmlの方は、まぁ、よろしく書いておいてクダサイナ。
プロジェクトのコンテキストメニューにあるpropertyに、
何か追加するだけなら、ウィザードあるし。


これで、プロジェクトのプロパティで、OKボタンを押すと、

  • org.example.hoge.prefs

ってファイルが出来ます。
何度か、OKボタンをおしていけば、その中身が増えていくのを確認できるデスヨ。


一点だけ謎が。boolean型の値で、falseを格納すると、
.prefsファイルの中身から消えます。キーごと。
正直、こういうのは、止めて欲しいもんだけど、まぁ、仕方なし。


このクラスのいい所は、設定の保存先を、パスとして指定する必要が無い事かな。
要は、設定ファイルの読込みプロセスを自前で記述しなくていいからラクチンさん。
IPreferenceStoreの辺りは、膨大な量のコードがあって、
何が、どこに、どう読込み/保存されるのか、非常に分り辛いんだけど、
現状では、このScopedPreferenceStoreだけ使い方が分ってれば、
他のは、全然イラネって事らしい。


IDialogSettingsと、処理内容や目的が色々被ってる様な気がするけど、まぁ、気にしない。


んで、ここまで来ると、
Stringリテラルでキーを指定しつつ、欲しい型のメソッド呼ぶのがメンドイなぁ…と、
設定保存用のBeanを、サックリとシリアライズ出来た方が、
楽なんじゃね…?とか思ったりするんだけど、それはまた明日。