« 新規ビルダーの定義 | トップページ | ビルダーの解除方法 »

2004.03.21

ビルダーの登録方法

新規ビルダーの定義」で紹介したビルダーは,プロジェクトに登録されることにより機能する。ここでは,ビルダーをプロジェクトに登録する方法を紹介する。

プロジェクト・ネーチャーの適用方法」では,プロジェクト・ネーチャーはIProjectDescriptionオブジェクトを使用して登録を行った。プロジェクト・ネーチャーの登録方法と同じように,ビルダーの登録はIProjectDescriptionインタフェースを使って行う

  String newBuilderId = "yoichiro.myPlugin.myBuilder";

  IProject project = ...;
  IProjectDescription description = project.getDescription();
  ICommand[] commands = description.getBuildSpec();
  for (int i = 0; i < commands.length; i++) {
    if (commands[i].getBuilderName().equals(newBuilderId)) {
      return; // ビルダー登録のキャンセル
    }
  }
  ICommand command = description.newCommand();
  command.setBuildName(newBuilderId);
  ICommand[] newCommands = new ICommand[commands.length + 1];
  System.arraycopy(commands, 0, newCommands, 0, commands.length);
  newCommands[commands.length] = command;
  description.setBuildSpec(newCommands);
  project.setDescription(description, null);

プロジェクト・ネーチャーの場合は,プロジェクトに登録されているプロジェクト・ネーチャーのIDの配列がIProjectDescriptionオブジェクトに格納されていたが(「プロジェクト・ネーチャーの適用方法」参照),ビルダーの場合は,各ビルダーがICommandオブジェクトで表現され,ICommandオブジェクトの配列がIProjectDescriptionオブジェクトに格納される。つまり,新規にビルダーを登録したいときは,そのビルダーを表すICommandオブジェクトをIProjectDescriptionオブジェクトが持つ配列に追加すればよい

最初に,既に登録したいビルダーがプロジェクトに適用されているかどうかをチェックする。登録されているビルダーのICommandオブジェクトの配列は,IProjectDescriptionオブジェクトのgetBuildSpecメソッドにより取得できる。そして,得た配列の要素の中で,登録したいビルダーのIDを持つICommandオブジェクトがあるかどうかを見る。ビルダーのIDはICommandオブジェクトのgetBuilderNameメソッドで取得することができる。もし見つかれば,登録処理は行わない。

登録されていなければ,新規にビルダーを登録する。新規ビルダー用に,新しくICommandオブジェクトを生成する。ICommandオブジェクトの生成は,IProjectDescriptionオブジェクトのnewCommandメソッドを使用する。そして,生成したICommandオブジェクトのsetBuilderNameメソッドに登録したいビルダーのID文字列をセットする。あとは「プロジェクト・ネーチャーの適用方法」のときと同じように,新規にICommandオブジェクトの配列を生成し,元々登録されていたICommandオブジェクトをコピーし,新規に生成したICommandオブジェクトを最後の要素にセットする。さらにIProjectDescriptionオブジェクトのsetBuildSpecメソッドに,新規ビルダーを追加したICommandオブジェクトの配列をセットして,最後にIProjectオブジェクトにIProjectDescriptionオブジェクトをsetDescriptionメソッドでセットして,新規ビルダーの登録が完了となる。

上記の処理により,プロジェクトにビルダーが追加される。もちろん,登録されたビルダーは.projectファイルに追記される

  <?xml version="1.0" encoding="UTF-8"?>
  <projectDescription>
    <name>TestProject</name>
    <comment></comment>
    <buildSpec>
      ...
      <buildCommand>
        <name>yoichiro.myPlugin.myBuilder</name>
        <arguments>
        </arguments>
      </buildCommand>
    </buildSpec>
    ...
  </projectDescription>

このように,ビルダーの登録方法はプロジェクト・ネーチャーの適用方法とほとんど同じである。

・・・長文になってしまった。反省。

|

« 新規ビルダーの定義 | トップページ | ビルダーの解除方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/334051

この記事へのトラックバック一覧です: ビルダーの登録方法:

« 新規ビルダーの定義 | トップページ | ビルダーの解除方法 »