java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java
branchv_0
changeset 40 a9db7fb3ce65
parent 39 be8db46a38c3
child 43 2813d3409afd
     1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java	Mon Dec 23 12:16:22 2013 +0100
     1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java	Mon Dec 23 16:14:03 2013 +0100
     1.3 @@ -21,6 +21,7 @@
     1.4  import static info.globalcode.sql.dk.ColorfulPrintWriter.*;
     1.5  import static info.globalcode.sql.dk.Functions.lpad;
     1.6  import static info.globalcode.sql.dk.Functions.rpad;
     1.7 +import static info.globalcode.sql.dk.Functions.repeat;
     1.8  
     1.9  /**
    1.10   *
    1.11 @@ -52,18 +53,48 @@
    1.12  
    1.13  		columnWidth = new int[header.getColumnCount()];
    1.14  
    1.15 +		printTableIndent();
    1.16 +		printTableBorder("╭");
    1.17  		for (ColumnDescriptor cd : header.getColumnDescriptors()) {
    1.18 +			setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length());
    1.19 +			if (!cd.isFirstColumn()) {
    1.20 +				printTableBorder("┬");
    1.21 +			}
    1.22 +			printTableBorder(repeat('─', getColumnWidth(cd.getColumnNumber()) + 2));
    1.23 +		}
    1.24 +		printTableBorder("╮");
    1.25 +		out.println();
    1.26 +
    1.27 +		for (ColumnDescriptor cd : header.getColumnDescriptors()) {
    1.28 +			if (cd.isFirstColumn()) {
    1.29 +				printTableIndent();
    1.30 +				printTableBorder("│ ");
    1.31 +			} else {
    1.32 +				printTableBorder(" │ ");
    1.33 +			}
    1.34  			out.print(TerminalStyle.Bright, cd.getLabel());
    1.35  			out.print(HEADER_TYPE_PREFIX);
    1.36  			out.print(cd.getTypeName());
    1.37  			out.print(HEADER_TYPE_SUFFIX);
    1.38 -			if (!cd.isLastColumn()) {
    1.39 -				out.print(TerminalColor.Green, " | ");
    1.40 +			if (cd.isLastColumn()) {
    1.41 +				printTableBorder(" │");
    1.42  			}
    1.43  
    1.44  			setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length());
    1.45  		}
    1.46  		out.println();
    1.47 +
    1.48 +		printTableIndent();
    1.49 +		printTableBorder("├");
    1.50 +		for (int i = 1; i <= header.getColumnCount(); i++) {
    1.51 +			if (i > 1) {
    1.52 +				printTableBorder("┼");
    1.53 +			}
    1.54 +			printTableBorder(repeat('─', getColumnWidth(i) + 2));
    1.55 +		}
    1.56 +		printTableBorder("┤");
    1.57 +		out.println();
    1.58 +
    1.59  		out.flush();
    1.60  	}
    1.61  
    1.62 @@ -71,11 +102,19 @@
    1.63  	public void writeColumnValue(Object value) {
    1.64  		super.writeColumnValue(value);
    1.65  
    1.66 -		if (!isCurrentColumnFirst()) {
    1.67 -			out.print(TerminalColor.Green, " | ");
    1.68 +		if (isCurrentColumnFirst()) {
    1.69 +			printTableIndent();
    1.70 +			printTableBorder("│ ");
    1.71 +		} else {
    1.72 +			printTableBorder(" │ ");
    1.73  		}
    1.74  
    1.75  		out.print(TerminalColor.Cyan, toString(value));
    1.76 +
    1.77 +		if (isCurrentColumnLast()) {
    1.78 +			printTableBorder(" │");
    1.79 +		}
    1.80 +
    1.81  	}
    1.82  
    1.83  	private int getColumnWidth(int columnNumber) {
    1.84 @@ -100,6 +139,7 @@
    1.85  		} else {
    1.86  			return rpad(super.toString(value), width);
    1.87  		}
    1.88 +		// ?	value = (boolean) value ? "✔" : "✗";
    1.89  	}
    1.90  
    1.91  	@Override
    1.92 @@ -111,9 +151,24 @@
    1.93  
    1.94  	@Override
    1.95  	public void writeEndResultSet() {
    1.96 +		int columnCount = getCurrentColumnsHeader().getColumnCount();
    1.97  		super.writeEndResultSet();
    1.98 +
    1.99 +		printTableIndent();
   1.100 +		printTableBorder("╰");
   1.101 +		for (int i = 1; i <= columnCount; i++) {
   1.102 +			if (i > 1) {
   1.103 +				printTableBorder("┴");
   1.104 +			}
   1.105 +			printTableBorder(repeat('─', getColumnWidth(i) + 2));
   1.106 +		}
   1.107 +		printTableBorder("╯");
   1.108 +		out.println();
   1.109 +
   1.110 +
   1.111  		out.print(TerminalColor.Yellow, "Record count: ");
   1.112  		out.println(getCurrentRowCount());
   1.113 +		out.bell();
   1.114  		out.flush();
   1.115  	}
   1.116  
   1.117 @@ -128,6 +183,7 @@
   1.118  		super.writeUpdatedRowsCount(updatedRowsCount);
   1.119  		out.print(TerminalColor.Red, "Updated records: ");
   1.120  		out.println(updatedRowsCount);
   1.121 +		out.bell();
   1.122  		out.flush();
   1.123  	}
   1.124  
   1.125 @@ -144,4 +200,12 @@
   1.126  			out.println();
   1.127  		}
   1.128  	}
   1.129 +
   1.130 +	private void printTableBorder(String border) {
   1.131 +		out.print(TerminalColor.Green, border);
   1.132 +	}
   1.133 +
   1.134 +	private void printTableIndent() {
   1.135 +		out.print(" ");
   1.136 +	}
   1.137  }