From 71f9da55780c91700be15dfaa188d332258651a4 Mon Sep 17 00:00:00 2001 From: Eric Bottard Date: Mon, 10 Oct 2016 13:04:48 +0200 Subject: [PATCH] Fix Vertical aligner when rows are empty Fixes https://github.com/spring-projects/spring-shell/issues/107 --- .../shell/table/DelimiterTextWrapper.java | 4 +++- .../shell/table/SimpleVerticalAligner.java | 17 +++++++++++------ .../springframework/shell/table/TableTest.java | 10 +++++++++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/springframework/shell/table/DelimiterTextWrapper.java b/src/main/java/org/springframework/shell/table/DelimiterTextWrapper.java index dc68204b..b4a3422b 100644 --- a/src/main/java/org/springframework/shell/table/DelimiterTextWrapper.java +++ b/src/main/java/org/springframework/shell/table/DelimiterTextWrapper.java @@ -46,7 +46,9 @@ public class DelimiterTextWrapper implements TextWrapper { result.add(String.format("%-" + columnWidth + "s", toAdd)); line = line.substring(split == -1 ? columnWidth : split + 1); } - result.add(String.format("%-" + columnWidth + "s", line)); // right pad if necessary + if (columnWidth > 0) { + result.add(String.format("%-" + columnWidth + "s", line)); // right pad if necessary + } } return result.toArray(new String[result.size()]); } diff --git a/src/main/java/org/springframework/shell/table/SimpleVerticalAligner.java b/src/main/java/org/springframework/shell/table/SimpleVerticalAligner.java index 0f8d252a..f3e230c5 100644 --- a/src/main/java/org/springframework/shell/table/SimpleVerticalAligner.java +++ b/src/main/java/org/springframework/shell/table/SimpleVerticalAligner.java @@ -32,20 +32,25 @@ public enum SimpleVerticalAligner implements Aligner { String[] result = new String[cellHeight]; int blanksBefore = 0; int blanksAfter = 0; + boolean atLeastOneNonEmptyRow = false; for (int row = 0; row < text.length; row++) { if (text[row] == null || text[row].trim().equals("")) { blanksBefore++; } else { + atLeastOneNonEmptyRow = true; break; } } - for (int row = text.length - 1; row >= 0; row--) { - if (text[row] == null || text[row].trim().equals("")) { - blanksAfter++; - } - else { - break; + // In case of full blank, don't count blank rows twice + if (atLeastOneNonEmptyRow) { + for (int row = text.length - 1; row >= 0; row--) { + if (text[row] == null || text[row].trim().equals("")) { + blanksAfter++; + } + else { + break; + } } } String filler = spaces(cellWidth); diff --git a/src/test/java/org/springframework/shell/table/TableTest.java b/src/test/java/org/springframework/shell/table/TableTest.java index 4e25c949..cc0f26fa 100644 --- a/src/test/java/org/springframework/shell/table/TableTest.java +++ b/src/test/java/org/springframework/shell/table/TableTest.java @@ -90,4 +90,12 @@ public class TableTest extends AbstractTestWithSample { } -} \ No newline at end of file + @Test + public void testEmptyCellsVerticalAligner() { + TableModel model = new ArrayTableModel(new String[][] {{"a", "b"}, {null, null}}); + Table table = new TableBuilder(model).on(CellMatchers.table()).addAligner(SimpleVerticalAligner.middle).build(); + String result = table.render(3); + + } + +}