■拡張ポイント提供側(Lisnerへの通知側)
・CallBackに必要なメソッドを定義したインタフェースを作成
例)
public interface UpdateDataListenable {
//更新が通知された時に呼び出されるメソッド
void updateListen(List updatedData);
}

・拡張ポイントの実装
MANIFEST.MFを開いて、「拡張ポイント」タブを選択して「追加…」。ウィザードで拡張ポイントのIDと名前を入力する。

・スキーマファイルが作成されるので編集する。

今回の拡張ポイントでは、先に作成しておいたUpdateDataListenableの実装クラスを受け取りたいので「新規要素」を選択、任意の名前(拡張側で表示される)を決める。作成した要素で「新規属性」を選択し、属性名を入力する。Javaオブジェクトを必須で渡して欲しいので、「使用」は”require”、「型」は”java”、インタフェースで指定したいので「実装」に”UpdateDataListenable”を設定

・拡張ポイントに登録されたオブジェクトのリスナーメソッド(updateListen)を呼び出す処理を実装したクラスを作成する。

public class UpdateNotification
{
public static void notify(List updatedData)
{
IExtensionRegistry extRegistry = Platform.getExtensionRegistry();
IExtensionPoint point = extRegistry.getExtensionPoint([プラグインID].[拡張ポイントのID]);

for (IExtension extention : point.getExtensions())
{
for (IConfigurationElement element : extention.getConfigurationElements())
{
if (element.getName().equals(“listener”))
{
try
{
Object observer = element.createExecutableExtension(“class”);
if (observer instanceof UpdateDataListenable)
{
((UpdateDataListenable) observer).updateListen(updatedData);
}
;
} catch (CoreException e)
{
e.printStackTrace();
}
}
}
}
}
}
このnotifyメソッドを呼び出せば、全リスナーへの通知が行われる仕組み。

■拡張ポイント利用側の設定(リスナー側)
・リスナーとして登録したいクラスにUpdateDataListenableをimplementしておく。

・先ほどの拡張ポイントを提供するプラグインを参照に追加しておく。(参照については説明を省略)

・MANIFEST.MFを開き、「拡張」タブで「追加…」を選択。先ほど定義した拡張ポイントを提供するプラグインID.拡張ポイントIDを選択する。

・「拡張要素詳細」に定義しておいた属性(listener)が表示されているので、参照を押してUpdateDataListenableを実装しておいたリスナークラスを指定。

この要領で、必要なリスナーを登録しておけば、プラグインの独立性を保ったままリスナーパターンが実装できる。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です