java/sql-dk/src/main/java/info/globalcode/sql/dk/formatting/XhtmlFormatter.java
author František Kučera <franta-hg@frantovo.cz>
Tue, 05 Mar 2019 21:22:33 +0100
branchv_0
changeset 245 b6ff5b7a8422
parent 238 4a1864c3e867
child 250 aae5009bd0af
permissions -rw-r--r--
sqldk-relpipe convergence started
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
128
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     1
/**
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     2
 * SQL-DK
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     3
 * Copyright © 2014 František Kučera (frantovo.cz)
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     4
 *
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     5
 * This program is free software: you can redistribute it and/or modify
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     7
 * the Free Software Foundation, either version 3 of the License, or
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     8
 * (at your option) any later version.
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
     9
 *
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    13
 * GNU General Public License for more details.
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    14
 *
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    16
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    17
 */
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    18
package info.globalcode.sql.dk.formatting;
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    19
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    20
import info.globalcode.sql.dk.Constants;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    21
import info.globalcode.sql.dk.NamedParameter;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    22
import info.globalcode.sql.dk.Parameter;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    23
import info.globalcode.sql.dk.Xmlns;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    24
import info.globalcode.sql.dk.configuration.DatabaseDefinition;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    25
import info.globalcode.sql.dk.configuration.Properties;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    26
import info.globalcode.sql.dk.configuration.Property;
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
    27
import java.sql.Array;
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
    28
import java.sql.SQLException;
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    29
import java.util.Date;
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    30
import java.util.List;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    31
import java.util.Map;
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    32
import java.util.Scanner;
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
    33
import java.util.logging.Level;
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
    34
import java.util.logging.Logger;
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    35
import javax.xml.namespace.QName;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    36
128
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    37
/**
155
eb3676c6929b more JavaDoc
František Kučera <franta-hg@frantovo.cz>
parents: 152
diff changeset
    38
 * Prints result sets and parameters as tables, SQL as preformatted and updates counts as
eb3676c6929b more JavaDoc
František Kučera <franta-hg@frantovo.cz>
parents: 152
diff changeset
    39
 * paragraphs. You can pick XHTML fragments (usually tabular data) and use it on your website or use
eb3676c6929b more JavaDoc
František Kučera <franta-hg@frantovo.cz>
parents: 152
diff changeset
    40
 * whole output as preview or report.
128
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    41
 *
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    42
 * @author Ing. František Kučera (frantovo.cz)
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    43
 */
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    44
public class XhtmlFormatter extends AbstractXmlFormatter {
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    45
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
    46
	private static final Logger log = Logger.getLogger(XhtmlFormatter.class.getName());
128
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    47
	public static final String NAME = "xhtml"; // bash-completion:formatter
136
c0f9521900bf XML/XHTML formatter – DOCTYPE
František Kučera <franta-hg@frantovo.cz>
parents: 135
diff changeset
    48
	private static final String DOCTYPE = "html PUBLIC \"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN\" \"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd\"";
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    49
	private static final String CSS_FILE = "info/globalcode/sql/dk/formatter/XhtmlFormatter.css";
142
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
    50
	private int statementCounter = 0;
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    51
	private int resultSetCounter = 0;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    52
	private int updatesResultCounter = 0;
128
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    53
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
    54
	public XhtmlFormatter(FormatterContext formatterContext) {
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    55
		super(addDefaults(formatterContext));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    56
	}
245
b6ff5b7a8422 sqldk-relpipe convergence started
František Kučera <franta-hg@frantovo.cz>
parents: 238
diff changeset
    57
	
b6ff5b7a8422 sqldk-relpipe convergence started
František Kučera <franta-hg@frantovo.cz>
parents: 238
diff changeset
    58
	private QName qname(String localPart) {
b6ff5b7a8422 sqldk-relpipe convergence started
František Kučera <franta-hg@frantovo.cz>
parents: 238
diff changeset
    59
		return new QName(Xmlns.XHTML, localPart);
b6ff5b7a8422 sqldk-relpipe convergence started
František Kučera <franta-hg@frantovo.cz>
parents: 238
diff changeset
    60
	}
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    61
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    62
	/**
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    63
	 * Do not indent text – preserve whitespace for pre elements
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    64
	 */
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    65
	private static FormatterContext addDefaults(FormatterContext formatterContext) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    66
		Properties defaults = new Properties(1);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    67
		defaults.add(new Property(PROPERTY_INDENT_TEXT, "false"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    68
		formatterContext.getProperties().setLastDefaults(defaults);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    69
		return formatterContext;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    70
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    71
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    72
	@Override
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    73
	public void writeStartBatch() {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    74
		super.writeStartBatch();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    75
		printStartDocument();
136
c0f9521900bf XML/XHTML formatter – DOCTYPE
František Kučera <franta-hg@frantovo.cz>
parents: 135
diff changeset
    76
		printDoctype(DOCTYPE);
152
7a3382823fc3 XML formatter: use singleAttribute(qname(""), "")
František Kučera <franta-hg@frantovo.cz>
parents: 142
diff changeset
    77
		printStartElement(qname("html"), singleAttribute(qname("xmlns"), Xmlns.XHTML));
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    78
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    79
		printStartElement(qname("head"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    80
		printTextElement(qname("title"), null, Constants.PROGRAM_NAME + ": batch results");
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    81
		printCss();
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    82
		printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    83
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    84
		printStartElement(qname("body"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    85
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    86
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    87
	private void printCss() {
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    88
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    89
		try (Scanner css = new Scanner(getClass().getClassLoader().getResourceAsStream(CSS_FILE))) {
152
7a3382823fc3 XML formatter: use singleAttribute(qname(""), "")
František Kučera <franta-hg@frantovo.cz>
parents: 142
diff changeset
    90
			printStartElement(qname("style"), singleAttribute(qname("type"), "text/css"));
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    91
			while (css.hasNext()) {
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    92
				printText(css.nextLine(), true);
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    93
			}
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    94
			printEndElement();
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    95
		}
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    96
	}
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
    97
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    98
	@Override
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
    99
	public void writeEndBatch() {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   100
		super.writeEndBatch();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   101
		printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   102
		printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   103
		printEndDocument();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   104
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   105
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   106
	@Override
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   107
	public void writeStartDatabase(DatabaseDefinition databaseDefinition) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   108
		super.writeStartDatabase(databaseDefinition);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   109
		printTextElement(qname("h1"), null, "Database: " + databaseDefinition.getName());
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   110
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   111
		printStartElement(qname("p"));
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   112
		printText("This is XHTML output of batch executed at: ", true);
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   113
		printText(new Date().toString(), true);
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   114
		printEndElement();
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   115
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   116
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   117
	@Override
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   118
	public void writeQuery(String sql) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   119
		super.writeQuery(sql);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   120
		printTextElement(qname("pre"), null, sql);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   121
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   122
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   123
	@Override
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   124
	public void writeParameters(List<? extends Parameter> parameters) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   125
		super.writeParameters(parameters);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   126
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   127
		if (parameters == null || parameters.isEmpty()) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   128
			printTextElement(qname("p"), null, "(this query has no parameters)");
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   129
		} else {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   130
			printTextElement(qname("h3"), null, "Parameters:");
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   131
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   132
			printStartElement(qname("table"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   133
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   134
			printStartElement(qname("thead"));
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   135
			printStartElement(qname("tr"));
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   136
			printTextElement(qname("td"), null, "id");
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   137
			printTextElement(qname("td"), null, "type");
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   138
			printTextElement(qname("td"), null, "value");
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   139
			printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   140
			printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   141
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   142
			printStartElement(qname("tbody"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   143
			for (int i = 0; i < parameters.size(); i++) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   144
				Parameter p = parameters.get(i);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   145
				printStartElement(qname("tr"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   146
				String numberOrName;
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   147
				if (p instanceof NamedParameter) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   148
					numberOrName = ((NamedParameter) p).getName();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   149
				} else {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   150
					numberOrName = String.valueOf(i + 1);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   151
				}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   152
				printTextElement(qname("td"), null, numberOrName);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   153
				printTextElement(qname("td"), null, p.getType().name());
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   154
				printTableData(p.getValue());
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   155
				printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   156
			}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   157
			printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   158
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   159
			printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   160
		}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   161
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   162
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   163
	private void printTableData(Object value) {
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   164
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   165
		if (value instanceof Array) {
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   166
			Array sqlArray = (Array) value;
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   167
			try {
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   168
				Object[] array = (Object[]) sqlArray.getArray();
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   169
				printStartElement(qname("td"));
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   170
				printArray(array);
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   171
				printEndElement();
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   172
			} catch (SQLException e) {
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   173
				log.log(Level.SEVERE, "Unable to format array", e);
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   174
				printTableData(String.valueOf(value));
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   175
			}
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   176
		} else {
152
7a3382823fc3 XML formatter: use singleAttribute(qname(""), "")
František Kučera <franta-hg@frantovo.cz>
parents: 142
diff changeset
   177
			Map<QName, String> attributes = null;
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   178
			if (value instanceof Number) {
152
7a3382823fc3 XML formatter: use singleAttribute(qname(""), "")
František Kučera <franta-hg@frantovo.cz>
parents: 142
diff changeset
   179
				attributes = singleAttribute(qname("class"), "number");
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   180
			} else if (value instanceof Boolean) {
152
7a3382823fc3 XML formatter: use singleAttribute(qname(""), "")
František Kučera <franta-hg@frantovo.cz>
parents: 142
diff changeset
   181
				attributes = singleAttribute(qname("class"), "boolean");
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   182
			}
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   183
			printTextElement(qname("td"), attributes, String.valueOf(value));
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   184
		}
138
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   185
	}
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   186
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   187
	private void printArray(Object[] array) {
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   188
		printStartElement(qname("ul"));
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   189
		for (Object o : array) {
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   190
			if (o instanceof Object[]) {
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   191
				printStartElement(qname("li"));
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   192
				printTextElement(qname("p"), null, "nested array:");
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   193
				printArray((Object[]) o);
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   194
				printEndElement();
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   195
			} else {
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   196
				printTextElement(qname("li"), null, String.valueOf(o));
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   197
			}
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   198
		}
b765713c60e9 XHTML formatter: simple formatting of (multidimensional) arrays
František Kučera <franta-hg@frantovo.cz>
parents: 137
diff changeset
   199
		printEndElement();
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   200
	}
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   201
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   202
	@Override
142
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   203
	public void writeStartResultSet(ColumnsHeader header) {
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   204
		super.writeStartResultSet(header);
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   205
		resultSetCounter++;
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   206
		printEmptyElement(qname("hr"), null);
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   207
		printTextElement(qname("h3"), null, "Result set #" + resultSetCounter);
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   208
		printStartElement(qname("table"));
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   209
		printStartElement(qname("thead"));
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   210
		printStartElement(qname("tr"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   211
		for (ColumnDescriptor cd : header.getColumnDescriptors()) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   212
			// TODO: type
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   213
			printTextElement(qname("td"), null, cd.getLabel());
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   214
		}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   215
		printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   216
		printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   217
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   218
		printStartElement(qname("tbody"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   219
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   220
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   221
	@Override
142
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   222
	public void writeEndResultSet() {
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   223
		super.writeEndResultSet();
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   224
		printEndElement();
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   225
		printEndElement();
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   226
		printTextElement(qname("p"), null, "Record count: " + getCurrentRowCount());
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   227
	}
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   228
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   229
	@Override
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   230
	public void writeStartRow() {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   231
		super.writeStartRow();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   232
		printStartElement(qname("tr"));
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   233
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   234
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   235
	@Override
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   236
	public void writeColumnValue(Object value) {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   237
		super.writeColumnValue(value);
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   238
		printTableData(value);
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   239
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   240
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   241
	@Override
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   242
	public void writeEndRow() {
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   243
		super.writeEndRow();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   244
		printEndElement();
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   245
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   246
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   247
	@Override
142
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   248
	public void writeStartStatement() {
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   249
		super.writeStartStatement();
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   250
		statementCounter++;
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   251
		printEmptyElement(qname("hr"), null);
142
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   252
		printTextElement(qname("h2"), null, "SQL statement #" + statementCounter);
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   253
		resultSetCounter = 0;
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   254
		updatesResultCounter = 0;
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   255
	}
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   256
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   257
	@Override
142
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   258
	public void writeUpdatesResult(int updatedRowsCount) {
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   259
		super.writeUpdatesResult(updatedRowsCount);
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   260
		updatesResultCounter++;
135
ef432015fdee XHTML formatter: CSS and other improvements
František Kučera <franta-hg@frantovo.cz>
parents: 134
diff changeset
   261
		printEmptyElement(qname("hr"), null);
142
da1e38386d84 Formatters: structural change – new level „statement“ → query and parameters are no more duplicated into each result set or updates result
František Kučera <franta-hg@frantovo.cz>
parents: 138
diff changeset
   262
		printTextElement(qname("h3"), null, "Updates result #" + updatesResultCounter);
134
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   263
		printTextElement(qname("p"), null, "Updated rows: " + updatedRowsCount);
f2510551b5bf Basic XHTML formatter
František Kučera <franta-hg@frantovo.cz>
parents: 128
diff changeset
   264
	}
128
67f5ff139da0 XML formatter: abstract + part of basic XML formatter
František Kučera <franta-hg@frantovo.cz>
parents:
diff changeset
   265
}