java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularWrappingFormatter.java
branchv_0
changeset 142 da1e38386d84
parent 123 248a98c13ca4
child 155 eb3676c6929b
equal deleted inserted replaced
141:ecd17aad1178 142:da1e38386d84
    36 	public TabularWrappingFormatter(FormatterContext formatterContext) {
    36 	public TabularWrappingFormatter(FormatterContext formatterContext) {
    37 		super(formatterContext);
    37 		super(formatterContext);
    38 	}
    38 	}
    39 
    39 
    40 	@Override
    40 	@Override
    41 	public void writeColumnsHeader(ColumnsHeader header) {
    41 	public void writeStartResultSet(ColumnsHeader header) {
    42 		super.writeColumnsHeader(header);
    42 		super.writeStartResultSet(header);
    43 		currentRow = new ArrayList<>(header.getColumnCount());
    43 		currentRow = new ArrayList<>(header.getColumnCount());
    44 	}
    44 	}
    45 
    45 
    46 	@Override
    46 	@Override
    47 	protected void writeColumnValueInternal(Object value) {
    47 	protected void writeColumnValueInternal(Object value) {
    48 		boolean rightAlign = value instanceof Number || value instanceof Boolean;
    48 		boolean rightAlign = value instanceof Number || value instanceof Boolean;
    49 		String valueString = String.valueOf(value);
    49 		String valueString = String.valueOf(value);
    50 		int columnWidth = getColumnWidth(getCurrentColumnsCount()) - 1;  // -1 = space for new line symbol
    50 		int columnWidth = getColumnWidth(getCurrentColumnsCount()) - 1;  // -1 = space for new line symbol
    51 		currentRow.add(split(valueString, columnWidth, rightAlign));
    51 		currentRow.add(wrapLines(valueString, columnWidth, rightAlign));
    52 	}
    52 	}
    53 
    53 
    54 	@Override
    54 	@Override
    55 	public void writeEndRow() {
    55 	public void writeEndRow() {
    56 		super.writeEndRow();
    56 		super.writeEndRow();
    97 	@Override
    97 	@Override
    98 	public void writeEndRowInternal() {
    98 	public void writeEndRowInternal() {
    99 		// already done – wrapped row ends
    99 		// already done – wrapped row ends
   100 	}
   100 	}
   101 
   101 
   102 	private static String[] split(String s, int width, boolean rightAlign) {
   102 	private static String[] wrapLines(String s, int width, boolean rightAlign) {
   103 		String[] array = new String[(s.length() - 1) / width + 1];
   103 		String[] array = new String[(s.length() - 1) / width + 1];
   104 		for (int i = 0; i < array.length; i++) {
   104 		for (int i = 0; i < array.length; i++) {
   105 			if (i == array.length - 1) {
   105 			if (i == array.length - 1) {
   106 				String part = s.substring(i * width, s.length());
   106 				String part = s.substring(i * width, s.length());
   107 				array[i] = rightAlign ? lpad(part, width) : rpad(part, width);
   107 				array[i] = rightAlign ? lpad(part, width) : rpad(part, width);