ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの「Eclipse:独自拡張ポイントの使い方」について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Eclipse3.2で、独自プラグインを実装しようとしているのですが、
実装した独自拡張ポイントの使い方が分らずにいます。
分る方がいらっしゃいましたら、助言いただけませんでしょうか。

■やりたいこと
たとえば、org.eclipse.ui.actionSetsの拡張ポイントを利用して、
Eclipseのメニューバーにメニューを追加。この、自分で追加したメニューをクリックした際に、
上記、自分で拡張した、拡張ポイントAに関する実装Bを使いたいのですが、
どのようにコーディングしていいか分らない状態です。

この、実装方法を教えていただけないでしょうか。

 ・できたこと
   A.拡張ポイントの定義(インターフェースの定義)
   B.拡張ポイントの実装(上記拡張ポイントの実装)
   
 ・できないこと
   ・上記拡張ポイントAの実装Bを使う方法
 
■例:
 拡張ポイントは、インターフェースIHello に関するもの
 拡張は、 HelloService implements IHello  で、
 メニューをクリックしたとき、この拡張クラスIHelloインターフェースで定義されている、
 doSomething() メソッドを実行したい。
 

■できた範囲
BundleContextが、取得できれば、以下の方法で実装できそうなのですが、
メニューをクリックした際に呼ばれるのは、IWorkbenchWindowActionDelegateインターフェースの、public void run(IAction action) メソッドを実装した部分であるため、
BundleContext自体のとり方が分らずにとまっています・・・


 Filter filter = context.createFilter("(objectClass="+IHello.class.getName()+")");
 ServiceTracker tracker = new ServiceTracker(context, filter, null);
 tracker.open();

 //サービスの取得
 IHello service = (IHello) tracker.getService();

 //サービスの実行
 service.doSomething();

 //サービストラッカの終了
 tracker.close();

この方法以外でもかまいませんので、
実装方法を教えていただけないでしょうか、よろしくお願いいたします。

■コンソール上での実行方法
また、できれば、上記のようなEclipseプラットフォーム内だけではなく、
OSGiコンソール上で使う方法も教えていただけたらと思います。

分っている情報:
###DOSにて

> java -jar org.eclipse.osgi_3.2.1.jar -console
で、OSGIを実行、
install コマンドで、jarファイルをインストールができること、
ssコマンドで、各プラグインの状態がわかるというところ
までは理解できたのですが、自分で作成した拡張ポイントの実装を
どう利用するのか、どう実行できるのかが分らないでいます。
plugin.xmlファイルあたりをいじる必要があると思うのですが、、、

以上よろしくお願いします。

コメント(1)

一部解決したので、一応書き込んでおきます。
(コマンドラインからの起動の方法はまだ解決していません)

org.eclipse.core.runtime.Platform
を利用する事で、どこでもプラグインを
読み込むことができるようになりました。

■コードサンプル
    IPluginRegistry registry = Platform.getPluginRegistry();
    IExtensionPoint extensionPoint =
      registry.getExtensionPoint(observerId);
    IExtension[] extensions = extensionPoint.getExtensions();
    for (int i = 0; i < extensions.length; i++) {
      IConfigurationElement[] elements =
        extensions[i].getConfigurationElements();
      for (int j = 0; j < elements.length; j++) {
        if (elements[j].getName().equals("observer")) {
          try {
            Object observer =
              elements[j].createExecutableExtension("class");
            if (observer instanceof IObserver) {
              ((IObserver)observer).update();
            }
          } catch (CoreException e) {
            e.printStackTrace();
          }
        }
      }

※「observer」「class」のキーワードは、Plugin.xmlの
 拡張ポイントの定義の仕方によって変わります。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。