プロジェクト・ネーチャーの適用方法
「プロジェクト・ネーチャーの定義方法」において解説したプロジェクト・ネーチャーだが,プロジェクトへの適用方法はまだ紹介していなかった。ここでは,プロジェクト・ネーチャーのプロジェクトへの適用方法について解説する。
プロジェクトを表すクラスはIProjectクラスだが,そのプロジェクトの名前や説明文など,プロジェクト自身を説明するための情報(メタデータ)はIProjectクラスから直接取得することができない。その代わりに,プロジェクトの説明情報を扱うためのAPIが,IProjectDescriptionインタフェースに規定されている。IProjectDescriptionオブジェクトは,IProjectオブジェクトのgetDescriptionメソッドを使用することによって取得することができる。
プロジェクトにどんなプロジェクト・ネーチャーが適用されているか,という情報についても,IProjectDescrptionオブジェクトが保持している。もう少し細かく言うと,プロジェクト・ネーチャーはそれを特定するためのIDが定義されるが,IProjectDescriptionオブジェクトは,プロジェクトに適用されているプロジェクト・ネーチャーのID文字列の配列を保持している。
つまり,新規にプロジェクト・ネーチャーを適用したい場合は,適用したいプロジェクト・ネーチャーのIDを,IProjectDescriptionオブジェクトが保持しているIDの配列に追加してあげればよい。逆に,あるプロジェクト・ネーチャーの適用を解除したければ,IProjectDescriptionオブジェクトが保持しているIDの配列から,解除したいプロジェクト・ネーチャーのIDを削除すればよい。
例として,「プロジェクト・ネーチャーの定義方法」で新規に定義したyoichiro.myPlugin.myNatureというIDのプロジェクト・ネーチャーを,あるプロジェクトに適用するための手順を以下に示す。
String newNatureId = "yoichiro.myPlugin.myNature";
IProject project = ...;
IProjectDescription description = project.getDescription();
if (!description.hasNature(newNatureId)) {
String[] ids = description.getNatureIds();
String[] newIds = new String[ids.length + 1];
System.arraycopy(ids, 0, newIds, 0, ids.length);
newIds[ids.length] = newNatureId;
description.setNatureIds(newIds);
project.setDescription(description);
}
重複登録を避けるため,最初にhasNatureメソッドを用いて既に登録されているかどうかをチェックしている。その後,getNatureIdsメソッドにより,適用されているプロジェクト・ネーチャーのIDの配列を取得し,その個数+1個の文字列配列を新規に作成,続いて配列の内容をコピーしている。そして,新規に生成した配列の最後の要素に,適用したいプロジェクト・ネーチャーのIDをセットしている。
新規に適用するプロジェクト・ネーチャーのIDが追加された配列をsetNatureIdsメソッドに渡してIProjectDescriptionオブジェクトにセットし,IProjectDescriptionオブジェクトをIProjectオブジェクトのsetDescriptionメソッドに渡してセットして完了となる。setDescriptionして初めてプロジェクト・ネーチャーが適用される点に注意。
一度上記の処理を行ってプロジェクト・ネーチャーを適用すれば,そのプロジェクトを閉じようが,Eclipseを終了しようが,プロジェクトを開いたときにプロジェクト・ネーチャーの適用は継続される。なぜかというと,setDescriptionメソッドでIProjectDescriptionオブジェクトをセットしたと同時に,それが持つ情報が.projectファイルに書き込まれるからである。
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>TestProject</name>
<comment></comment>
...
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>yoichiro.myPlugin.myNature</nature>
</natures>
</projectDescription>
さて,まだ疑問に思うことがあるだろう。プロジェクト・ネーチャーを適用するのは,一体いつなのか?これの明確な正解はなく,もちろん任意のタイミングで適用させることができる。しかし,一般的にはプロジェクトが作成されるタイミング,すなわち新規プロジェクト作成ウィザードの処理の中で行うことがほとんどである。
| 固定リンク
この記事へのコメントは終了しました。
コメント
参考になります。面白いです♪どうも、ありがとうございます!
投稿: 逆援 掲示板 | 2010.02.04 08:33 午後