/* | |
* Available context bindings: | |
* COLUMNS List<DataColumn> | |
* ROWS Iterable<DataRow> | |
* OUT { append() } | |
* FORMATTER { format(row, col); formatValue(Object, col) } | |
* TRANSPOSED Boolean | |
* plus ALL_COLUMNS, TABLE, DIALECT | |
* | |
* where: | |
* DataRow { rowNumber(); first(); last(); data(): List<Object>; value(column): Object } | |
* DataColumn { columnNumber(), name() } | |
*/ | |
import java.util.regex.Pattern | |
NEWLINE = System.getProperty("line.separator") | |
pattern = Pattern.compile("[^\\w\\d]") | |
def escapeTag(name) { | |
name = pattern.matcher(name).replaceAll("_") | |
return name.isEmpty() || !Character.isLetter(name.charAt(0)) ? "_$name" : name | |
} | |
def printRow = { values, rowTag, namer, valueToString -> | |
OUT.append("$NEWLINE<$rowTag") | |
values.eachWithIndex { it, index -> | |
def tag = namer(it, index) | |
def str = valueToString(it) | |
OUT.append(/ $tag="$str"/) | |
} | |
OUT.append("/>") | |
} | |
OUT.append( | |
"""<?xml version="1.0" encoding="UTF-8"?> | |
<dataset>""") | |
if (!TRANSPOSED) { | |
ROWS.each { row -> printRow(COLUMNS, TABLE.getName(), {it, _ -> escapeTag(it.name())}) { FORMATTER.format(row, it) } } | |
} | |
else { | |
def values = COLUMNS.collect { new ArrayList<String>() } | |
ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } } | |
values.eachWithIndex { it, index -> printRow(it, escapeTag(COLUMNS[index].name()), { _, i -> "row${i + 1}" }, { it }) } | |
} | |
OUT.append(""" | |
</dataset> | |
""") |
This comment has been minimized.
This comment has been minimized.
@brrshh Unfortunately I leveraged the existing code, I would expect the error for an empty table, just add one row and it should just work |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
Perfect work. But I got unexpected error in case of trying to export empty table. As I understand in line 40.