--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Mon Dec 23 11:52:49 2013 +0100
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Mon Dec 23 12:16:22 2013 +0100
@@ -19,6 +19,8 @@
import info.globalcode.sql.dk.ColorfulPrintWriter;
import static info.globalcode.sql.dk.ColorfulPrintWriter.*;
+import static info.globalcode.sql.dk.Functions.lpad;
+import static info.globalcode.sql.dk.Functions.rpad;
/**
*
@@ -27,8 +29,11 @@
public class TabularFormatter extends AbstractFormatter {
public static final String NAME = "tabular";
+ private static final String HEADER_TYPE_PREFIX = " (";
+ private static final String HEADER_TYPE_SUFFIX = ")";
private ColorfulPrintWriter out;
private boolean firstResult = true;
+ private int[] columnWidth;
public TabularFormatter(FormatterContext formatterContext) {
super(formatterContext);
@@ -45,14 +50,18 @@
public void writeColumnsHeader(ColumnsHeader header) {
super.writeColumnsHeader(header);
+ columnWidth = new int[header.getColumnCount()];
+
for (ColumnDescriptor cd : header.getColumnDescriptors()) {
out.print(TerminalStyle.Bright, cd.getLabel());
- out.print(" (");
+ out.print(HEADER_TYPE_PREFIX);
out.print(cd.getTypeName());
- out.print(")");
+ out.print(HEADER_TYPE_SUFFIX);
if (!cd.isLastColumn()) {
out.print(TerminalColor.Green, " | ");
}
+
+ setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length());
}
out.println();
out.flush();
@@ -66,7 +75,31 @@
out.print(TerminalColor.Green, " | ");
}
- out.print(TerminalColor.Cyan, String.valueOf(value));
+ out.print(TerminalColor.Cyan, toString(value));
+ }
+
+ private int getColumnWidth(int columnNumber) {
+ return columnWidth[columnNumber - 1];
+ }
+
+ private void setColumnWidth(int columnNumber, int width) {
+ columnWidth[columnNumber - 1] = width;
+ }
+
+ private void updateColumnWidth(int columnNumber, int width) {
+ int oldWidth = getColumnWidth(columnNumber);
+ setColumnWidth(columnNumber, Math.max(width, oldWidth));
+
+ }
+
+ @Override
+ protected String toString(Object value) {
+ final int width = getColumnWidth(getCurrentColumnsCount());
+ if (value instanceof Number) {
+ return lpad(super.toString(value), width);
+ } else {
+ return rpad(super.toString(value), width);
+ }
}
@Override