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

JAR ファイルを作る その 2

というわけで、objectContribution に filter を追加してみました。

必須のアトリビュートは name と value。というかアトリビュートはこれしかないんですけどね。Tomcat Plug-in だと name が project Nature。って、ナンの意味なんでしょ?

まぁ、いいや。とりあえず実行。でも、やっぱり何もあらわれません。

やっぱり、action がないとダメなのでしょうか。

で、作ってみました。

action

分からなかったのが、class。とりあえず、適当に作ってみました。

さて、実行。

Popup Menu

おぉ、ちゃんとメニューが表示されました。

ところが、[Create JAR File] を選択してみると...

Could not create action delegate for id: jp.gr.java_conf.lg3d.wrpe.action.createJar
Reason:
Action must implement IActionDelegate

そんなこと知らなかったよ。

で、Javadoc を見てみると、アクションの基本となるのが IActionDelegate で、用途に応じてこの派生インタフェースを使うようです。試しに Tomcat Plug-in を見てみたら IWorkbenchWindowActionDelegate インタフェースを使用していました。

ということで、IWorkbenchWindowActionDelegate インタフェースをインプリメントするようにアクションクラスを変更。

public class CreateJarActionDelegate implements IWorkbenchWindowActionDelegate {

    public CreateJarActionDelegate() {
        super();
        // TODO Auto-generated constructor stub
    }

    public void dispose() {
        // TODO Auto-generated method stub
    }

    public void init(IWorkbenchWindow window) {
        // TODO Auto-generated method stub
    }

    public void run(IAction action) {
        // TODO Auto-generated method stub
    }

    public void selectionChanged(IAction action, ISelection selection) {
        // TODO Auto-generated method stub
    }
}

ちなみに plugin.xml の該当部は次のようになっています。

   <extension
         point="org.eclipse.ui.popupMenus">
      <objectContribution
            adaptable="true"
            id="jp.gr.java_conf.lg3d.wrpe.action.popup.javaProject"
            objectClass="org.eclipse.core.resources.IProject">
         <menu
               id="jp.gr.java_conf.lg3d.wrpe.action.popup.javaProject.menu"
               label="Project Looking Glass"
               path="additions">
            <separator name="group"/>
         </menu>
         <action
               class="jp.gr.java_conf.skrb.lg3d.wrpe.action.CreateJarActionDelegate"
               id="jp.gr.java_conf.lg3d.wrpe.action.createJar"
               label="Create JAR File"
               menubarPath="jp.gr.java_conf.lg3d.wrpe.action.popup.javaProject.menu/group"/>
      </objectContribution>
   </extension>

実行して、先ほどと同じように [Create JAR File] を選択。でも、何も起きません。当たり前か、何も実装していないのだから。でも、エラーは出ませんでした。

中身はこれから実装していけばいいとして、もう 1 つ不具合を見つけてしまいました。今のままだと、どんなプロジェクトでも [Project Looking Glass] というメニュー項目が表示されてしまうのです。

メニューの対象となっているのが、org.eclipse.core.resources.IProject インタフェースとだけになっているので、こうなっているのでしょう。

LG3D Project で作成したものだけにしたいのですが、そのためには何らかのフィルターが必要です。でも、どうやってフィルタリングすればいいのか。

それは置いておいて、とりあえず中身を実装することからはじめましょう。