# HG changeset patch # User František Kučera # Date 1388874437 -3600 # Node ID ef432015fdee4cb68b20c5ec478468d9e2f2036f # Parent f2510551b5bf1445393985e919b97b8576d906b2 XHTML formatter: CSS and other improvements diff -r f2510551b5bf -r ef432015fdee java/sql-dk/data/info/globalcode/sql/dk/formatter/XhtmlFormatter.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/sql-dk/data/info/globalcode/sql/dk/formatter/XhtmlFormatter.css Sat Jan 04 23:27:17 2014 +0100 @@ -0,0 +1,42 @@ +body { + font-family: sans-serif; + font-size: 16px; + padding-left: 16px; +} + +pre { + background-color: #ddd; + padding: 6px; + border-radius: 4px; + overflow: auto; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +table { + border-collapse:collapse; + box-shadow: 3px 3px 3px grey; + margin-top: 10px; + margin-bottom: 20px; +} +td, th { + border: 1px solid black; + padding-top: 4px; + padding-bottom: 4px; + padding-left: 6px; + padding-right: 6px; + font-weight: normal; +} +td.number { + text-align: right; +} +thead tr { + background: #ddd; + color:black; +} +tbody tr:hover { + background-color: #eee; + color:black; +} \ No newline at end of file diff -r f2510551b5bf -r ef432015fdee java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java Sat Jan 04 22:38:59 2014 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java Sat Jan 04 23:27:17 2014 +0100 @@ -25,9 +25,11 @@ import info.globalcode.sql.dk.configuration.Properties; import info.globalcode.sql.dk.configuration.Property; import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Scanner; import javax.xml.namespace.QName; /** @@ -37,6 +39,7 @@ public class XhtmlFormatter extends AbstractXmlFormatter { public static final String NAME = "xhtml"; // bash-completion:formatter + private static final String CSS_FILE = "info/globalcode/sql/dk/formatter/XhtmlFormatter.css"; private int resultSetCounter = 0; private int updatesResultCounter = 0; @@ -64,11 +67,25 @@ printStartElement(qname("head")); printTextElement(qname("title"), null, Constants.PROGRAM_NAME + ": batch results"); + printCss(); printEndElement(); printStartElement(qname("body")); } + private void printCss() { + + try (Scanner css = new Scanner(getClass().getClassLoader().getResourceAsStream(CSS_FILE))) { + Map attributes = new HashMap<>(1); + attributes.put(qname("type"), "text/css"); + printStartElement(qname("style"), attributes); + while (css.hasNext()) { + printText(css.nextLine(), true); + } + printEndElement(); + } + } + @Override public void writeEndBatch() { super.writeEndBatch(); @@ -81,6 +98,11 @@ public void writeStartDatabase(DatabaseDefinition databaseDefinition) { super.writeStartDatabase(databaseDefinition); printTextElement(qname("h1"), null, "Database: " + databaseDefinition.getName()); + + printStartElement(qname("p")); + printText("This is XHTML output of batch executed at: ", true); + printText(new Date().toString(), true); + printEndElement(); } @Override @@ -101,9 +123,9 @@ printStartElement(qname("table")); - printStartElement(qname("theader")); + printStartElement(qname("thead")); printStartElement(qname("tr")); - printTextElement(qname("td"), null, "number/name"); + printTextElement(qname("td"), null, "id"); printTextElement(qname("td"), null, "type"); printTextElement(qname("td"), null, "value"); printEndElement(); @@ -121,7 +143,7 @@ } printTextElement(qname("td"), null, numberOrName); printTextElement(qname("td"), null, p.getType().name()); - printTextElement(qname("td"), null, toString(p.getValue())); + printTableData(p.getValue()); printEndElement(); } printEndElement(); @@ -130,12 +152,20 @@ } } + private void printTableData(Object value) { + Map attributes = new HashMap<>(1); + if (value instanceof Number || value instanceof Boolean) { + attributes.put(qname("class"), "number"); + } + printTextElement(qname("td"), attributes, String.valueOf(value)); + } + @Override public void writeColumnsHeader(ColumnsHeader header) { super.writeColumnsHeader(header); printTextElement(qname("h3"), null, "Data:"); printStartElement(qname("table")); - printStartElement(qname("theader")); + printStartElement(qname("thead")); printStartElement(qname("tr")); for (ColumnDescriptor cd : header.getColumnDescriptors()) { // TODO: type @@ -156,7 +186,7 @@ @Override public void writeColumnValue(Object value) { super.writeColumnValue(value); - printTextElement(qname("td"), null, toString(value)); + printTableData(value); } @Override @@ -169,7 +199,8 @@ public void writeStartResultSet() { super.writeStartResultSet(); resultSetCounter++; - printTextElement(qname("h2"), null, "Result set " + resultSetCounter); + printEmptyElement(qname("hr"), null); + printTextElement(qname("h2"), null, "Result set #" + resultSetCounter); } @Override @@ -177,13 +208,16 @@ super.writeEndResultSet(); printEndElement(); printEndElement(); + + printTextElement(qname("p"), null, "Record count: " + getCurrentRowCount()); } @Override public void writeStartUpdatesResult() { super.writeStartUpdatesResult(); updatesResultCounter++; - printTextElement(qname("h2"), null, "Updates result " + updatesResultCounter); + printEmptyElement(qname("hr"), null); + printTextElement(qname("h2"), null, "Updates result #" + updatesResultCounter); } @Override @@ -191,8 +225,4 @@ super.writeUpdatedRowsCount(updatedRowsCount); printTextElement(qname("p"), null, "Updated rows: " + updatedRowsCount); } - - protected String toString(Object value) { - return String.valueOf(value); - } }