読者です 読者をやめる 読者になる 読者になる

LG3DHOME が変更されたらどうするか

昨日の懸念というのは、そういことです。

今のコードだと、プロジェクトを作成したときに LG3DHOME を使用して lg3d-core.jar を CLASSPATH に追加しています。

しかし、LG3DHOME が変更されたら、設定された lg3d-core.jar のパスは無効になってしまいます。これは防がないと。

コンパイル時に毎回チェックすることができるのでしょうか? これをするには、かなり難しいような気が...

PropertyChangeEvent みたいなイベントがあればそれを使うのですが、なければ作るしかないですね。

というわけで調べてみたら、ちゃんと PropertyChangeEvent というのがありました。パッケージが org.eclipse.jface.util というのが気になるところですが、まぁいいでしょう。ちゃんと IPreferenceStore インタフェースには addPropertyChangeListener というメソッドもあるし。

後はこれが使えるかどうかです。

さっそく試してみました。

WRPEPlugin クラスの start メソッドに次のようなコードを付け加えてみました。

	public void start(BundleContext context) throws Exception {
		super.start(context);

        IPreferenceStore store = getPreferenceStore();
        IPropertyChangeListener listener =
            new IPropertyChangeListener() {
                public void propertyChange(PropertyChangeEvent event) {
                    System.out.println("Prop: " + event.getProperty());
                    System.out.println("Old:  " + event.getOldValue());
                    System.out.println("New:  " + event.getNewValue());
                }
            };
        store.addPropertyChangeListener(listener);        
    }

これで実行してみると、

Prop: LG3D_HOME
Old:  
New:  C:\temp
Prop: LG3D_HOME
Old:  C:\temp
New:  D:\lg3d
Prop: LG3D_HOME
Old:  D:\lg3d
New:  C:\lg3d
Prop: LG3D_HOME
Old:  C:\lg3d
New:  D:\lg3d

と、ちゃんと値が変化するたびに、PropertyChangeEvent が発生しているようです。[Apply] ボタンでも [OK] ボタンでも大丈夫のようです。

さて、PorpertyChangeEvent が使えるのは分かりましたが、IJavaProject にはどのようにアクセスしましょうか?

LG3DProjectWizard クラスで IJavaProject オブジェクトを取得したら、それを WrpePlugin にセットしようと思ったのですが... よく考えてみたら、毎回ウィザードを使うわけではないのでした。

とするとどうやればいいのだろう?

寝てから調ることにしよう ^^;;