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 2016/12/16 22:03:45 UTC

camel git commit: CAMEL-10608 Karaf endpoint-list command to support wildcard expressions

Repository: camel
Updated Branches:
  refs/heads/master 490951460 -> be5895d5d


CAMEL-10608 Karaf endpoint-list command to support wildcard expressions


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/be5895d5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/be5895d5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/be5895d5

Branch: refs/heads/master
Commit: be5895d5db1683ea29de15add7023e231dcd1267
Parents: 4909514
Author: jpoth <po...@gmail.com>
Authored: Fri Dec 16 16:23:28 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Dec 16 23:00:18 2016 +0100

----------------------------------------------------------------------
 .../camel/commands/EndpointListCommand.java     | 73 +++++++++++++-------
 .../camel/karaf/commands/EndpointList.java      |  2 +-
 2 files changed, 50 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/be5895d5/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointListCommand.java
----------------------------------------------------------------------
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointListCommand.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointListCommand.java
index 80bd6ca..c3cc8e1 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointListCommand.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/EndpointListCommand.java
@@ -18,6 +18,7 @@ package org.apache.camel.commands;
 
 import java.io.PrintStream;
 import java.net.URLDecoder;
+import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -29,10 +30,11 @@ import org.apache.camel.util.URISupport;
 /**
  * List the Camel endpoints available in the JVM.
  */
-public class EndpointListCommand extends AbstractContextCommand {
+public class EndpointListCommand extends AbstractCamelCommand {
 
     private static final String URI_COLUMN_LABEL = "Uri";
     private static final String STATUS_COLUMN_LABEL = "Status";
+    private static final String CONTEXT_NAME_COLUMN_LABEL = "Context";
 
     private static final int DEFAULT_COLUMN_WIDTH_INCREMENT = 0;
     private static final String DEFAULT_FIELD_PREAMBLE = " ";
@@ -47,25 +49,39 @@ public class EndpointListCommand extends AbstractContextCommand {
     boolean decode = true;
     boolean verbose;
     boolean explain;
+    private final String context;
 
     public EndpointListCommand(String context, boolean decode, boolean verbose, boolean explain) {
-        super(context);
         this.decode = decode;
         this.verbose = verbose;
         this.explain = explain;
+        this.context = context;
     }
 
     @Override
-    protected Object performContextCommand(CamelController camelController, String contextName, PrintStream out, PrintStream err) throws Exception {
-        List<Map<String, String>> endpoints = camelController.getEndpoints(contextName);
+    public Object execute(CamelController camelController, PrintStream out, PrintStream err) throws Exception {
+        final List<Map<String, String>> camelContextInfos = camelController.getCamelContexts(this.context);
+        final Map<String, List<Map<String, String>>> contextsToEndpoints = new HashMap<>();
+        
+        for (Map<String, String> camelContextInfo : camelContextInfos) {
+            String camelContextName = camelContextInfo.get("name");
+            final List<Map<String, String>> endpoints = camelController.getEndpoints(camelContextName);
+            if (endpoints.isEmpty()) {
+                continue;
+            }
+            contextsToEndpoints.put(camelContextName, endpoints);
+        }
 
-        final Map<String, Integer> columnWidths = computeColumnWidths(endpoints);
+        final Map<String, Integer> columnWidths = computeColumnWidths(contextsToEndpoints);
         final String headerFormat = buildFormatString(columnWidths, true);
         final String rowFormat = buildFormatString(columnWidths, false);
 
-        if (endpoints.size() > 0) {
-            out.println(String.format(headerFormat, URI_COLUMN_LABEL, STATUS_COLUMN_LABEL));
-            out.println(String.format(headerFormat, "---", "------"));
+        for (Map.Entry<String, List<Map<String, String>>> stringListEntry : contextsToEndpoints.entrySet()) {
+            final String camelContextName = stringListEntry.getKey();
+            final List<Map<String, String>> endpoints = stringListEntry.getValue();
+
+            out.println(String.format(headerFormat, CONTEXT_NAME_COLUMN_LABEL, URI_COLUMN_LABEL, STATUS_COLUMN_LABEL));
+            out.println(String.format(headerFormat, "-------", "---", "------"));
             for (Map<String, String> row : endpoints) {
                 String uri = row.get("uri");
                 if (decode) {
@@ -75,11 +91,11 @@ public class EndpointListCommand extends AbstractContextCommand {
                 // sanitize and mask uri so we dont see passwords
                 uri = URISupport.sanitizeUri(uri);
                 String state = row.get("state");
-                out.println(String.format(rowFormat, uri, state));
+                out.println(String.format(rowFormat, camelContextName, uri, state));
 
                 if (explain) {
                     boolean first = true;
-                    String json = camelController.explainEndpointAsJSon(context, row.get("uri"), verbose);
+                    String json = camelController.explainEndpointAsJSon(camelContextName, row.get("uri"), verbose);
                     // use a basic json parser
                     List<Map<String, String>> options = JsonSchemaHelper.parseJsonSchema("properties", json, true);
 
@@ -122,16 +138,21 @@ public class EndpointListCommand extends AbstractContextCommand {
                 }
             }
         }
-
         return null;
     }
 
-    private Map<String, Integer> computeColumnWidths(final Iterable<Map<String, String>> endpoints) throws Exception {
-        if (endpoints == null) {
-            throw new IllegalArgumentException("Unable to determine column widths from null Iterable<Endpoint>");
-        } else {
-            int maxUriLen = 0;
-            int maxStatusLen = 0;
+    private Map<String, Integer> computeColumnWidths(final Map<String, List<Map<String, String>>> contextsToEndpoints) throws Exception {
+        int maxUriLen = 0;
+        int maxStatusLen = 0;
+        int maxCamelContextLen = 0;
+
+        for (Map.Entry<String, List<Map<String, String>>> stringListEntry : contextsToEndpoints.entrySet()) {
+            final String camelContextName = stringListEntry.getKey();
+
+            maxCamelContextLen = java.lang.Math.max(maxCamelContextLen, camelContextName.length());
+            
+            final List<Map<String, String>> endpoints = stringListEntry.getValue();
+
 
             for (Map<String, String> row : endpoints) {
                 String uri = row.get("uri");
@@ -147,13 +168,14 @@ public class EndpointListCommand extends AbstractContextCommand {
                 final String status = row.get("state");
                 maxStatusLen = java.lang.Math.max(maxStatusLen, status == null ? 0 : status.length());
             }
-
-            final Map<String, Integer> retval = new Hashtable<String, Integer>();
-            retval.put(URI_COLUMN_LABEL, maxUriLen);
-            retval.put(STATUS_COLUMN_LABEL, maxStatusLen);
-
-            return retval;
         }
+    
+        final Map<String, Integer> retval = new Hashtable<>();
+        retval.put(URI_COLUMN_LABEL, maxUriLen);
+        retval.put(STATUS_COLUMN_LABEL, maxStatusLen);
+        retval.put(CONTEXT_NAME_COLUMN_LABEL, maxCamelContextLen);
+
+        return retval;
     }
 
     private String buildFormatString(final Map<String, Integer> columnWidths, final boolean isHeader) {
@@ -172,9 +194,13 @@ public class EndpointListCommand extends AbstractContextCommand {
 
         int uriLen = java.lang.Math.min(columnWidths.get(URI_COLUMN_LABEL) + columnWidthIncrement, getMaxColumnWidth());
         uriLen = Math.max(MIN_COLUMN_WIDTH, uriLen);
+
+        int ctxLen = java.lang.Math.min(columnWidths.get(CONTEXT_NAME_COLUMN_LABEL) + columnWidthIncrement, getMaxColumnWidth());
+        ctxLen = Math.max(MIN_COLUMN_WIDTH, ctxLen);
         // last row does not have min width
 
         final StringBuilder retval = new StringBuilder(DEFAULT_FORMAT_BUFFER_LENGTH);
+        retval.append(fieldPreamble).append("%-").append(ctxLen).append('.').append(ctxLen).append('s').append(fieldPostamble).append(' ');
         retval.append(fieldPreamble).append("%-").append(uriLen).append('.').append(uriLen).append('s').append(fieldPostamble).append(' ');
         retval.append(fieldPreamble).append("%s").append(fieldPostamble).append(' ');
 
@@ -188,5 +214,4 @@ public class EndpointListCommand extends AbstractContextCommand {
             return MAX_COLUMN_WIDTH;
         }
     }
-
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/be5895d5/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
----------------------------------------------------------------------
diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
index 1c49270..10b09c4 100644
--- a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
+++ b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointList.java
@@ -30,7 +30,7 @@ import org.apache.karaf.shell.api.action.lifecycle.Service;
 @Service
 public class EndpointList extends CamelControllerImpl implements Action {
 
-    @Argument(index = 0, name = "name", description = "The name of the Camel context", required = true, multiValued = false)
+    @Argument(index = 0, name = "name", description = "The name of the Camel context or a wildcard expression", required = false, multiValued = false)
     @Completion(CamelContextCompleter.class)
     String name;