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); }