diff --git a/jOOQ/src/main/java/org/jooq/Result.java b/jOOQ/src/main/java/org/jooq/Result.java index 57fc2857f6..9d615d261a 100644 --- a/jOOQ/src/main/java/org/jooq/Result.java +++ b/jOOQ/src/main/java/org/jooq/Result.java @@ -618,6 +618,14 @@ public interface Result extends List, Attachable { */ String formatXML(); + /** + * Get this result formatted as XML. + * + * @see http://www.jooq.org/xsd/jooq-export-2.6.0.xsd + */ + String formatXML(XMLFormat format); + /** * Get this result as a set of INSERT statements. *

@@ -728,6 +736,13 @@ public interface Result extends List, Attachable { */ void formatXML(OutputStream stream) throws IOException; + /** + * Like {@link #formatXML(XMLFormat)}, but the data is output onto an {@link OutputStream}. + * + * @throws IOException - an unchecked wrapper for {@link java.io.IOException}, if anything goes wrong. + */ + void formatXML(OutputStream stream, XMLFormat format) throws IOException; + /** * Like {@link #formatInsert()}, but the data is output onto an {@link OutputStream}. * @@ -833,6 +848,13 @@ public interface Result extends List, Attachable { */ void formatXML(Writer writer) throws IOException; + /** + * Like {@link #formatXML(XMLFormat)}, but the data is output onto a {@link Writer}. + * + * @throws IOException - an unchecked wrapper for {@link java.io.IOException}, if anything goes wrong. + */ + void formatXML(Writer writer, XMLFormat format) throws IOException; + /** * Like {@link #formatInsert()}, but the data is output onto a {@link Writer}. * diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index 8d8312f850..9c9163ecfe 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -115,6 +115,7 @@ import org.jooq.Table; import org.jooq.TableField; import org.jooq.TableRecord; import org.jooq.UpdatableRecord; +import org.jooq.XMLFormat; import org.jooq.exception.IOException; import org.jooq.exception.InvalidResultException; import org.jooq.tools.Convert; @@ -968,24 +969,46 @@ final class ResultImpl implements Result, AttachableInterna @Override public final String formatXML() { + return formatXML(new XMLFormat()); + } + + @Override + public final String formatXML(XMLFormat format) { StringWriter writer = new StringWriter(); - formatXML(writer); + formatXML(writer, format); return writer.toString(); } @Override public final void formatXML(OutputStream stream) { - formatXML(new OutputStreamWriter(stream)); + formatXML(stream, new XMLFormat()); + } + + @Override + public final void formatXML(OutputStream stream, XMLFormat format) { + formatXML(new OutputStreamWriter(stream), format); } @Override public final void formatXML(Writer writer) { + formatXML(writer, new XMLFormat()); + } + + @Override + public final void formatXML(Writer writer, XMLFormat format) { + String newline = format.format() ? format.newline() : ""; + String[] indent = { + format.format() ? rightPad("", format.indent() * 1) : "", + format.format() ? rightPad("", format.indent() * 2) : "", + format.format() ? rightPad("", format.indent() * 3) : "" + }; + try { - writer.append(""); - writer.append(""); + writer.append("") + .append(newline).append(indent[0]).append(""); for (Field field : fields.fields) { - writer.append(" table = ((TableField) field).getTable(); @@ -1013,16 +1036,16 @@ final class ResultImpl implements Result, AttachableInterna writer.append("\"/>"); } - writer.append(""); - writer.append(""); + writer.append(newline).append(indent[0]).append(""); + writer.append(newline).append(indent[0]).append(""); for (Record record : this) { - writer.append(""); + writer.append(newline).append(indent[1]).append(""); for (int index = 0; index < fields.fields.length; index++) { Object value = record.get(index); - writer.append(" implements Result, AttachableInterna } } - writer.append(""); + writer.append(newline).append(indent[1]).append(""); } - writer.append(""); - writer.append(""); + writer.append(newline).append(indent[0]).append(""); + writer.append(newline).append(""); writer.flush(); }