前回のビルダーを拡張し、今回は org.dom4j.Element ではなく org.dom4j.Document を構築するビルダーにします(一覧)。
サンプル・コード
サンプル・コードはこんな感じ。
def builder = new SimpleDom4jBuilder() def doc = builder.table(customer:'c', invoice:'i'){ join(c:'invoice_id', i:'id') and{ greater('i.total':1000) like('c:name':'%Bill%', 'child') } } assert doc instanceof org.dom4j.Document
SimpleDom4jBuilder の実装
ビルダーの実装は、概ね前回と同じですが、
- protected createNode(name, Map atts, text) メソッド
- protected setParent(parent, child) メソッド
に少し処理を付け加えます。
createNode() メソッド
ルート要素を構築している場合 (current == null) は、構築した要素から org.dom4j.Document オブジェクトを作成して返します。 そうでない場合は前回と同じです。
@Override protected createNode(name, Map atts, text) { Element e = this.factory.createElement(name.toString()); // 属性と子テキストの設定。 前回と同じ。 if(current == null) return this.factory.createDocument(e) else return e }
setParent() メソッド
親要素が Document オブジェクトの時は、ルート要素に子要素を付加します。 そうでない場合は前回と同じです。
@Override protected void setParent(parent, child) { if(parent instanceof Document) parent.rootElement.add(child) else parent.add(child) }
前回に比べてそんなに複雑にはなりませんでした。
- 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 146回
- この商品を含むブログ (121件) を見る