diff -r d63de8a0a61f -r 67f5ff139da0 java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Sat Jan 04 19:38:51 2014 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Sat Jan 04 19:39:35 2014 +0100 @@ -17,15 +17,103 @@ */ package info.globalcode.sql.dk.formatting; +import info.globalcode.sql.dk.Parameter; +import info.globalcode.sql.dk.Xmlns; +import info.globalcode.sql.dk.configuration.DatabaseDefinition; +import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname; +import static info.globalcode.sql.dk.Functions.notNull; +import info.globalcode.sql.dk.NamedParameter; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import javax.xml.namespace.QName; + /** * * @author Ing. František Kučera (frantovo.cz) */ -public class XmlFormatter extends AbstractFormatter { +public class XmlFormatter extends AbstractXmlFormatter { public static final String NAME = "xml"; // bash-completion:formatter public XmlFormatter(FormatterContext formatterContext) { super(formatterContext); } + + @Override + public void writeStartBatch() { + super.writeStartBatch(); + printStartDocument(); + printStartElement(qname("batchResults"), singleAttribute(qname("xmlns"), Xmlns.BATCH_RESULT)); + } + + @Override + public void writeEndBatch() { + super.writeEndBatch(); + + printEndElement(); + printEndDocument(); + } + + @Override + public void writeStartDatabase(DatabaseDefinition databaseDefinition) { + super.writeStartDatabase(databaseDefinition); + Map attributes = databaseDefinition.getName() == null ? null : singleAttribute(qname("name"), databaseDefinition.getName()); + printStartElement(qname("database"), attributes); + } + + @Override + public void writeEndDatabase() { + super.writeEndDatabase(); + printEndElement(); + } + + @Override + public void writeStartResultSet() { + super.writeStartResultSet(); + printStartElement(qname("resultSet")); + } + + @Override + public void writeEndResultSet() { + super.writeEndResultSet(); + printEndElement(); + } + + @Override + public void writeQuery(String sql) { + super.writeQuery(sql); + printTextElement(qname("sql"), null, sql); + } + + @Override + public void writeParameters(List parameters) { + super.writeParameters(parameters); + + for (Parameter p : notNull(parameters)) { + + Map attributes = new LinkedHashMap<>(2); + if (p instanceof NamedParameter) { + attributes.put(qname("name"), ((NamedParameter) p).getName()); + } + attributes.put(qname("type"), p.getType().name()); + + printTextElement(qname("parameter"), attributes, String.valueOf(p.getValue())); + } + + } + + @Override + public void writeColumnsHeader(ColumnsHeader header) { + super.writeColumnsHeader(header); + + for (ColumnDescriptor cd : header.getColumnDescriptors()) { + Map attributes = new LinkedHashMap<>(4); + attributes.put(qname("label"), cd.getLabel()); + attributes.put(qname("name"), cd.getName()); + attributes.put(qname("typeName"), cd.getTypeName()); + attributes.put(qname("type"), String.valueOf(cd.getType())); + printEmptyElement(qname("columnHeader"), attributes); + } + } }