ユーザー・インターフェースまたは他のフレームワークを使用しない、プレーンかつ古典的 "Hello World" が、 どのような外観を持つかは誰でも知っています。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
この古典的な標準は、Eclipse プラットフォームのコンテキストではどのようになるでしょうか。 Hello World を自己完結型のプログラムとして考えるのではなく、それをプラットフォームの拡張として作り直します。 世界に対して "hello" とあいさつをしたいのですから、 そのあいさつを含めるようにワークベンチを拡張する方法を考える必要があります。
プラットフォームのユーザー・インターフェース・コンポーネントを掘り下げていくと、 ワークベンチの UI を拡張し、カスタマイズする方法を徹底的に検討することになります。 ここでは、最も単純な拡張の 1 つであるビューから始めることにしましょう。
ワークベンチ・ウィンドウは、さまざまなビジュアル・パーツを提供するフレームとして考えることができます。 これらのパーツは、ビューとエディターという 2 つの主要カテゴリーに分類されます。 エディターについては後で説明することにします。 ビュー は、ユーザーがワークベンチで操作する、あるオブジェクトに関する情報を提供します。 ビューは、多くの場合、ユーザーがワークベンチ内のさまざまなオブジェクトを選択するごとに、その内容を変更します。
hello world プラグインでは、ユーザーに "Hello World" というあいさつをするための独自のビューを インプリメントします。
パッケージ org.eclipse.ui と そのサブパッケージには、ワークベンチのユーザー・インターフェース (UI) API を定義している パブリック・インターフェースが含まれています。 これらのインターフェースの多くはデフォルトのインプリメンテーション・クラスを持っており、 それを拡張してシステムに簡単な変更を加えることができます。 この hello world の例では、hello とあいさつするラベルを提供するようにワークベンチ・ビューを拡張します。
関係するインターフェースは、IViewPart です。 これは、ビューをワークベンチに追加するようにインプリメントしなければならないメソッドを定義しています。 クラス ViewPart は、 このインターフェースのデフォルトのインプリメンテーションを提供しています。 つまり、ビューを表示するために必要なウィジェットは、ビュー・パーツが作成します。
ワークベンチ内の標準のビューは、多くの場合、 ユーザーが選択したオブジェクト、またはナビゲートされているオブジェクトに関する情報を表示します。 ビューは、ワークベンチで発生したアクションに基づき、その内容を更新します。 今回の場合は、単に hello とあいさつするだけなので、ビューはきわめて簡単になります。
package org.eclipse.examples.helloworld;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.ui.part.ViewPart;
public class HelloWorldView extends ViewPart {
Label label;
public HelloWorldView() {
}
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.WRAP);
label.setText("Hello World");
}
public void setFocus() {
// set focus to my widget. For
a label, this doesn't
// make much sense, but for more
complex sets of widgets
// you would decide which one gets
the focus.
}
}
ビュー・パーツは、createPartControl メソッドでそのビュー・パーツを表すウィジェットを作成します。 この例では、SWT ラベルを作成し、それに "Hello World" というテキストを設定します。
コーディング部分が完成しました。 これでこの新しいクラスをコンパイルすることができます (プラグインをコンパイルできるよう、IDE またはコンパイラー環境でプラットフォーム JAR ファイルが可視になっていることを 必ず確認してください)。ただし、さらにこの新規のビューを実行する方法も理解する必要があります。
新規のビューは次のようになっています。
このビューをどのようにプラットフォームに追加すればよいのでしょうか。
プラットフォームに対して、ビューを追加することを知らせる必要があります。 これを行うには、org.eclipse.ui.views 拡張ポイントを拡張します。プラグインのコードの配置場所、 および追加する拡張を含む、プラグインを記述するマニフェスト・ファイル plugin.xml を提供することにより、 拡張を登録します。
<?xml version="1.0" ?>
<plugin
name="Hello World Example"
id="org.eclipse.examples.helloworld"
version="1.0"
provider-name="Object Technology International, Inc.">
<requires>
<import plugin="org.eclipse.ui" />
</requires>
<runtime>
<library name="helloworld.jar" />
</runtime>
<extension point="org.eclipse.ui.views">
<category
id="org.eclipse.examples.helloworld.hello"
name="Hello" />
<view
id="org.eclipse.examples.helloworld.helloworldview"
name="Hello Greetings"
category="org.eclipse.examples.helloworld.hello"
class="org.eclipse.examples.helloworld.HelloWorldView" />
</extension>
</plugin>
このファイルでは、このプラグインの 名前 (name)、id、バージョン (version)、 および プロバイダー名 (provider-name) を定義します。
また、必須のプラグインもリストします。プラグインではワークベンチと SWT API を使用するので、 org.eclipse.ui をリストする必要があります。 また、実行可能コードがある場所も記述する必要があります。この例の場合は、 コードを helloworld.jar にパッケージします。
最後に、プラグインを追加する拡張ポイントを宣言します。 org.eclipse.ui.views 拡張は、 いくつかの異なる構成パラメーターを持っています。 マニフェストで指定したパラメーターを調べてみましょう。
最初に、ビューの拡張に対してカテゴリー (category) を宣言しています。カテゴリーは、 ワークベンチの「ビューの表示 (Show View)」ダイアログで、 関連するビューを 1 つにグループ化するために使用することができます。 ここでは、カテゴリーが独自のグループで表示されるよう、"Hello" という独自のカテゴリーを定義しています。
この例のビューの、固有の id を宣言し、 ビューのインプリメンテーションを提供するクラス (class) の名前を指定しています。 また、ビューの名前 (name)、"Hello Greetings" も指定しています。 この名前は、「ビューの表示 (View Show)」ダイアログと、ビューのタイトル・バーに表示されます。
プラグインのマニフェスト・ファイルには、多くの ID が使用されています。 それぞれの拡張ポイントは、多くの場合、ID (ビューの拡張ポイントに対して上記で使用されたカテゴリー ID など) を必要とする 構成パラメーターを定義しています。この例では、プラグイン ID も定義しています。 通常、インストールされているプラグインそれぞれの一意性を保証するために、 すべての ID に Java パッケージ名を接頭部として使用する必要があります。
接頭部の後に使用する特定の名前は、ユーザーの任意です。 ただし、プラグイン ID の接頭部がパッケージの 1 つと全く同一の場合は、 そのパッケージ内のクラス名は使用しないようにしてください。 使用すると、ID 名を見ているのかクラス名を見ているのかを区別することができなくなります。
また、異なる拡張構成パラメーターには同じ ID を使用しないでください。 上記のマニフェストでは、共通の ID 接頭部 (org.eclipse.examples.helloworld) を使用しましたが、 ID はすべて固有です。 このような命名アプローチは、ファイルの読み取り、および関係する ID の確認に役立ちます。