Rational Developer for System z バージョン 7.6

JET2 テンプレート

データベース・アプリケーション生成プログラムでは、コード生成テンプレート・システムとして JET2 を使用します。 このトピックでは、JET2 テンプレートおよび変換出力の例を示します。

テンプレート・システムとして JET2 は、JSP ページの書き込みに似た機能です。 これは、必要な場合、タグ・ライブラリーと Java™ スニペットをサポートします。また、テンプレートが EMF モデルの仕様に従って作成された場合、JET2 は その特定 EMF モデルを入力として直接使用することができます。

IBM® developerWorks® には、JET2 の ガイドが用意されています。 次のアドレスを参照してください。

http://www.ibm.com/developerworks/opensource/library/os-ecl-jet/

注: 各テンプレート・グループには ID があります。

以下のコードは、単純な EMF モデルの入力インスタンスの例です。
<?xml version="1.0" encoding="UTF-8"?>
<dataAccess:Employee xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:dataAccess="http:///dataAccess.ecore" name="Bob Smith" address="123 Main St" employeeNumber="12345">
  <customers name="Sam Brown" address="55 Bank St">
    <orders orderNumber="101" date="2005-12-15T00:00:00.000-0500" quantity="25"/>
    <orders orderNumber="13" date="2005-11-15T00:00:00.000-0500" quantity="55"/>
  </customers>
  <customers name="Tim Safari" address="18 Elephant Rd">
    <orders orderNumber="77" date="2005-11-20T00:00:00.000-0500" quantity="3"/>
  </customers>
</dataAccess:Employee>
開始点は、control.jet ファイルです。 以下に例を示します。
<%@taglib prefix="ws" id="org.eclipse.emf.jet2.workspaceTags" %>

	<%-- run a template that lists employees and creates a file list.txt --%>
	<ws:file template="templates/listEmployees.jet" path="list.txt"/>
2 番目のセグメントは、次に示す listEmployees.jet ファイルなどのテンプレート・ファイルです。
<%@taglib prefix="c" id="org.eclipse.emf.jet2.controlTags" %>

<%-- /selects the document root, which in this case is the emf Resource object --%>
<%-- /selects the contents of the Resource.getContents() --%>
<c:iterate select="/contents" var="employee">
Employee: <c:get select="$employee/@name"/> (<c:get select="$employee/@employeeNumber"/>), <c:get select="$employee/@address"/>
<c:iterate select="$employee/customers" var="customer">
   Customer: <c:get select="$customer/@name"/>, <c:get select="$customer/@address"/>
<c:iterate select="$customer/orders" var="order">
         Order: <c:get select="$order/@orderNumber"/>, <c:get select="$order/@date"/>,  qty: <c:get select="$order/@quantity"/>
</c:iterate>
</c:iterate>
</c:iterate>

Orders for 'Sam Brown'
<c:iterate select="/contents/customers [@name='Sam Brown']/orders" var="order">
         Order: <c:get select="$order/@orderNumber"/>, <c:get select="$order/@date"/>,  qty: <c:get select="$order/@quantity"/>
</c:iterate>
テンプレートでは、次の JET2 タグを使用します。
  • <c:iterate>

    XPath 式を評価し (何らかの結果セットを取得)、 結果セット内のエレメントごとにタグ内容の時間を処理します。

  • <c:get>

    XPath 式を評価し、結果をストリングに変換してテンプレート出力に書き込みます。

XPath 式の評価では、最初の / が EMF Resource オブジェクトにマップされます。 リソースのルート・エレメントにアクセスするには、 子である contents (/contents) を参照します。 これは、Resource.getContents() の呼び出しと同等です。 例えば、タグ <c:iterate select="/contents" var="employee"> は、Resource.getContents() の結果セットを繰り返します。 繰り返すたびに、結果セット内の現行エレメントが employee 変数によって示されます。

最初の Resource オブジェクトの後は、<c:iterate select="$employee/customers" var="customer"> タグになります。

EMF 属性に対しては、次のように XPath @ 属性軸指定子を使用して、 アクセスできます。
<c:get select="$employee/@name"/>
これにより、Employee での name 属性の値が戻されます (Employee.getName())。
さらに強力な XPath 例を以下に示します。
<c:iterate select="/contents/customers [@name='Sam Brown']/orders" var="order">
このコードは、name 属性が Sam Brown に等しい顧客を検索してその注文を検出し、 この処理を反復します。
変換の出力を以下に示します。
Employee: Bob Smith (12345), 123 Main St
   Customer: Sam Brown, 55 Bank St
         Order: 101, Thu Dec 15 00:00:00 EST 2005,  qty: 25
         Order: 13, Tue Nov 15 00:00:00 EST 2005,  qty: 55
   Customer: Tim Safari, 18 Elephant Rd
         Order: 77, Sun Nov 20 00:00:00 EST 2005,  qty: 3

Orders for 'Sam Brown'
         Order: 101, Thu Dec 15 00:00:00 EST 2005,  qty: 25
         Order: 13, Tue Nov 15 00:00:00 EST 2005,  qty: 55

追加情報については、JET チュートリアルを参照してください。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)