拡張ポイント・スキーマの使用
ワークスペース内のプラグインによって定義された拡張ポイントは、
独自のプラグインおよびその他のプラグインで即時に使用可能になります。
拡張ポイントに拡張ポイント・スキーマが定義されている場合、PDE は新規の拡張の作成を支援することができます。
この支援には、以下のものがあります。
- 有効な子エレメントだけが追加されるようにするために、
「新規作成」ポップアップ・メニューに選択項目を表示します。
- 有効な属性だけが設定されるようにするために、プロパティー・シートに属性情報を表示します。
- 属性の型 (boolean、string、および enumeration) に一致する正しい属性プロパティー・エディターを提供します。
- 特殊な属性タイプ (「java」および「リソース」) を追加サポートします。
- 状況表示行を使用して、プロパティー・シートでの選択時に、属性のドキュメンテーションの断片の最初の文を表示します。
例: 「Sample Parsers」拡張ポイントの使用
先に作成した拡張ポイントを使用する前に、想定されているインターフェースを定義する必要があります。ナビゲーターで com.example.xyz プロジェクトを選択し、
ツールバー・ボタンをクリックして、新しい Java インターフェースを作成します。
必ず、パッケージ名を com.example.xyz に設定し、
インターフェース名を IParser に設定してから、「終了」を押します。インターフェースを
次のように編集します。
package com.example.xyz;
public interface IParser {
/**
* Run the parser using the
provided mode */
public void parse(int mode);
}
以上で、拡張ポイントと、その XML スキーマ、および必須のインターフェースが得られました。
開いているエディターは必ずすべて保管してください。
これで、独自のプラグインとその他のプラグインを拡張ポイントにコントリビュートするための準備がすべて整いました。
- com.example.xyz プラグインのマニフェスト・エディターを開きます。
- 「拡張」ページに切り替え、「新規」>「拡張」をクリックします。
- 選択肢として "com.example.xyz.parsers" があります。このオプションを選択して、
「終了」を押します。
- 新しく追加した "com.example.xyz.parsers" エレメントを選択し、「新規」>「パーサー」メニューを
表示します。
(この拡張ポイントは、任意の数の「パーサー」エレメントを収容できるように指定しました。)
- 新しいパーサー・エレメントを選択します。「拡張エレメント詳細」セクションには、id、name、class、
および mode という 4 つの属性が表示されます。
これらの属性を選択すると、属性に関する簡単な情報が状況表示行にどのように表示されるのか、注意してください。
この情報は、拡張ポイント・スキーマから直接得られたものです。
- 「名前」を「Default Parser」に変更しします。「モード」を「manual」に変更します。
- 「拡張エレメント詳細」セクションの class ハイパーリンクをクリックします。PDE が JDT の
「新規 Java クラス」ウィザードとシームレスに統合され、IParser インターフェースを自動的に実装するために
スキーマ属性が利用されていることがわかります。ソース・フォルダーとして「com.example.xyz/src」を、
パッケージとして「com.example.xyz」を、クラス名として「DefaultParser」をそれぞれ使用し、クラスを作成します。
「終了」を押します。
- これで、 DefaultParser クラスの Java エディターが開きます。
このクラスが正しいインターフェース (IParser) をどのように実装しているか、
また、既に「parse」メソッドのスタブがインプリメントされていることに注意してください。
エディターを閉じて class ハイパーリンクを再びクリックすると、エディターで DefaultParser クラスが
再び開かれます。「新規 Java クラス」ウィザードは、クラス属性テキスト・フィールドで指定されている
クラスが見つからない場合にのみ表示されます。見つかった場合は、リンクをクリックするとエディターで
そのクラスが開かれます。
以上からわかるように、拡張ポイントに完全な XML スキーマを提供すると、
PDE によって潜在的なすべてのユーザーを支援し、エラーの発生を防ぐことにより、すべてのユーザーの役に立ちます。
