CAMEL-7999: Add label to @UriEndpoint so we can group endpoints.

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

Branch: refs/heads/master
Commit: 815c2fe5bd28c7f0aac0e05004a84ba8b1b9e5ab
Parents: 6cf45ca
Author: Claus Ibsen <davscl...@apache.org>
Authored: Fri Nov 14 11:52:33 2014 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Nov 14 13:02:06 2014 +0100

----------------------------------------------------------------------
 .../camel/commands/AbstractCamelController.java | 22 ++++-
 .../apache/camel/commands/CamelController.java  |  4 +-
 .../commands/CatalogComponentListCommand.java   |  6 +-
 .../camel/commands/CatalogLabelListCommand.java | 88 ++++++++++++++++----
 .../camel/karaf/commands/CatalogLabelList.java  |  7 +-
 5 files changed, 103 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/815c2fe5/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
----------------------------------------------------------------------
diff --git 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
index 8179bc7..bbe9b03 100644
--- 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
+++ 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractCamelController.java
@@ -21,6 +21,7 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -348,7 +349,24 @@ public abstract class AbstractCamelController implements 
CamelController {
     }
 
     @Override
-    public Set<String> listLabelCatalog() throws Exception {
-        return catalog.findLabels();
+    public Map<String, Set<String>> listLabelCatalog() throws Exception {
+        Map<String, Set<String>> answer = new LinkedHashMap<String, 
Set<String>>();
+
+        Set<String> labels = catalog.findLabels();
+        for (String label : labels) {
+            List<Map<String, String>> components = 
listComponentsCatalog(label);
+            if (!components.isEmpty()) {
+                Set<String> names = new LinkedHashSet<>();
+                for (Map<String, String> info : components) {
+                    String name = info.get("name");
+                    if (name != null) {
+                        names.add(name);
+                    }
+                }
+                answer.put(label, names);
+            }
+        }
+
+        return answer;
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/815c2fe5/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
----------------------------------------------------------------------
diff --git 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
index e3d8333..f6d2b89 100644
--- 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
+++ 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CamelController.java
@@ -138,9 +138,9 @@ public interface CamelController {
     /**
      * Lists all the labels from the Camel components catalog
      *
-     * @return a sorted set with all the label names
+     * @return a map which key is the label, and the set is the component 
names that has the given label
      * @throws java.lang.Exception is thrown if error loading resources to 
gather component information
      */
-    Set<String> listLabelCatalog() throws Exception;
+    Map<String, Set<String>> listLabelCatalog() throws Exception;
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/815c2fe5/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogComponentListCommand.java
----------------------------------------------------------------------
diff --git 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogComponentListCommand.java
 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogComponentListCommand.java
index 62ce6fe..d76bd67 100644
--- 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogComponentListCommand.java
+++ 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogComponentListCommand.java
@@ -58,8 +58,8 @@ public class CatalogComponentListCommand extends 
AbstractCamelCommand {
         }
 
         final Map<String, Integer> columnWidths = 
computeColumnWidths(components);
-        final String headerFormat = buildFormatString(columnWidths, true, 
verbose);
-        final String rowFormat = buildFormatString(columnWidths, false, 
verbose);
+        final String headerFormat = buildFormatString(columnWidths, true);
+        final String rowFormat = buildFormatString(columnWidths, false);
 
         if (verbose) {
             out.println(String.format(headerFormat, NAME_COLUMN_LABEL, 
LABEL_COLUMN_LABEL, MAVEN_COLUMN_LABEL, DESCRIPTION_COLUMN_LABEL));
@@ -133,7 +133,7 @@ public class CatalogComponentListCommand extends 
AbstractCamelCommand {
         }
     }
 
-    private String buildFormatString(Map<String, Integer> columnWidths, 
boolean isHeader, boolean isVerbose) {
+    private String buildFormatString(Map<String, Integer> columnWidths, 
boolean isHeader) {
         final String fieldPreamble;
         final String fieldPostamble;
         final int columnWidthIncrement;

http://git-wip-us.apache.org/repos/asf/camel/blob/815c2fe5/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogLabelListCommand.java
----------------------------------------------------------------------
diff --git 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogLabelListCommand.java
 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogLabelListCommand.java
index d47283a..57740d1 100644
--- 
a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogLabelListCommand.java
+++ 
b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/CatalogLabelListCommand.java
@@ -21,12 +21,16 @@ import java.util.Hashtable;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.camel.util.CollectionStringBuffer;
+
 /**
  * From the Camel catalog lists all the components.
  */
 public class CatalogLabelListCommand extends AbstractCamelCommand {
 
     private static final String LABEL_COLUMN_LABEL = "Label";
+    private static final String NUMBER_COLUMN_LABEL = "#";
+    private static final String NAME_COLUMN_LABEL = "Name";
 
     private static final int DEFAULT_COLUMN_WIDTH_INCREMENT = 0;
     private static final String DEFAULT_FIELD_PREAMBLE = " ";
@@ -37,13 +41,17 @@ public class CatalogLabelListCommand extends 
AbstractCamelCommand {
     // descriptions can be very long so clip by default after 120 chars
     private static final int MAX_COLUMN_WIDTH = 120;
     private static final int MIN_COLUMN_WIDTH = 12;
+    private static final int MIN_NUMBER_COLUMN_WIDTH = 6;
+
+    private boolean verbose;
 
-    public CatalogLabelListCommand() {
+    public CatalogLabelListCommand(boolean verbose) {
+        this.verbose = verbose;
     }
 
     @Override
     public Object execute(CamelController camelController, PrintStream out, 
PrintStream err) throws Exception {
-        Set<String> labels = camelController.listLabelCatalog();
+        Map<String, Set<String>> labels = camelController.listLabelCatalog();
 
         if (labels.isEmpty()) {
             return null;
@@ -53,28 +61,57 @@ public class CatalogLabelListCommand extends 
AbstractCamelCommand {
         final String headerFormat = buildFormatString(columnWidths, true);
         final String rowFormat = buildFormatString(columnWidths, false);
 
-        out.println(String.format(headerFormat, LABEL_COLUMN_LABEL));
-        out.println(String.format(headerFormat, "-----"));
-        for (String label : labels) {
-            out.println(String.format(rowFormat, label));
+        if (verbose) {
+            out.println(String.format(headerFormat, LABEL_COLUMN_LABEL, 
NUMBER_COLUMN_LABEL, NAME_COLUMN_LABEL));
+            out.println(String.format(headerFormat, "-----", "-", "----"));
+        } else {
+            out.println(String.format(headerFormat, LABEL_COLUMN_LABEL));
+            out.println(String.format(headerFormat, "-----"));
+        }
+
+        for (Map.Entry<String, Set<String>> row : labels.entrySet()) {
+            if (verbose) {
+                String label = row.getKey();
+                String number = "" + row.getValue().size();
+                CollectionStringBuffer csb = new CollectionStringBuffer(", ");
+                for (String name : row.getValue()) {
+                    csb.append(name);
+                }
+                out.println(String.format(rowFormat, label, number, 
csb.toString()));
+            } else {
+                String label = row.getKey();
+                out.println(String.format(rowFormat, label));
+            }
         }
 
         return null;
     }
 
-    private Map<String, Integer> computeColumnWidths(final Iterable<String> 
labels) throws Exception {
+    private Map<String, Integer> computeColumnWidths(Map<String, Set<String>> 
labels) throws Exception {
         if (labels == null) {
             return null;
         } else {
             // some of the options is optional so we need to start from 1
             int maxLabelLen = LABEL_COLUMN_LABEL.length();
+            int maxNameLen = NAME_COLUMN_LABEL.length();
 
-            for (String label : labels) {
+            int counter = 0;
+            CollectionStringBuffer csb = new CollectionStringBuffer(", ");
+            for (Map.Entry<String, Set<String>> entry : labels.entrySet()) {
+                String label = entry.getKey();
                 maxLabelLen = Math.max(maxLabelLen, label.length());
+                for (String name : entry.getValue()) {
+                    counter++;
+                    csb.append(name);
+                }
             }
+            maxNameLen = Math.max(maxNameLen, csb.toString().length());
+            int maxMumberLen = ("" + counter).length();
 
-            final Map<String, Integer> retval = new Hashtable<String, 
Integer>(1);
+            final Map<String, Integer> retval = new Hashtable<String, 
Integer>();
             retval.put(LABEL_COLUMN_LABEL, maxLabelLen);
+            retval.put(NUMBER_COLUMN_LABEL, maxMumberLen);
+            retval.put(NAME_COLUMN_LABEL, maxNameLen);
 
             return retval;
         }
@@ -94,16 +131,35 @@ public class CatalogLabelListCommand extends 
AbstractCamelCommand {
         }
         columnWidthIncrement = DEFAULT_COLUMN_WIDTH_INCREMENT;
 
-        int labelLen = Math.min(columnWidths.get(LABEL_COLUMN_LABEL) + 
columnWidthIncrement, getMaxColumnWidth());
-        labelLen = Math.max(MIN_COLUMN_WIDTH, labelLen);
+        if (verbose) {
+            int labelLen = Math.min(columnWidths.get(LABEL_COLUMN_LABEL) + 
columnWidthIncrement, getMaxColumnWidth(isHeader));
+            int numberLen = Math.min(columnWidths.get(NUMBER_COLUMN_LABEL) + 
columnWidthIncrement, getMaxColumnWidth(isHeader));
 
-        final StringBuilder retval = new 
StringBuilder(DEFAULT_FORMAT_BUFFER_LENGTH);
-        
retval.append(fieldPreamble).append("%-").append(labelLen).append('.').append(labelLen).append('s').append(fieldPostamble).append('
 ');
-        return retval.toString();
+            labelLen = Math.max(MIN_COLUMN_WIDTH, labelLen);
+            numberLen = Math.max(MIN_NUMBER_COLUMN_WIDTH, numberLen);
+
+            final StringBuilder retval = new 
StringBuilder(DEFAULT_FORMAT_BUFFER_LENGTH);
+            
retval.append(fieldPreamble).append("%-").append(labelLen).append('.').append(labelLen).append('s').append(fieldPostamble).append('
 ');
+            
retval.append(fieldPreamble).append("%-").append(numberLen).append('.').append(numberLen).append('s').append(fieldPostamble).append('
 ');
+            // allow last to overlap
+            
retval.append(fieldPreamble).append("%s").append(fieldPostamble).append(' ');
+            return retval.toString();
+        } else {
+            int labelLen = Math.min(columnWidths.get(LABEL_COLUMN_LABEL) + 
columnWidthIncrement, getMaxColumnWidth(isHeader));
+            labelLen = Math.max(MIN_COLUMN_WIDTH, labelLen);
+
+            final StringBuilder retval = new 
StringBuilder(DEFAULT_FORMAT_BUFFER_LENGTH);
+            
retval.append(fieldPreamble).append("%-").append(labelLen).append('.').append(labelLen).append('s').append(fieldPostamble).append('
 ');
+            return retval.toString();
+        }
     }
 
-    private int getMaxColumnWidth() {
-        return MAX_COLUMN_WIDTH;
+    private int getMaxColumnWidth(boolean isHeader) {
+        if (!isHeader && verbose) {
+            return Integer.MAX_VALUE;
+        } else {
+            return MAX_COLUMN_WIDTH;
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/815c2fe5/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CatalogLabelList.java
----------------------------------------------------------------------
diff --git 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CatalogLabelList.java
 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CatalogLabelList.java
index 2989ae4..382d6c6 100644
--- 
a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CatalogLabelList.java
+++ 
b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/CatalogLabelList.java
@@ -18,12 +18,17 @@ package org.apache.camel.karaf.commands;
 
 import org.apache.camel.commands.CatalogLabelListCommand;
 import org.apache.felix.gogo.commands.Command;
+import org.apache.felix.gogo.commands.Option;
 
 @Command(scope = "camel", name = "catalog-label-list", description = "Lists 
all Camel component labels from the Camel catalog.")
 public class CatalogLabelList extends CamelCommandSupport {
 
+    @Option(name = "--verbose", aliases = "-v", description = "Verbose output 
which shows more information",
+            required = false, multiValued = false, valueToShowInHelp = "false")
+    boolean verbose;
+
     protected Object doExecute() throws Exception {
-        CatalogLabelListCommand command = new CatalogLabelListCommand();
+        CatalogLabelListCommand command = new CatalogLabelListCommand(verbose);
         return command.execute(camelController, System.out, System.err);
     }
 

Reply via email to