Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 0832A176E0 for ; Fri, 7 Nov 2014 12:35:45 +0000 (UTC) Received: (qmail 42448 invoked by uid 500); 7 Nov 2014 12:35:44 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 42329 invoked by uid 500); 7 Nov 2014 12:35:44 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 42199 invoked by uid 99); 7 Nov 2014 12:35:44 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Nov 2014 12:35:44 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 6E83B9893E2; Fri, 7 Nov 2014 12:35:44 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: davsclaus@apache.org To: commits@camel.apache.org Date: Fri, 07 Nov 2014 12:35:51 -0000 Message-Id: <8bda51d5e8ec4a788269066224367ffc@git.apache.org> In-Reply-To: <027fbc95d0d7450e8b5647b069fab2c1@git.apache.org> References: <027fbc95d0d7450e8b5647b069fab2c1@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [08/21] camel git commit: Add karaf commands to explain endpoints Add karaf commands to explain endpoints Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/510c6e5d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/510c6e5d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/510c6e5d Branch: refs/heads/master Commit: 510c6e5d9558ac2899e4d1b9edca95e200ddc88c Parents: cfed648 Author: Claus Ibsen Authored: Thu Nov 6 21:54:51 2014 +0100 Committer: Claus Ibsen Committed: Fri Nov 7 13:25:19 2014 +0100 ---------------------------------------------------------------------- .../apache/camel/impl/DefaultCamelContext.java | 51 ++++++++++++--- .../org/apache/camel/util/JsonSchemaHelper.java | 50 +++++++++++++++ .../camel/karaf/commands/EndpointExplain.java | 3 +- .../camel/karaf/commands/EndpointHelper.java | 67 -------------------- .../camel/karaf/commands/EndpointList.java | 3 +- 5 files changed, 95 insertions(+), 79 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/510c6e5d/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index b049b4a..6293161 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.SortedMap; import java.util.TreeMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.ScheduledExecutorService; @@ -1138,18 +1137,14 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon return null; } - StringBuilder buffer = new StringBuilder("{\n \"properties\": {"); - boolean first = true; + Map selected = new LinkedHashMap<>(); + + // insert values from uri Map options = URISupport.parseParameters(u); for (Map.Entry entry : options.entrySet()) { - if (first) { - first = false; - } else { - buffer.append(","); - } - buffer.append("\n "); String option = entry.getKey(); + String value = ""; if (entry.getValue() != null) { value = entry.getValue().toString(); @@ -1157,10 +1152,45 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon value = URISupport.sanitizePath(value); // if we have the json schema then use that to get the descriptions - String description = null; + String description; description = JsonSchemaHelper.getDescription(json, option); description = ObjectHelper.isEmpty(description) ? null : description; + // add as selected row + selected.put(option, new String[]{option, value, description}); + } + + if (includeAllOptions) { + // include other rows + List rows = JsonSchemaHelper.parseEndpointExplainJson(json); + for (String[] row : rows) { + String option = row[0]; + String value = row[1]; + value = URISupport.sanitizePath(value); + String description = row[2]; + + // add as selected row + if (!selected.containsKey(option)) { + selected.put(option, new String[]{option, value, description}); + } + } + } + + StringBuilder buffer = new StringBuilder("{\n \"properties\": {"); + + boolean first = true; + for (String[] row : selected.values()) { + if (first) { + first = false; + } else { + buffer.append(","); + } + buffer.append("\n "); + + String option = row[0]; + String value = row[1]; + String description = row[2]; + // add json of the option buffer.append(doubleQuote(option) + ": { "); buffer.append("\"value\": \"" + value + "\""); @@ -1169,6 +1199,7 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon } buffer.append(" }"); } + buffer.append("\n }\n}\n"); return buffer.toString(); } http://git-wip-us.apache.org/repos/asf/camel/blob/510c6e5d/camel-core/src/main/java/org/apache/camel/util/JsonSchemaHelper.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/util/JsonSchemaHelper.java b/camel-core/src/main/java/org/apache/camel/util/JsonSchemaHelper.java index 4849e22..4d006d6 100644 --- a/camel-core/src/main/java/org/apache/camel/util/JsonSchemaHelper.java +++ b/camel-core/src/main/java/org/apache/camel/util/JsonSchemaHelper.java @@ -16,11 +16,18 @@ */ package org.apache.camel.util; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + /** * A helper class for JSON schema. */ public final class JsonSchemaHelper { + private static final Pattern PATTERN = Pattern.compile("\"(.+?)\""); + private JsonSchemaHelper() { } @@ -125,4 +132,47 @@ public final class JsonSchemaHelper { return null; } + /** + * Parses the endpoint explain json + * + * @param json the json + * @return a list of all the options, where each row contains: key, value, description + */ + public static List parseEndpointExplainJson(String json) { + List answer = new ArrayList<>(); + if (json == null) { + return answer; + } + + // parse line by line + // skip first 2 lines as they are leading + String[] lines = json.split("\n"); + for (int i = 2; i < lines.length; i++) { + String line = lines[i]; + + Matcher matcher = PATTERN.matcher(line); + String option = null; + String value = null; + String description = null; + int count = 0; + while (matcher.find()) { + count++; + if (count == 1) { + option = matcher.group(1); + } else if (count == 3) { + value = matcher.group(1); + } else if (count == 5) { + description = matcher.group(1); + } + } + + if (option != null) { + String[] row = new String[]{option, value, description}; + answer.add(row); + } + } + + return answer; + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/510c6e5d/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java ---------------------------------------------------------------------- diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java index e9eb8da..5f4c08a 100644 --- a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java +++ b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointExplain.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.regex.Pattern; import org.apache.camel.Endpoint; +import org.apache.camel.util.JsonSchemaHelper; import org.apache.camel.util.URISupport; import org.apache.felix.gogo.commands.Argument; import org.apache.felix.gogo.commands.Command; @@ -84,7 +85,7 @@ public class EndpointExplain extends CamelCommandSupport { out.println(); // use a basic json parser - List options = EndpointHelper.parseEndpointExplainJson(json); + List options = JsonSchemaHelper.parseEndpointExplainJson(json); for (String[] option : options) { out.print("Option:\t\t"); out.println(option[0]); http://git-wip-us.apache.org/repos/asf/camel/blob/510c6e5d/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointHelper.java ---------------------------------------------------------------------- diff --git a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointHelper.java b/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointHelper.java deleted file mode 100644 index 8a7537d..0000000 --- a/platforms/karaf/commands/src/main/java/org/apache/camel/karaf/commands/EndpointHelper.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.karaf.commands; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public final class EndpointHelper { - - private static final Pattern PATTERN = Pattern.compile("\"(.+?)\""); - - private EndpointHelper() { - } - - public static List parseEndpointExplainJson(String json) { - List answer = new ArrayList<>(); - if (json == null) { - return answer; - } - - // parse line by line - // skip first 2 lines as they are leading - String[] lines = json.split("\n"); - for (int i = 2; i < lines.length; i++) { - String line = lines[i]; - - Matcher matcher = PATTERN.matcher(line); - String option = null; - String value = null; - String description = null; - int count = 0; - while (matcher.find()) { - count++; - if (count == 1) { - option = matcher.group(1); - } else if (count == 3) { - value = matcher.group(1); - } else if (count == 5) { - description = matcher.group(1); - } - } - - if (option != null) { - String[] row = new String[]{option, value, description}; - answer.add(row); - } - } - - return answer; - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/510c6e5d/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 090a38f..4bc5852 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 @@ -25,6 +25,7 @@ import java.util.Map; import org.apache.camel.Endpoint; import org.apache.camel.ServiceStatus; import org.apache.camel.StatefulService; +import org.apache.camel.util.JsonSchemaHelper; import org.apache.camel.util.URISupport; import org.apache.felix.gogo.commands.Argument; import org.apache.felix.gogo.commands.Command; @@ -92,7 +93,7 @@ public class EndpointList extends CamelCommandSupport { boolean first = true; String json = camelController.explainEndpoint(endpoint.getCamelContext().getName(), endpoint.getEndpointUri(), verbose); // use a basic json parser - List options = EndpointHelper.parseEndpointExplainJson(json); + List options = JsonSchemaHelper.parseEndpointExplainJson(json); for (String[] option : options) { String key = option[0]; String value = option[1];