diff -r be8db46a38c3 -r a9db7fb3ce65 java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Mon Dec 23 12:16:22 2013 +0100 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Mon Dec 23 16:14:03 2013 +0100 @@ -21,6 +21,7 @@ import static info.globalcode.sql.dk.ColorfulPrintWriter.*; import static info.globalcode.sql.dk.Functions.lpad; import static info.globalcode.sql.dk.Functions.rpad; +import static info.globalcode.sql.dk.Functions.repeat; /** * @@ -52,18 +53,48 @@ columnWidth = new int[header.getColumnCount()]; + printTableIndent(); + printTableBorder("╭"); for (ColumnDescriptor cd : header.getColumnDescriptors()) { + setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length()); + if (!cd.isFirstColumn()) { + printTableBorder("┬"); + } + printTableBorder(repeat('─', getColumnWidth(cd.getColumnNumber()) + 2)); + } + printTableBorder("╮"); + out.println(); + + for (ColumnDescriptor cd : header.getColumnDescriptors()) { + if (cd.isFirstColumn()) { + printTableIndent(); + printTableBorder("│ "); + } else { + printTableBorder(" │ "); + } out.print(TerminalStyle.Bright, cd.getLabel()); out.print(HEADER_TYPE_PREFIX); out.print(cd.getTypeName()); out.print(HEADER_TYPE_SUFFIX); - if (!cd.isLastColumn()) { - out.print(TerminalColor.Green, " | "); + if (cd.isLastColumn()) { + printTableBorder(" │"); } setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length()); } out.println(); + + printTableIndent(); + printTableBorder("├"); + for (int i = 1; i <= header.getColumnCount(); i++) { + if (i > 1) { + printTableBorder("┼"); + } + printTableBorder(repeat('─', getColumnWidth(i) + 2)); + } + printTableBorder("┤"); + out.println(); + out.flush(); } @@ -71,11 +102,19 @@ public void writeColumnValue(Object value) { super.writeColumnValue(value); - if (!isCurrentColumnFirst()) { - out.print(TerminalColor.Green, " | "); + if (isCurrentColumnFirst()) { + printTableIndent(); + printTableBorder("│ "); + } else { + printTableBorder(" │ "); } out.print(TerminalColor.Cyan, toString(value)); + + if (isCurrentColumnLast()) { + printTableBorder(" │"); + } + } private int getColumnWidth(int columnNumber) { @@ -100,6 +139,7 @@ } else { return rpad(super.toString(value), width); } + // ? value = (boolean) value ? "✔" : "✗"; } @Override @@ -111,9 +151,24 @@ @Override public void writeEndResultSet() { + int columnCount = getCurrentColumnsHeader().getColumnCount(); super.writeEndResultSet(); + + printTableIndent(); + printTableBorder("╰"); + for (int i = 1; i <= columnCount; i++) { + if (i > 1) { + printTableBorder("┴"); + } + printTableBorder(repeat('─', getColumnWidth(i) + 2)); + } + printTableBorder("╯"); + out.println(); + + out.print(TerminalColor.Yellow, "Record count: "); out.println(getCurrentRowCount()); + out.bell(); out.flush(); } @@ -128,6 +183,7 @@ super.writeUpdatedRowsCount(updatedRowsCount); out.print(TerminalColor.Red, "Updated records: "); out.println(updatedRowsCount); + out.bell(); out.flush(); } @@ -144,4 +200,12 @@ out.println(); } } + + private void printTableBorder(String border) { + out.print(TerminalColor.Green, border); + } + + private void printTableIndent() { + out.print(" "); + } }