XmlFormatter: support (multidimensional) arrays v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Thu, 16 Jan 2014 12:28:08 +0100
branchv_0
changeset 165 871185e406b3
parent 164 8cc7862605a1
child 166 5488c2dcf680
XmlFormatter: support (multidimensional) arrays
java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java	Thu Jan 16 12:23:16 2014 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/XmlFormatter.java	Thu Jan 16 12:28:08 2014 +0100
@@ -20,12 +20,16 @@
 import info.globalcode.sql.dk.Parameter;
 import info.globalcode.sql.dk.Xmlns;
 import info.globalcode.sql.dk.configuration.DatabaseDefinition;
-import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname;
 import static info.globalcode.sql.dk.Functions.notNull;
 import info.globalcode.sql.dk.NamedParameter;
+import static info.globalcode.sql.dk.formatting.AbstractXmlFormatter.qname;
+import java.sql.Array;
+import java.sql.SQLException;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import javax.xml.namespace.QName;
 
 /**
@@ -40,6 +44,7 @@
 
 	public static final String NAME = "xml"; // bash-completion:formatter
 	public static final String PROPERTY_LABELED_COLUMNS = "labeledColumns";
+	private static final Logger log = Logger.getLogger(XmlFormatter.class.getName());
 	private final boolean labeledColumns;
 
 	public XmlFormatter(FormatterContext formatterContext) {
@@ -152,10 +157,40 @@
 			}
 			attributes.put(qname("null"), "true");
 			printEmptyElement(qname("column"), attributes);
+		} else if (value instanceof Array) {
+			
+			
+			
+			Array sqlArray = (Array) value;
+			try {
+				Object[] array = (Object[]) sqlArray.getArray();
+				printStartElement(qname("column"), attributes);
+				printArray(array);
+				printEndElement();
+			} catch (SQLException e) {
+				log.log(Level.SEVERE, "Unable to format array", e);
+				writeColumnValue(String.valueOf(value));
+			}
+			
+			
 		} else {
 			printTextElement(qname("column"), attributes, toString(value));
 		}
 	}
+	
+	private void printArray(Object[] array) {
+		printStartElement(qname("array"));
+		for (Object o : array) {
+			if (o instanceof Object[]) {
+				printStartElement(qname("item"));
+				printArray((Object[]) o);
+				printEndElement();
+			} else {
+				printTextElement(qname("item"), null, String.valueOf(o));
+			}
+		}
+		printEndElement();
+	}
 
 	@Override
 	public void writeEndRow() {