java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java
branchv_0
changeset 40 a9db7fb3ce65
parent 39 be8db46a38c3
child 43 2813d3409afd
equal deleted inserted replaced
39:be8db46a38c3 40:a9db7fb3ce65
    19 
    19 
    20 import info.globalcode.sql.dk.ColorfulPrintWriter;
    20 import info.globalcode.sql.dk.ColorfulPrintWriter;
    21 import static info.globalcode.sql.dk.ColorfulPrintWriter.*;
    21 import static info.globalcode.sql.dk.ColorfulPrintWriter.*;
    22 import static info.globalcode.sql.dk.Functions.lpad;
    22 import static info.globalcode.sql.dk.Functions.lpad;
    23 import static info.globalcode.sql.dk.Functions.rpad;
    23 import static info.globalcode.sql.dk.Functions.rpad;
       
    24 import static info.globalcode.sql.dk.Functions.repeat;
    24 
    25 
    25 /**
    26 /**
    26  *
    27  *
    27  * @author Ing. František Kučera (frantovo.cz)
    28  * @author Ing. František Kučera (frantovo.cz)
    28  */
    29  */
    50 	public void writeColumnsHeader(ColumnsHeader header) {
    51 	public void writeColumnsHeader(ColumnsHeader header) {
    51 		super.writeColumnsHeader(header);
    52 		super.writeColumnsHeader(header);
    52 
    53 
    53 		columnWidth = new int[header.getColumnCount()];
    54 		columnWidth = new int[header.getColumnCount()];
    54 
    55 
       
    56 		printTableIndent();
       
    57 		printTableBorder("╭");
    55 		for (ColumnDescriptor cd : header.getColumnDescriptors()) {
    58 		for (ColumnDescriptor cd : header.getColumnDescriptors()) {
       
    59 			setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length());
       
    60 			if (!cd.isFirstColumn()) {
       
    61 				printTableBorder("┬");
       
    62 			}
       
    63 			printTableBorder(repeat('─', getColumnWidth(cd.getColumnNumber()) + 2));
       
    64 		}
       
    65 		printTableBorder("╮");
       
    66 		out.println();
       
    67 
       
    68 		for (ColumnDescriptor cd : header.getColumnDescriptors()) {
       
    69 			if (cd.isFirstColumn()) {
       
    70 				printTableIndent();
       
    71 				printTableBorder("│ ");
       
    72 			} else {
       
    73 				printTableBorder(" │ ");
       
    74 			}
    56 			out.print(TerminalStyle.Bright, cd.getLabel());
    75 			out.print(TerminalStyle.Bright, cd.getLabel());
    57 			out.print(HEADER_TYPE_PREFIX);
    76 			out.print(HEADER_TYPE_PREFIX);
    58 			out.print(cd.getTypeName());
    77 			out.print(cd.getTypeName());
    59 			out.print(HEADER_TYPE_SUFFIX);
    78 			out.print(HEADER_TYPE_SUFFIX);
    60 			if (!cd.isLastColumn()) {
    79 			if (cd.isLastColumn()) {
    61 				out.print(TerminalColor.Green, " | ");
    80 				printTableBorder(" │");
    62 			}
    81 			}
    63 
    82 
    64 			setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length());
    83 			setColumnWidth(cd.getColumnNumber(), cd.getLabel().length() + cd.getTypeName().length() + HEADER_TYPE_PREFIX.length() + HEADER_TYPE_SUFFIX.length());
    65 		}
    84 		}
    66 		out.println();
    85 		out.println();
       
    86 
       
    87 		printTableIndent();
       
    88 		printTableBorder("├");
       
    89 		for (int i = 1; i <= header.getColumnCount(); i++) {
       
    90 			if (i > 1) {
       
    91 				printTableBorder("┼");
       
    92 			}
       
    93 			printTableBorder(repeat('─', getColumnWidth(i) + 2));
       
    94 		}
       
    95 		printTableBorder("┤");
       
    96 		out.println();
       
    97 
    67 		out.flush();
    98 		out.flush();
    68 	}
    99 	}
    69 
   100 
    70 	@Override
   101 	@Override
    71 	public void writeColumnValue(Object value) {
   102 	public void writeColumnValue(Object value) {
    72 		super.writeColumnValue(value);
   103 		super.writeColumnValue(value);
    73 
   104 
    74 		if (!isCurrentColumnFirst()) {
   105 		if (isCurrentColumnFirst()) {
    75 			out.print(TerminalColor.Green, " | ");
   106 			printTableIndent();
       
   107 			printTableBorder("│ ");
       
   108 		} else {
       
   109 			printTableBorder(" │ ");
    76 		}
   110 		}
    77 
   111 
    78 		out.print(TerminalColor.Cyan, toString(value));
   112 		out.print(TerminalColor.Cyan, toString(value));
       
   113 
       
   114 		if (isCurrentColumnLast()) {
       
   115 			printTableBorder(" │");
       
   116 		}
       
   117 
    79 	}
   118 	}
    80 
   119 
    81 	private int getColumnWidth(int columnNumber) {
   120 	private int getColumnWidth(int columnNumber) {
    82 		return columnWidth[columnNumber - 1];
   121 		return columnWidth[columnNumber - 1];
    83 	}
   122 	}
    98 		if (value instanceof Number) {
   137 		if (value instanceof Number) {
    99 			return lpad(super.toString(value), width);
   138 			return lpad(super.toString(value), width);
   100 		} else {
   139 		} else {
   101 			return rpad(super.toString(value), width);
   140 			return rpad(super.toString(value), width);
   102 		}
   141 		}
       
   142 		// ?	value = (boolean) value ? "✔" : "✗";
   103 	}
   143 	}
   104 
   144 
   105 	@Override
   145 	@Override
   106 	public void writeEndRow() {
   146 	public void writeEndRow() {
   107 		super.writeEndRow();
   147 		super.writeEndRow();
   109 		out.flush();
   149 		out.flush();
   110 	}
   150 	}
   111 
   151 
   112 	@Override
   152 	@Override
   113 	public void writeEndResultSet() {
   153 	public void writeEndResultSet() {
       
   154 		int columnCount = getCurrentColumnsHeader().getColumnCount();
   114 		super.writeEndResultSet();
   155 		super.writeEndResultSet();
       
   156 
       
   157 		printTableIndent();
       
   158 		printTableBorder("╰");
       
   159 		for (int i = 1; i <= columnCount; i++) {
       
   160 			if (i > 1) {
       
   161 				printTableBorder("┴");
       
   162 			}
       
   163 			printTableBorder(repeat('─', getColumnWidth(i) + 2));
       
   164 		}
       
   165 		printTableBorder("╯");
       
   166 		out.println();
       
   167 
       
   168 
   115 		out.print(TerminalColor.Yellow, "Record count: ");
   169 		out.print(TerminalColor.Yellow, "Record count: ");
   116 		out.println(getCurrentRowCount());
   170 		out.println(getCurrentRowCount());
       
   171 		out.bell();
   117 		out.flush();
   172 		out.flush();
   118 	}
   173 	}
   119 
   174 
   120 	@Override
   175 	@Override
   121 	public void writeStartUpdatesResult() {
   176 	public void writeStartUpdatesResult() {
   126 	@Override
   181 	@Override
   127 	public void writeUpdatedRowsCount(int updatedRowsCount) {
   182 	public void writeUpdatedRowsCount(int updatedRowsCount) {
   128 		super.writeUpdatedRowsCount(updatedRowsCount);
   183 		super.writeUpdatedRowsCount(updatedRowsCount);
   129 		out.print(TerminalColor.Red, "Updated records: ");
   184 		out.print(TerminalColor.Red, "Updated records: ");
   130 		out.println(updatedRowsCount);
   185 		out.println(updatedRowsCount);
       
   186 		out.bell();
   131 		out.flush();
   187 		out.flush();
   132 	}
   188 	}
   133 
   189 
   134 	@Override
   190 	@Override
   135 	public void writeEndDatabase() {
   191 	public void writeEndDatabase() {
   142 			firstResult = false;
   198 			firstResult = false;
   143 		} else {
   199 		} else {
   144 			out.println();
   200 			out.println();
   145 		}
   201 		}
   146 	}
   202 	}
       
   203 
       
   204 	private void printTableBorder(String border) {
       
   205 		out.print(TerminalColor.Green, border);
       
   206 	}
       
   207 
       
   208 	private void printTableIndent() {
       
   209 		out.print(" ");
       
   210 	}
   147 }
   211 }