前回のビルダーを拡張し、今回は 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件) を見る