2008年6月28日土曜日

Tutorial Example 3改のBundleの作り方(Swingを使う場合の例)

OSGi BundleのTutorialにあるExample3をEclipseで作ってみます.かつ,先のsample.FelixApplicationで動くようにDialogで入出力を行うようにします.

0.依存関係のあるBundleのjarファイルをEclipseに追加しておく
(これをEclipseの中でどうやるのかわからなかったので無理矢理な解決法です.誰か正攻法があれば教えてください.自分でExample2のプロジェクトをつくって,Package Explorer中でOpenしてある場合はそれはそのまま参照されています.)
Example3はExample2を利用します.Example2で定義してあるInterfaceを利用しているのでExample2のjarをEclipseが見えるようにしておきまます.
jarファイル: http://y30.net/pg/plugins/osgis/tutorial.Example_2_1.0.0.jar
これをEclipseのpluginsフォルダに放り込んでおきます.
で,起動.

1.Projectを作成
 New/'Project' を選択(Java Projectじゃないよ)

 Wizerdの選択にてPlug-in Projectを選択.
(画像はexample1の時を流用しているので1->3と読み直してください)

 Dialogに入力
  Project name: tutorial.example3
  Target Platform: an OSGi framework standard
  (ほかそのまま)
  Nextを押す.

#(OSGi framework standardが選べればEclipse 3.2でも良いはずです)

 'Plug-in Content'のDialogとなる.
  Finishを押す.


2.プロジェクトに依存するtutorial.Example_2 Bundleを指定しておく.
 Plug-in Manifest Editorを使ってbuildする.
 このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)

 左から2番目のタブ'Dependencies'にある'Required Plug-ins'で'Add...'ボタンを押す.


 でてきたDialogから'tutorial.Example_2'を選ぶ(もしくはフィールドに入力する).
 これは0.で入れてないと(もしくはExample_2をプロジェクトとして持っていないと見えない.)

 保存することを忘れずに.

3.Activator.javaの編集
 src/example/tutorial3/Activator.javaにここのコードを書き写す.
ただし以下の部分が改造部.

改造内容

sample.FelixApplicationはコンソールがないためDialogで処理するように改造

tutorial2, 2bと複数登録した場合に両方利用した結果を返すように改造

改造前 1

     System.out.print("Enter word: ");
word = in.readLine();

改造後 1

     word = JOptionPane.showInputDialog("Enter word: ");
JOptionPaneを使うのでswingのサンプル


改造前 2

     // First, get a dictionary service and then check
// if the word is correct.
DictionaryService dictionary =
(DictionaryService) context.getService(refs[0]);
if (dictionary.checkWord(word))
{
System.out.println("Correct.");
}
else
{
System.out.println("Incorrect.");
}

// Unget the dictionary service.
context.ungetService(refs[0]);

改造後 2

     String msg = "";
for (int i = 0; i < refs.length; i++) {
ServiceReference sr = refs[i];
DictionaryService dictionary = (DictionaryService) context
.getService(sr);
String lang = (String) sr.getProperty("Language");
if (msg.length() != 0) {
msg += "\n";
}
msg += lang;
if (dictionary.checkWord(word)) {
msg += ": Correct.";
} else {
msg += ": Incorrect.";
}
context.ungetService(sr);
}
JOptionPane.showMessageDialog(null, msg);



4.Plug-in Manifest Editorを使ってbuildする.
 このEditor, META-INF/MANIFEST.MFをクリックすると立ち上がる.(プロジェクトができた時も立ち上がってる.)

4.1ビルドの前にswingパッケージをImport対象として指定する.
 左から2番目のタブ'Dependencies'にある'Imported Packages'で'Add...'ボタンを押す.
 でてきたDialogから'javax.swing'を選ぶ(もしくはフィールドに入力する).


4.2ビルド
 一番左のタブ'Overview'にあるExportingの3項目
 '3. Export the plug-in in a format suitable for deployment using the(?) Export Wizard'をクリック(Export Wizard部分)
 で,Deployable Plugin-ins and fragmentsダイアログがでる.
 DestinationタブのDirectoryを選択しテキトーな場所(ディレクトリ)を指定.(以降ここを${DIRECTORY}と呼ぶ)
 Finishを押す.


 ${DIRECTORY}/plugins/tutorial.example3_1.0.0.jarが出来上がる.

0 件のコメント: