// columns are 1 based
columnTitlesList.add(i, md.getColumnName(i+1));
}
// loop on script columns
for (ListIterator sIt = scripts.listIterator(); sIt.hasNext();) {
final ScriptColumn sc = (ScriptColumn)sIt.next();
columnTitlesList.add(sc.getPosition() - 1, sc.getTitle());
}
columnTitles = (String[])columnTitlesList.toArray(new String[0]);
// loop through rows
List tempRows = new ArrayList();
Map scriptInput = new HashMap();
Binding binding = new Binding();
while (rs.next()) {
List rowList = new ArrayList();
scriptInput.clear();
// loop on columns, 1 based
for ( int i = 0; i < numCols; i++ ) {
rowList.add(i, rs.getObject(i+1));
scriptInput.put(columnTitles[i], rs.getObject(i+1));
}
binding.setVariable("input", scriptInput);
// loop on script columns
for (ListIterator sIt = scripts.listIterator(); sIt.hasNext();) {
final ScriptColumn sc = (ScriptColumn)sIt.next();
scriptEngine.run(sc.getFile(), binding);
final Object output = binding.getVariable("output");
if (output instanceof Map) {
Map outMap = (Map)output;
rowList.add(sc.getPosition() - 1, new DefaultCell((String)outMap.get("URL"), (String)outMap.get("Value")));
} else if (output instanceof String) {
rowList.add(sc.getPosition() - 1, (String)output);
} else {
throw new Exception("Unknown groovy script return type (not a Map nor String).");
}
}
tempRows.add(new DefaultTableRow(rowList.toArray()));