You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2012/05/10 16:28:58 UTC
svn commit: r1336716 - in /karaf/trunk/shell/table: ./
src/main/java/org/apache/karaf/shell/table/
src/test/java/org/apache/karaf/shell/tabletest/
Author: cschneider
Date: Thu May 10 14:28:57 2012
New Revision: 1336716
URL: http://svn.apache.org/viewvc?rev=1336716&view=rev
Log:
KARAF-1462 Improvements to shell tables
Modified:
karaf/trunk/shell/table/pom.xml
karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Col.java
karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Row.java
karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/ShellTable.java
karaf/trunk/shell/table/src/test/java/org/apache/karaf/shell/tabletest/ShellTableTest.java
Modified: karaf/trunk/shell/table/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/table/pom.xml?rev=1336716&r1=1336715&r2=1336716&view=diff
==============================================================================
--- karaf/trunk/shell/table/pom.xml (original)
+++ karaf/trunk/shell/table/pom.xml Thu May 10 14:28:57 2012
@@ -53,6 +53,12 @@
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.3</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
Modified: karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Col.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Col.java?rev=1336716&r1=1336715&r2=1336716&view=diff
==============================================================================
--- karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Col.java (original)
+++ karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Col.java Thu May 10 14:28:57 2012
@@ -15,7 +15,6 @@
*/
package org.apache.karaf.shell.table;
-import java.text.Format;
/**
@@ -30,18 +29,17 @@ public class Col {
/**
* Maximum size of this column. The default -1 means the column
- * may grow indefinately
+ * may grow indefinitely
*/
- private int maxSize = -1;
+ int maxSize = -1;
- private int size = 0;
-
+ int size = 0;
/**
* Alignment
*/
private HAlign align = HAlign.left;
-
+
public Col(String header) {
this.header = header;
}
@@ -95,20 +93,16 @@ public class Col {
return header;
}
- int getMaxSize() {
- return maxSize;
- }
-
- Format getFormat() {
- return null;
- }
-
- int getSize() {
- return this.size;
+ String getContent(String content) {
+ return this.align.position(cut(content, this.size), this.size);
}
- String getContent(String content) {
- return this.align.position(content, this.size);
+ private String cut(String content, int size) {
+ if (content.length() <= size) {
+ return content;
+ } else {
+ return content.substring(0, Math.max(0, size - 1));
+ }
}
}
Modified: karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Row.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Row.java?rev=1336716&r1=1336715&r2=1336716&view=diff
==============================================================================
--- karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Row.java (original)
+++ karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/Row.java Thu May 10 14:28:57 2012
@@ -48,21 +48,21 @@ public class Row {
}
}
- String getContent(List<Col> cols) {
+ String getContent(List<Col> cols, String separator) {
StringBuilder st = new StringBuilder();
int c = 0;
if (cols.size() != content.size()) {
throw new RuntimeException("Number of columns and number of content elements do not match");
}
- //st.append("| ");
+
for (Col col : cols) {
st.append(col.getContent(content.get(c)));
if (c + 1 < cols.size()) {
- st.append(" | ");
+ st.append(separator);
}
c++;
}
- //st.append(" |");
+
return st.toString();
}
Modified: karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/ShellTable.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/ShellTable.java?rev=1336716&r1=1336715&r2=1336716&view=diff
==============================================================================
--- karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/ShellTable.java (original)
+++ karaf/trunk/shell/table/src/main/java/org/apache/karaf/shell/table/ShellTable.java Thu May 10 14:28:57 2012
@@ -24,11 +24,29 @@ import java.util.List;
public class ShellTable {
private List<Col> cols = new ArrayList<Col>();
private List<Row> rows = new ArrayList<Row>();
+ boolean showHeaders = true;
+ private String separator = " | ";
+ private int size;
public ShellTable() {
}
+ public ShellTable noHeaders() {
+ this.showHeaders = false;
+ return this;
+ }
+
+ public ShellTable separator(String separator) {
+ this.separator = separator;
+ return this;
+ }
+
+ public ShellTable size(int size) {
+ this.size = size;
+ return this;
+ }
+
public ShellTable column(Col colunmn) {
cols.add(colunmn);
return this;
@@ -46,15 +64,39 @@ public class ShellTable {
for (Row row : rows) {
row.formatContent(cols);
}
+
+ if (size > 0) {
+ tryGrowToMaxSize();
+ }
+
+ if (showHeaders) {
+ String headerLine = headerRow.getContent(cols, separator);
+ out.println(headerLine);
+ out.println(underline(headerLine.length()));
+ }
- String headerLine = headerRow.getContent(cols);
- out.println(headerLine);
- out.println(underline(headerLine.length()));
for (Row row : rows) {
- out.println(row.getContent(cols));
+ out.println(row.getContent(cols, separator));
}
}
+ private void tryGrowToMaxSize() {
+ int currentSize = 0;
+ for (Col col : cols) {
+ currentSize += col.size + separator.length();
+ }
+ currentSize -= separator.length();
+ int sizeToGrow = size - currentSize;
+
+ for (Col col : cols) {
+ if (col.maxSize == -1) {
+ col.size = Math.max(0, col.size + sizeToGrow);
+ return;
+ }
+ }
+
+ }
+
private String underline(int length) {
char[] exmarks = new char[length];
Arrays.fill(exmarks, '-');
Modified: karaf/trunk/shell/table/src/test/java/org/apache/karaf/shell/tabletest/ShellTableTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/table/src/test/java/org/apache/karaf/shell/tabletest/ShellTableTest.java?rev=1336716&r1=1336715&r2=1336716&view=diff
==============================================================================
--- karaf/trunk/shell/table/src/test/java/org/apache/karaf/shell/tabletest/ShellTableTest.java (original)
+++ karaf/trunk/shell/table/src/test/java/org/apache/karaf/shell/tabletest/ShellTableTest.java Thu May 10 14:28:57 2012
@@ -15,6 +15,12 @@
*/
package org.apache.karaf.shell.tabletest;
+import java.io.PrintStream;
+import java.io.StringWriter;
+
+import junit.framework.Assert;
+
+import org.apache.commons.io.output.WriterOutputStream;
import org.apache.karaf.shell.table.Col;
import org.apache.karaf.shell.table.Row;
import org.apache.karaf.shell.table.ShellTable;
@@ -28,15 +34,82 @@ public class ShellTableTest {
table.column(new Col("id").alignRight().maxSize(5));
table.column(new Col("Name").maxSize(20));
table.column(new Col("Centered").alignCenter());
-
+
table.addRow().addContent(1, "Test", "Description");
table.addRow().addContent(20, "My name", "Description");
-
+
Row row = table.addRow();
row.addContent(123456789);
row.addContent("A very long text that should be cut");
row.addContent("A very long text that should not be cut");
-
- table.print(System.out);
+
+ StringWriter writer = new StringWriter();
+ PrintStream out = new PrintStream(new WriterOutputStream(writer));
+ table.print(out);
+ out.flush();
+ String expected =
+ " id | Name | Centered \r\n" +
+ "----------------------------------------------------------------------\r\n" +
+ " 1 | Test | Description \r\n" +
+ " 20 | My name | Description \r\n" +
+ "12345 | A very long text tha | A very long text that should not be cut\r\n";
+ Assert.assertEquals(expected, writer.getBuffer().toString());
+ }
+
+ @Test
+ public void testGrow() {
+ ShellTable table = new ShellTable().size(10);
+ table.column(new Col("1"));
+ table.column(new Col("2"));
+
+ table.addRow().addContent("1", "2");
+
+ StringWriter writer = new StringWriter();
+ PrintStream out = new PrintStream(new WriterOutputStream(writer));
+ table.print(out);
+ out.flush();
+ String expected =
+ "1 | 2\r\n" +
+ "----------\r\n" +
+ "1 | 2\r\n";
+ Assert.assertEquals(expected, writer.getBuffer().toString());
+ }
+
+ @Test
+ public void testShrink() {
+ ShellTable table = new ShellTable().size(10);
+ table.column(new Col("1").maxSize(5));
+ table.column(new Col("2").alignRight());
+
+ table.addRow().addContent("quite long", "and here an even longer text");
+
+ StringWriter writer = new StringWriter();
+ PrintStream out = new PrintStream(new WriterOutputStream(writer));
+ table.print(out);
+ out.flush();
+ String expected = //
+ "1 | 2\r\n" //
+ + "----------\r\n" //
+ + "quite | a\r\n";
+ Assert.assertEquals(expected, writer.getBuffer().toString());
+ }
+
+ @Test
+ public void testTooSmall() {
+ ShellTable table = new ShellTable().size(2);
+ table.column(new Col("1").maxSize(5));
+ table.column(new Col("2").alignRight());
+
+ table.addRow().addContent("quite long", "and here an even longer text");
+
+ StringWriter writer = new StringWriter();
+ PrintStream out = new PrintStream(new WriterOutputStream(writer));
+ table.print(out);
+ out.flush();
+ String expected = //
+ "1 | \r\n" + //
+ "--------\r\n" + //
+ "quite | \r\n";
+ Assert.assertEquals(expected, writer.getBuffer().toString());
}
}