1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Mon Dec 23 11:52:49 2013 +0100
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Mon Dec 23 12:16:22 2013 +0100
1.3 @@ -19,6 +19,8 @@
1.4
1.5 import info.globalcode.sql.dk.ColorfulPrintWriter;
1.6 import static info.globalcode.sql.dk.ColorfulPrintWriter.*;
1.7 +import static info.globalcode.sql.dk.Functions.lpad;
1.8 +import static info.globalcode.sql.dk.Functions.rpad;
1.9
1.10 /**
1.11 *
1.12 @@ -27,8 +29,11 @@
1.13 public class TabularFormatter extends AbstractFormatter {
1.14
1.15 public static final String NAME = "tabular";
1.16 + private static final String HEADER_TYPE_PREFIX = " (";
1.17 + private static final String HEADER_TYPE_SUFFIX = ")";
1.18 private ColorfulPrintWriter out;
1.19 private boolean firstResult = true;
1.20 + private int[] columnWidth;
1.21
1.22 public TabularFormatter(FormatterContext formatterContext) {
1.23 super(formatterContext);
1.24 @@ -45,14 +50,18 @@
1.25 public void writeColumnsHeader(ColumnsHeader header) {
1.26 super.writeColumnsHeader(header);
1.27
1.28 + columnWidth = new int[header.getColumnCount()];
1.29 +
1.30 for (ColumnDescriptor cd : header.getColumnDescriptors()) {
1.31 out.print(TerminalStyle.Bright, cd.getLabel());
1.32 - out.print(" (");
1.33 + out.print(HEADER_TYPE_PREFIX);
1.34 out.print(cd.getTypeName());
1.35 - out.print(")");
1.36 + out.print(HEADER_TYPE_SUFFIX);
1.37 if (!cd.isLastColumn()) {
1.38 out.print(TerminalColor.Green, " | ");
1.39 }
1.40 +
1.41 + setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length());
1.42 }
1.43 out.println();
1.44 out.flush();
1.45 @@ -66,7 +75,31 @@
1.46 out.print(TerminalColor.Green, " | ");
1.47 }
1.48
1.49 - out.print(TerminalColor.Cyan, String.valueOf(value));
1.50 + out.print(TerminalColor.Cyan, toString(value));
1.51 + }
1.52 +
1.53 + private int getColumnWidth(int columnNumber) {
1.54 + return columnWidth[columnNumber - 1];
1.55 + }
1.56 +
1.57 + private void setColumnWidth(int columnNumber, int width) {
1.58 + columnWidth[columnNumber - 1] = width;
1.59 + }
1.60 +
1.61 + private void updateColumnWidth(int columnNumber, int width) {
1.62 + int oldWidth = getColumnWidth(columnNumber);
1.63 + setColumnWidth(columnNumber, Math.max(width, oldWidth));
1.64 +
1.65 + }
1.66 +
1.67 + @Override
1.68 + protected String toString(Object value) {
1.69 + final int width = getColumnWidth(getCurrentColumnsCount());
1.70 + if (value instanceof Number) {
1.71 + return lpad(super.toString(value), width);
1.72 + } else {
1.73 + return rpad(super.toString(value), width);
1.74 + }
1.75 }
1.76
1.77 @Override