-
-
Save kimukou/873150 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Created by IntelliJ IDEA. | |
* User: kyon | |
* Date: 11/03/15 | |
* Time: 0:54 | |
* To change this template use File | Settings | File Templates. | |
*/ | |
/* | |
class KeyValue { | |
def key | |
def value | |
KeyValue(key, value){ | |
this.key = key | |
this.value = value | |
} | |
} | |
*/ | |
class KeyValue { | |
KeyValue(){} | |
KeyValue(key,value){setProperty(key,value) } | |
KeyValue(properties_){properties=properties_} | |
Set<String> keySet(){properties.keySet()} | |
def properties = [:] | |
Object getProperty( String property ) { | |
//println "read from property $property" | |
properties[ property ] | |
} | |
void setProperty( String property, Object newValue ) { | |
//println "wrote to property $property/$newValue" | |
properties[ property ] = newValue | |
} | |
} | |
def convert(def builder, List list, boolean first = true) { | |
if (first) { | |
builder.langs(type: 'current') { | |
convert(builder, list, false) | |
} | |
return | |
} | |
//else { | |
list.each { kv-> | |
//println kv.dump() | |
kv.keySet().each{key-> | |
def value=kv."$key" | |
//println value.getClass() | |
switch(value.getClass()){ | |
case List: | |
builder."$key" { | |
convert(builder,value, false) | |
} | |
break | |
case Map: | |
builder."$key"{ | |
convert(builder,value) | |
} | |
break | |
case Set://attribute対応 | |
def val | |
def attr=[:] | |
value.each{ | |
if(it.contains(":")){ | |
arr = it.split(":") | |
attr.put(arr[0],arr[1]) | |
} | |
else{ | |
val = it | |
} | |
} | |
builder."$key"(val,attr) | |
break | |
default: | |
builder."$key"(value) | |
break | |
} | |
} | |
/* | |
if (kv.value instanceof List) | |
builder."${kv.key}" { | |
convert(builder, kv.value, false) | |
} | |
else | |
builder."${kv.key}"(kv.value) | |
*/ | |
} | |
//} | |
} | |
def convert(def builder, Map kv){ | |
kv.keySet().each{key-> | |
def value=kv."$key" | |
//println value.getClass() | |
switch(value.getClass()){ | |
case List: | |
builder."$key" { | |
convert(builder,value, false) | |
} | |
break | |
case Map: | |
builder."$key"{ | |
convert(builder,value) | |
} | |
break | |
case Set://attribute対応 | |
def val | |
def attr=[:] | |
value.each{ | |
if(it.contains(":")){ | |
arr = it.split(":") | |
attr.put(arr[0],arr[1]) | |
} | |
else{ | |
val = it | |
} | |
} | |
builder."$key"(val,attr) | |
break | |
default: | |
builder."$key"(value) | |
break | |
} | |
} | |
} | |
def sw = new StringWriter() | |
def xml = new groovy.xml.MarkupBuilder(sw) | |
xml.doubleQuotes = true // 属性はダブルクォートだよね! | |
/* | |
def list = [ | |
new KeyValue("key1","value1"), | |
new KeyValue("key2","value2"), | |
new KeyValue("key3", [ | |
new KeyValue("key3-1","value3-1"), | |
new KeyValue("key3-2","value3-2") | |
]) | |
] | |
*/ | |
def list = [ | |
new KeyValue("key1":"value1"), | |
//new KeyValue("key2":"value2"), | |
new KeyValue("key2":["value2","id:5555"] as Set), | |
new KeyValue("key3", [ | |
//new KeyValue("key3-1":"value3-1"), | |
//new KeyValue("key3-2":"value3-2") | |
"key3-1":"value3-1", | |
"key3-2":"value3-2", | |
"key3-3": | |
[ | |
"key3-3-1":["value3-3-1","id:1234","name:tacohachi", "birthday:1970-10-13"] as Set, | |
"key3-3-2":"value3-3-2" | |
] | |
]) | |
] | |
def expect = """ | |
<langs type="current"> | |
<key1>value1</key1> | |
<key2 id="5555">value2</key2> | |
<key3> | |
<key3-1>value3-1</key3-1> | |
<key3-2>value3-2</key3-2> | |
<key3-3> | |
<key3-3-1 id="1234" birthday="1970-10-13" name="tacohachi">value3-3-1</key3-3-1> | |
<key3-3-2>value3-3-2</key3-3-2> | |
</key3-3> | |
</key3> | |
</langs> | |
""" | |
/* | |
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>""" | |
*/ | |
convert(xml, list) | |
//println sw.toString() | |
//println expect | |
//このassertコードだと、改行コードがあってもNGになるはず! | |
//assert sw.toString() == expect | |
//attribute判定が出来ない>< | |
//langs = new XmlSlurper().parseText(sw.toString()) | |
//assert langs==new XmlSlurper().parseText(expect) | |
//こちら側は可能 | |
langs = new XmlParser().parseText(sw.toString()) | |
assert langs.toString() ==new XmlParser().parseText(expect).toString() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment