class AbstractKeyValue {
def key
def value
AbstractKeyValue(key, value){
this.key = key
this.value = value
}
}
class KeyValue extends AbstractKeyValue {
KeyValue(key, value) {
super(key, value)
}
def build(dest) {
dest."${key}"(value)
}
}
class KeyList extends AbstractKeyValue {
def opts
KeyList(key, value, opts) {
super(key, value)
this.opts = opts
}
KeyList(key, value) {
this(key, value, null)
}
def build(dest) {
dest."${key}"(opts) {
for(v in value) {
v.build(dest)
}
}
}
}
@Newify([KeyValue,KeyList])
def makeList() { [
KeyValue("key1", "value1"),
KeyValue("key2", "value2"),
KeyList("key3", [
KeyValue("key3-1", "value3-1"),
KeyValue("key3-2", "value3-2")
])
] }
def sw = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(sw)
xml.doubleQuotes = true
new KeyList("langs", makeList(), [type: 'current']).build(xml)
def expect = '''\
<langs type="current">
<key1>value1</key1>
<key2>value2</key2>
<key3>
<key3-1>value3-1</key3-1>
<key3-2>value3-2</key3-2>
</key3>
</langs>'''
assert sw.toString() == expect