java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java
branchv_0
changeset 40 a9db7fb3ce65
parent 39 be8db46a38c3
child 43 2813d3409afd
--- 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(" ");
+	}
 }