java/sql-dk/src/info/globalcode/sql/dk/formatting/XhtmlFormatter.java
branchv_0
changeset 135 ef432015fdee
parent 134 f2510551b5bf
child 136 c0f9521900bf
     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  }