1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java Sat Jan 04 22:38:59 2014 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java Sat Jan 04 23:27:17 2014 +0100
1.3 @@ -25,9 +25,11 @@
1.4 import info.globalcode.sql.dk.configuration.Properties;
1.5 import info.globalcode.sql.dk.configuration.Property;
1.6 import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname;
1.7 +import java.util.Date;
1.8 import java.util.HashMap;
1.9 import java.util.List;
1.10 import java.util.Map;
1.11 +import java.util.Scanner;
1.12 import javax.xml.namespace.QName;
1.13
1.14 /**
1.15 @@ -37,6 +39,7 @@
1.16 public class XhtmlFormatter extends AbstractXmlFormatter {
1.17
1.18 public static final String NAME = "xhtml"; // bash-completion:formatter
1.19 + private static final String CSS_FILE = "info/globalcode/sql/dk/formatter/XhtmlFormatter.css";
1.20 private int resultSetCounter = 0;
1.21 private int updatesResultCounter = 0;
1.22
1.23 @@ -64,11 +67,25 @@
1.24
1.25 printStartElement(qname("head"));
1.26 printTextElement(qname("title"), null, Constants.PROGRAM_NAME + ": batch results");
1.27 + printCss();
1.28 printEndElement();
1.29
1.30 printStartElement(qname("body"));
1.31 }
1.32
1.33 + private void printCss() {
1.34 +
1.35 + try (Scanner css = new Scanner(getClass().getClassLoader().getResourceAsStream(CSS_FILE))) {
1.36 + Map<QName, String> attributes = new HashMap<>(1);
1.37 + attributes.put(qname("type"), "text/css");
1.38 + printStartElement(qname("style"), attributes);
1.39 + while (css.hasNext()) {
1.40 + printText(css.nextLine(), true);
1.41 + }
1.42 + printEndElement();
1.43 + }
1.44 + }
1.45 +
1.46 @Override
1.47 public void writeEndBatch() {
1.48 super.writeEndBatch();
1.49 @@ -81,6 +98,11 @@
1.50 public void writeStartDatabase(DatabaseDefinition databaseDefinition) {
1.51 super.writeStartDatabase(databaseDefinition);
1.52 printTextElement(qname("h1"), null, "Database: " + databaseDefinition.getName());
1.53 +
1.54 + printStartElement(qname("p"));
1.55 + printText("This is XHTML output of batch executed at: ", true);
1.56 + printText(new Date().toString(), true);
1.57 + printEndElement();
1.58 }
1.59
1.60 @Override
1.61 @@ -101,9 +123,9 @@
1.62
1.63 printStartElement(qname("table"));
1.64
1.65 - printStartElement(qname("theader"));
1.66 + printStartElement(qname("thead"));
1.67 printStartElement(qname("tr"));
1.68 - printTextElement(qname("td"), null, "number/name");
1.69 + printTextElement(qname("td"), null, "id");
1.70 printTextElement(qname("td"), null, "type");
1.71 printTextElement(qname("td"), null, "value");
1.72 printEndElement();
1.73 @@ -121,7 +143,7 @@
1.74 }
1.75 printTextElement(qname("td"), null, numberOrName);
1.76 printTextElement(qname("td"), null, p.getType().name());
1.77 - printTextElement(qname("td"), null, toString(p.getValue()));
1.78 + printTableData(p.getValue());
1.79 printEndElement();
1.80 }
1.81 printEndElement();
1.82 @@ -130,12 +152,20 @@
1.83 }
1.84 }
1.85
1.86 + private void printTableData(Object value) {
1.87 + Map<QName, String> attributes = new HashMap<>(1);
1.88 + if (value instanceof Number || value instanceof Boolean) {
1.89 + attributes.put(qname("class"), "number");
1.90 + }
1.91 + printTextElement(qname("td"), attributes, String.valueOf(value));
1.92 + }
1.93 +
1.94 @Override
1.95 public void writeColumnsHeader(ColumnsHeader header) {
1.96 super.writeColumnsHeader(header);
1.97 printTextElement(qname("h3"), null, "Data:");
1.98 printStartElement(qname("table"));
1.99 - printStartElement(qname("theader"));
1.100 + printStartElement(qname("thead"));
1.101 printStartElement(qname("tr"));
1.102 for (ColumnDescriptor cd : header.getColumnDescriptors()) {
1.103 // TODO: type
1.104 @@ -156,7 +186,7 @@
1.105 @Override
1.106 public void writeColumnValue(Object value) {
1.107 super.writeColumnValue(value);
1.108 - printTextElement(qname("td"), null, toString(value));
1.109 + printTableData(value);
1.110 }
1.111
1.112 @Override
1.113 @@ -169,7 +199,8 @@
1.114 public void writeStartResultSet() {
1.115 super.writeStartResultSet();
1.116 resultSetCounter++;
1.117 - printTextElement(qname("h2"), null, "Result set " + resultSetCounter);
1.118 + printEmptyElement(qname("hr"), null);
1.119 + printTextElement(qname("h2"), null, "Result set #" + resultSetCounter);
1.120 }
1.121
1.122 @Override
1.123 @@ -177,13 +208,16 @@
1.124 super.writeEndResultSet();
1.125 printEndElement();
1.126 printEndElement();
1.127 +
1.128 + printTextElement(qname("p"), null, "Record count: " + getCurrentRowCount());
1.129 }
1.130
1.131 @Override
1.132 public void writeStartUpdatesResult() {
1.133 super.writeStartUpdatesResult();
1.134 updatesResultCounter++;
1.135 - printTextElement(qname("h2"), null, "Updates result " + updatesResultCounter);
1.136 + printEmptyElement(qname("hr"), null);
1.137 + printTextElement(qname("h2"), null, "Updates result #" + updatesResultCounter);
1.138 }
1.139
1.140 @Override
1.141 @@ -191,8 +225,4 @@
1.142 super.writeUpdatedRowsCount(updatedRowsCount);
1.143 printTextElement(qname("p"), null, "Updated rows: " + updatedRowsCount);
1.144 }
1.145 -
1.146 - protected String toString(Object value) {
1.147 - return String.valueOf(value);
1.148 - }
1.149 }