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 にセットしようと思ったのですが... よく考えてみたら、毎回ウィザードを使うわけではないのでした。
とするとどうやればいいのだろう?
寝てから調ることにしよう ^^;;