From 1c6c18ccd81d23ee93a52d4b7e865dae82fe65c8 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 22 Nov 2017 11:35:08 +0100 Subject: [PATCH] [#6836] Add Record.format() --- jOOQ/src/main/java/org/jooq/Record.java | 53 +++++++++++++++++++ jOOQ/src/main/java/org/jooq/TXTFormat.java | 20 +++---- .../java/org/jooq/impl/AbstractRecord.java | 37 +++++++++++++ .../main/java/org/jooq/impl/ResultImpl.java | 10 ++-- .../java/org/jooq/tools/LoggerListener.java | 4 +- 5 files changed, 108 insertions(+), 16 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Record.java b/jOOQ/src/main/java/org/jooq/Record.java index 98253e5646..2d05d32860 100644 --- a/jOOQ/src/main/java/org/jooq/Record.java +++ b/jOOQ/src/main/java/org/jooq/Record.java @@ -1324,6 +1324,59 @@ public interface Record extends Attachable, Comparable { // Formatting methods // ------------------------------------------------------------------------- + /** + * Get a simple formatted representation of this result as a text table. + *

+ * The format is the following:

+ *

+     * +------+------+------+
+     * | COL1 | COL2 | COL3 |
+     * +------+------+------+
+     * | VAL1 | VAL2 | VAL3 |
+     * +------+------+------+
+     * 
+ * + * @return The formatted result + */ + String format(); + + /** + * Get a simple formatted representation of this result as a text data + * structure, according to the format. + * + * @return The formatted result + * @see TXTFormat + */ + String format(TXTFormat format); + + /** + * Like {@link #format()}, but the data is output onto an {@link OutputStream}. + * + * @throws IOException - an unchecked wrapper for {@link java.io.IOException}, if anything goes wrong. + */ + void format(OutputStream stream) throws IOException; + + /** + * Like {@link #format(TXTFormat)}, but the data is output onto an {@link OutputStream}. + * + * @throws IOException - an unchecked wrapper for {@link java.io.IOException}, if anything goes wrong. + */ + void format(OutputStream stream, TXTFormat format) throws IOException; + + /** + * Like {@link #format()}, but the data is output onto a {@link Writer}. + * + * @throws IOException - an unchecked wrapper for {@link java.io.IOException}, if anything goes wrong. + */ + void format(Writer writer) throws IOException; + + /** + * Like {@link #format(TXTFormat)}, but the data is output onto a {@link Writer}. + * + * @throws IOException - an unchecked wrapper for {@link java.io.IOException}, if anything goes wrong. + */ + void format(Writer writer, TXTFormat format) throws IOException; + /** * Get a simple formatted representation of this result as a JSON array. *

diff --git a/jOOQ/src/main/java/org/jooq/TXTFormat.java b/jOOQ/src/main/java/org/jooq/TXTFormat.java index dcdb0e0ec1..8f75c60098 100644 --- a/jOOQ/src/main/java/org/jooq/TXTFormat.java +++ b/jOOQ/src/main/java/org/jooq/TXTFormat.java @@ -41,15 +41,17 @@ package org.jooq; */ public final class TXTFormat { - final int maxRows; - final int minColWidth; - final int maxColWidth; - final boolean horizontalTableBorder; - final boolean horizontalHeaderBorder; - final boolean horizontalCellBorder; - final boolean verticalTableBorder; - final boolean verticalCellBorder; - final boolean intersectLines; + public static final TXTFormat DEFAULT = new TXTFormat(); + + final int maxRows; + final int minColWidth; + final int maxColWidth; + final boolean horizontalTableBorder; + final boolean horizontalHeaderBorder; + final boolean horizontalCellBorder; + final boolean verticalTableBorder; + final boolean verticalCellBorder; + final boolean intersectLines; public TXTFormat() { this( diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java index a7367a0181..d9d9306676 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java @@ -88,6 +88,7 @@ import org.jooq.Record8; import org.jooq.Record9; import org.jooq.RecordMapper; import org.jooq.Result; +import org.jooq.TXTFormat; import org.jooq.Table; import org.jooq.UniqueKey; import org.jooq.XMLFormat; @@ -911,6 +912,42 @@ abstract class AbstractRecord extends AbstractStore implements Record { // Formatting methods // ------------------------------------------------------------------------- + @Override + public final String format() { + StringWriter writer = new StringWriter(); + format(writer); + return writer.toString(); + } + + @Override + public final String format(TXTFormat format) { + StringWriter writer = new StringWriter(); + format(writer, format); + return writer.toString(); + } + + @Override + public final void format(OutputStream stream) { + format(new OutputStreamWriter(stream)); + } + + @Override + public final void format(OutputStream stream, TXTFormat format) { + format(new OutputStreamWriter(stream), format); + } + + @Override + public final void format(Writer writer) { + format(writer, TXTFormat.DEFAULT); + } + + @Override + public final void format(Writer writer, TXTFormat format) { + Result result = new ResultImpl(configuration(), fields.fields.fields); + result.add(AbstractRecord.this); + result.format(writer, format); + } + @Override public final String formatJSON() { StringWriter writer = new StringWriter(); diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index 0a0870d545..6501ff5b7f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -393,12 +393,12 @@ final class ResultImpl implements Result { @Override public final String format() { - return format(new TXTFormat()); + return format(TXTFormat.DEFAULT); } @Override public final String format(int maxRecords) { - return format(new TXTFormat().maxRows(maxRecords)); + return format(TXTFormat.DEFAULT.maxRows(maxRecords)); } @Override @@ -425,12 +425,12 @@ final class ResultImpl implements Result { @Override public final void format(Writer writer) { - format(writer, new TXTFormat()); + format(writer, TXTFormat.DEFAULT); } @Override public final void format(Writer writer, int maxRecords) { - format(writer, new TXTFormat().maxRows(maxRecords)); + format(writer, TXTFormat.DEFAULT.maxRows(maxRecords)); } @Override @@ -2967,7 +2967,7 @@ final class ResultImpl implements Result { @Override public String toString() { - return format(new TXTFormat().maxRows(50).maxColWidth(50)); + return format(TXTFormat.DEFAULT.maxRows(50).maxColWidth(50)); } @Override diff --git a/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java b/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java index 3f0d40fba4..a22a342682 100644 --- a/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java +++ b/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java @@ -141,9 +141,9 @@ public class LoggerListener extends DefaultExecuteListener { public void resultEnd(ExecuteContext ctx) { if (ctx.result() != null) if (log.isTraceEnabled()) - logMultiline("Fetched result", ctx.result().format(new TXTFormat().maxRows(500).maxColWidth(500)), Level.FINE); + logMultiline("Fetched result", ctx.result().format(TXTFormat.DEFAULT.maxRows(500).maxColWidth(500)), Level.FINE); else if (log.isDebugEnabled()) - logMultiline("Fetched result", ctx.result().format(new TXTFormat().maxRows(5).maxColWidth(50)), Level.FINE); + logMultiline("Fetched result", ctx.result().format(TXTFormat.DEFAULT.maxRows(5).maxColWidth(50)), Level.FINE); } @Override