You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/07/06 13:53:40 UTC
svn commit: r1358148 -
/camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
Author: davsclaus
Date: Fri Jul 6 11:53:40 2012
New Revision: 1358148
URL: http://svn.apache.org/viewvc?rev=1358148&view=rev
Log:
CAMEL-4931: Improved camel karaf command to compute max length of columns to look nicer in display. Thanks to Reuben for the patch.
Modified:
camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
Modified: camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java
URL: http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java?rev=1358148&r1=1358147&r2=1358148&view=diff
==============================================================================
--- camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java (original)
+++ camel/trunk/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/ContextList.java Fri Jul 6 11:53:40 2012
@@ -16,20 +16,34 @@
*/
package org.apache.camel.karaf.commands;
+import java.io.PrintStream;
+import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.felix.gogo.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* List the Camel contexts available in the Karaf instance.
*/
@Command(scope = "camel", name = "context-list", description = "Lists all Camel contexts.")
public class ContextList extends OsgiCommandSupport {
- protected static final String HEADER_FORMAT = "%-20s %-20s %-20s";
- protected static final String OUTPUT_FORMAT = "[%-18s] [%-18s] [%-18s]";
+ private static final String NAME_COLUMN_LABEL = "Name";
+ private static final String STATUS_COLUMN_LABEL = "Status";
+ private static final String UPTIME_COLUMN_LABEL = "Uptime";
+ private static final int DEFAULT_FORMAT_BUFFER_LENGTH = 24;
+ private static final String DEFAULT_FIELD_PREAMBLE = "[ ";
+ private static final String DEFAULT_FIELD_POSTAMBLE = " ]";
+ private static final String DEFAULT_HEADER_PREAMBLE = " ";
+ private static final String DEFAULT_HEADER_POSTAMBLE = " ";
+ private static final int DEFAULT_COLUMN_WIDTH_INCREMENT = 0;
+ private static final int MAX_COLUMN_WIDTH = Integer.MAX_VALUE;
private CamelController camelController;
@@ -38,14 +52,74 @@ public class ContextList extends OsgiCom
}
protected Object doExecute() throws Exception {
- System.out.println(String.format(HEADER_FORMAT, "Name", "Status", "Uptime"));
+ final List<CamelContext> camelContexts = camelController.getCamelContexts();
- List<CamelContext> camelContexts = camelController.getCamelContexts();
- for (CamelContext camelContext : camelContexts) {
- System.out.println(String.format(OUTPUT_FORMAT, camelContext.getName(), camelContext.getStatus(), camelContext.getUptime()));
+ final Map<String, Integer> columnWidths = computeColumnWidths(camelContexts);
+ final String headerFormat = buildFormatString(columnWidths, true);
+ final String rowFormat = buildFormatString(columnWidths, false);
+ final PrintStream out = System.out;
+
+ if (camelContexts.size() > 0) {
+ out.println(String.format(headerFormat, NAME_COLUMN_LABEL, STATUS_COLUMN_LABEL, UPTIME_COLUMN_LABEL));
+ for (final CamelContext camelContext : camelContexts) {
+ out.println(String.format(rowFormat, camelContext.getName(), camelContext.getStatus(), camelContext.getUptime()));
+ }
}
return null;
}
+ private static Map<String, Integer> computeColumnWidths(final Iterable<CamelContext> camelContexts) throws Exception {
+ if (camelContexts == null) {
+ throw new IllegalArgumentException("unable to determine column widths from null Iterable<CamelContext>");
+ } else {
+ int maxNameLen = 0;
+ int maxStatusLen = 0;
+ int maxUptimeLen = 0;
+
+ for (final CamelContext camelContext : camelContexts) {
+ final String name = camelContext.getName();
+ maxNameLen = java.lang.Math.max(maxNameLen, name == null ? 0 : name.length());
+
+ final String status = camelContext.getStatus().toString();
+ maxStatusLen = java.lang.Math.max(maxStatusLen, status == null ? 0 : status.length());
+
+ final String uptime = camelContext.getUptime();
+ maxUptimeLen = java.lang.Math.max(maxUptimeLen, uptime == null ? 0 : uptime.length());
+ }
+
+ final Map<String, Integer> retval = new Hashtable(3);
+ retval.put(NAME_COLUMN_LABEL, maxNameLen);
+ retval.put(STATUS_COLUMN_LABEL, maxStatusLen);
+ retval.put(UPTIME_COLUMN_LABEL, maxUptimeLen);
+
+ return retval;
+ }
+ }
+
+ private static String buildFormatString(final Map<String, Integer> columnWidths, final boolean isHeader) {
+ final String fieldPreamble;
+ final String fieldPostamble;
+ final int columnWidthIncrement;
+
+ if (isHeader) {
+ fieldPreamble = DEFAULT_HEADER_PREAMBLE;
+ fieldPostamble = DEFAULT_HEADER_POSTAMBLE;
+ } else {
+ fieldPreamble = DEFAULT_FIELD_PREAMBLE;
+ fieldPostamble = DEFAULT_FIELD_POSTAMBLE;
+ }
+ columnWidthIncrement = DEFAULT_COLUMN_WIDTH_INCREMENT;
+
+ final int nameLen = java.lang.Math.min(columnWidths.get(NAME_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
+ final int statusLen = java.lang.Math.min(columnWidths.get(STATUS_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
+ final int uptimeLen = java.lang.Math.min(columnWidths.get(UPTIME_COLUMN_LABEL) + columnWidthIncrement, MAX_COLUMN_WIDTH);
+
+ final StringBuilder retval = new StringBuilder(DEFAULT_FORMAT_BUFFER_LENGTH);
+ retval.append(fieldPreamble).append("%-").append(nameLen).append('.').append(nameLen).append('s').append(fieldPostamble).append(' ');
+ retval.append(fieldPreamble).append("%-").append(statusLen).append('.').append(statusLen).append('s').append(fieldPostamble).append(' ');
+ retval.append(fieldPreamble).append("%-").append(uptimeLen).append('.').append(uptimeLen).append('s').append(fieldPostamble).append(' ');
+
+ return retval.toString();
+ }
}