1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Sat Jan 04 19:38:51 2014 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java Sat Jan 04 19:39:35 2014 +0100
1.3 @@ -17,15 +17,103 @@
1.4 */
1.5 package info.globalcode.sql.dk.formatting;
1.6
1.7 +import info.globalcode.sql.dk.Parameter;
1.8 +import info.globalcode.sql.dk.Xmlns;
1.9 +import info.globalcode.sql.dk.configuration.DatabaseDefinition;
1.10 +import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname;
1.11 +import static info.globalcode.sql.dk.Functions.notNull;
1.12 +import info.globalcode.sql.dk.NamedParameter;
1.13 +import java.util.LinkedHashMap;
1.14 +import java.util.List;
1.15 +import java.util.Map;
1.16 +import javax.xml.namespace.QName;
1.17 +
1.18 /**
1.19 *
1.20 * @author Ing. František Kučera (frantovo.cz)
1.21 */
1.22 -public class XmlFormatter extends AbstractFormatter {
1.23 +public class XmlFormatter extends AbstractXmlFormatter {
1.24
1.25 public static final String NAME = "xml"; // bash-completion:formatter
1.26
1.27 public XmlFormatter(FormatterContext formatterContext) {
1.28 super(formatterContext);
1.29 }
1.30 +
1.31 + @Override
1.32 + public void writeStartBatch() {
1.33 + super.writeStartBatch();
1.34 + printStartDocument();
1.35 + printStartElement(qname("batchResults"), singleAttribute(qname("xmlns"), Xmlns.BATCH_RESULT));
1.36 + }
1.37 +
1.38 + @Override
1.39 + public void writeEndBatch() {
1.40 + super.writeEndBatch();
1.41 +
1.42 + printEndElement();
1.43 + printEndDocument();
1.44 + }
1.45 +
1.46 + @Override
1.47 + public void writeStartDatabase(DatabaseDefinition databaseDefinition) {
1.48 + super.writeStartDatabase(databaseDefinition);
1.49 + Map<QName, String> attributes = databaseDefinition.getName() == null ? null : singleAttribute(qname("name"), databaseDefinition.getName());
1.50 + printStartElement(qname("database"), attributes);
1.51 + }
1.52 +
1.53 + @Override
1.54 + public void writeEndDatabase() {
1.55 + super.writeEndDatabase();
1.56 + printEndElement();
1.57 + }
1.58 +
1.59 + @Override
1.60 + public void writeStartResultSet() {
1.61 + super.writeStartResultSet();
1.62 + printStartElement(qname("resultSet"));
1.63 + }
1.64 +
1.65 + @Override
1.66 + public void writeEndResultSet() {
1.67 + super.writeEndResultSet();
1.68 + printEndElement();
1.69 + }
1.70 +
1.71 + @Override
1.72 + public void writeQuery(String sql) {
1.73 + super.writeQuery(sql);
1.74 + printTextElement(qname("sql"), null, sql);
1.75 + }
1.76 +
1.77 + @Override
1.78 + public void writeParameters(List<? extends Parameter> parameters) {
1.79 + super.writeParameters(parameters);
1.80 +
1.81 + for (Parameter p : notNull(parameters)) {
1.82 +
1.83 + Map<QName, String> attributes = new LinkedHashMap<>(2);
1.84 + if (p instanceof NamedParameter) {
1.85 + attributes.put(qname("name"), ((NamedParameter) p).getName());
1.86 + }
1.87 + attributes.put(qname("type"), p.getType().name());
1.88 +
1.89 + printTextElement(qname("parameter"), attributes, String.valueOf(p.getValue()));
1.90 + }
1.91 +
1.92 + }
1.93 +
1.94 + @Override
1.95 + public void writeColumnsHeader(ColumnsHeader header) {
1.96 + super.writeColumnsHeader(header);
1.97 +
1.98 + for (ColumnDescriptor cd : header.getColumnDescriptors()) {
1.99 + Map<QName, String> attributes = new LinkedHashMap<>(4);
1.100 + attributes.put(qname("label"), cd.getLabel());
1.101 + attributes.put(qname("name"), cd.getName());
1.102 + attributes.put(qname("typeName"), cd.getTypeName());
1.103 + attributes.put(qname("type"), String.valueOf(cd.getType()));
1.104 + printEmptyElement(qname("columnHeader"), attributes);
1.105 + }
1.106 + }
1.107 }