カスタム XPath 関数の書き込み

レポート (RPTDESIGN ファイル) にある種のモデル情報を追加する前に、ターゲット・モデルから情報を抽出するカスタム XPath 関数を書き込む必要があります。
始める前に
前提条件: このタスクを完了するには、Eclipse プラグイン開発環境および UML2 API について十分に理解しておく必要があります。
このタスクについて
カスタム XPath 関数を書き込むには、以下のようにします。
  1. 新規プラグイン・プロジェクトの作成
    1. 「プラグイン開発」パースペクティブで、「ファイル」 > 「新規」 > 「その他」とクリックし、「プラグイン開発」を展開して、「プラグイン・プロジェクト」を選択し、「次へ」をクリックします。
    2. com.ibm.field.birt.xpath_extensions などのプラグイン ID を入力して、 「次へ」および「終了」をクリックします。 プラグインが「パッケージ・エクスプローラー」ビューに追加され、プラグインに関する情報が、「概要」ページの「プラグインのマニフェスト・エディター」ビューに表示されます。
  2. org.eclipse.jet.xpathFunctions 拡張ポイントを拡張します。
    1. 「概要」ページで、「拡張」タブをクリックし、 「追加」をクリックします。
    2. 「必須プラグインから拡張ポイントのみを表示 (Show only extension points from required plug-ins)」チェック・ボックスのチェック・マークを外します。
    3. 「拡張ポイント・フィルター」フィールドで、 *.jet と入力し、拡張のリストで、「org.eclipse.jet.xpathFunctions」をダブルクリックします。
    4. プラグインをプラグイン依存関係のリストに追加するには、「はい」をクリックします。
    5. 「MANIFEST.MF」タブをクリックし、プラグインが UML API への可視性を持つように、org.eclipse.uml2.uml を Require_Bundle リストに追加します。 リストのコードは、以下のようになります。
      Require_Bundle: org.eclipse.ui,
        org.eclipse.core.runtime,
        org.eclipse.uml2.uml,
        org.eclipse.jet
    6. 「plugin.xml」タブをクリックし、<function> 定義を変更して、カスタム関数を定義します。 例えば、SlotValue という名前で、2 つの引数を持ち、クラス com.ibm.field.birt.xpath_extensions.SlotValue で実装される関数を定義する場合、コードは、以下のようになります。
      <function
           implementation="com.ibm.field.birt.xpath_extensions.SlotValues"
           maxArgs="2"
           minArgs="2"
           name="slotValue">
      </function>
    7. 「ファイル」 > 「保存」を クリックします。
  3. コード・シェルを作成し、プラグインにリンクします。
    1. 「パッケージ・エクスプローラー」ビューで、新規プラグイン・プロジェクトを右クリックして、「新規」 > 「クラス」とクリックします。
    2. 「パッケージ」 フィールドで、 プラグイン・プロジェクトの名前を指定します。
    3. 「名前」フィールドで、クラスの名前を入力します。 新規関数に割り当てた名前と同じ名前を使用します。例えば、ステップ 2 で定義された関数の場合、名前は、SlotValue になります。
    4. インターフェースを追加する場合は、「追加」をクリックします。
    5. 新規 Java クラス」ダイアログ・ボックスの「インターフェースの選択」フィールドで、XPathFunction と入力し、一致する項目のリストから、「XPathFunction - org.eclipse.jet.xpath」を選択して、「OK」をクリックし、「終了」をクリックします。
  4. コードを XPath 関数の Java™ ファイルに追加し、必要なタスクを実行させ、ファイルを保存します。

    例えば、関数 SlotValue を最初の引数 (XPath 式) から生じるノードを通して反復させ、インスタンスの指定が検索される場合に、getStringValue 関数を起動することにより、スロット名引数により指定されるスロットの値を戻すときは、以下のコードを書き込みます。

    package com.ibm.field.birt.xpath_extensions;
    
    import java.util.Iterator;
    import java.util.List;
    
    import org.eclipse.jet.xpath.NodeSet;
    import org.eclipse.jet.xpath.XPathFunction;
    import org.eclipse.uml2.uml.InstanceSpecification;
    import org.eclipse.uml2.uml.Slot;
    import org.eclipse.uml2.uml.ValueSpecification;
    
    public class SlotValue implements XPathFunction {
    	
    	public String getStringValue(InstanceSpecification ia, String slotname) {
    		List slots = ia.getSlots();
    		for (Iterator iterator = slots.iterator(); iterator.hasNext();) {
    			Slot slot = (Slot) iterator.next();
    			String definingFeatureName = slot.getDefiningFeature().getName();			
    			if (definingFeatureName.equals(slotname)) {
    				List values = slot.getValues();
    				for (Iterator iterator2 = values.iterator(); iterator2
    						.hasNext();) {
    					ValueSpecification value = (ValueSpecification) iterator2.next();
    					return value.stringValue();
    				}
    			}
    		}
    		return null;
    	}
    	
    	public Object evaluate(List args) {
    		Object obj = args.get(0);
    		String slotname = (String) args.get(1);
    		if (obj instanceof NodeSet) {
    			NodeSet ns = (NodeSet) obj;
    			for (Iterator iterator = ns.iterator(); iterator.hasNext();) {
    				Object item = (Object) iterator.next();
    				if (item instanceof InstanceSpecification){
    					InstanceSpecification ispec = (InstanceSpecification) item;
    					if ((slotname != null)&&(slotname.length()>0))
    						return getStringValue(ispec,slotname);
    				}
    			}
    		}
    		return null;
    	}
    }
  5. 新規フィーチャー・プラグイン・プロジェクトの作成
    1. 「ファイル」 > 「新規」 > 「その他」とクリックし、「プラグイン開発」を展開して、「フィーチャー・プロジェクト」を選択し、「次へ」をクリックします。
    2. 「プロジェクト名」フィールドに、プロジェクトの名前を入力して、「次へ」をクリックします。 多くの場合、プラグインの名前と同様なフィーチャー名を割り当てると便利です。プラグイン com.ibm.field.birt.xpath_extensions の場合、com.ibm.field.birt.xpath_extensions.feature を選択することができます。
    3. プラグインにフィーチャーを組み込む場合、ステップ 1 で作成されたプラグインのチェック・ボックスを選択し、「終了」をクリックします。 フィーチャーが「パッケージ・エクスプローラー」ビューに追加され、フィーチャーに関する情報が、「概要」ページの「フィーチャーのマニフェスト・エディター」ビューに表示されます。
    4. 「概要」ページの「名前」フィールドで、 XPath Extensions Feature などのフィーチャー名を入力します。
    5. 「概要」ページで、「エクスポート・ウィザード」のリンクをクリックします。
    6. 「アーカイブ・ファイル」を選択し、ロケーションとファイルの名前 (xpath_extensions.zip など) を指定して、「終了」をクリックします。
    注: 複数のカスタム XPath 関数プロジェクトに対して、このフィーチャー・プラグインを使用できます。
  6. 新規プラグインをレポートを設計している Eclipse のインスタンスにインポートします。
    1. アーカイブ・ファイルを C:/temp/xpath_extensions などのディレクトリーに抽出します。
    2. Eclipse では、「ヘルプ」 > 「ソフトウェア更新」 > 「検索およびインストール」をクリックします。
    3. 「インストール/更新」ウィザードで、「インストールする新規フィーチャーを検索」をクリックし、「次へ」をクリックします。
    4. 「新規ローカル・サイト」をクリックし、フィーチャーとプラグインを含むフォルダーを選択して、「OK」をクリックし、 「終了」をクリックします。
    5. 「検索結果」ダイアログ・ボックスで、フィーチャーを選択し、「次へ」をクリックします。
    6. ご使用条件の条項に同意する場合は、「使用条件の条項に同意します」を選択し、「次へ」をクリックして、「終了」クリックします。
    7. コンピューターの再起動を指示するプロンプトが出された場合は、「はい」をクリックします。
タスクの結果
レポート設計で、新規の XPath 拡張機能を使用できるようになりました。
注: また、レポート設計のユーザーは、カスタム XPath 関数によって異なるレポート設計からレポートを生成する前に新規フィーチャーをインポートする必要があります。『カスタム XPath 関数のインポート』のトピックでは、一般情報が提供されていますが、ユーザーがどこでフィーチャーを取得し、どのように使用することができるかを説明した RPTDESIGN ファイルに付随するカスタム・ユーザー文書を提供する必要がある場合もあります。

フィードバック