Repository: camel
Updated Branches:
  refs/heads/camel-2.19.x c7e76cf92 -> 48317c282
  refs/heads/master 924b115fd -> 25529cbd0


CAMEL-11576 - Refactor endpoint syntax handling in order to support 
camel-stream component


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

Branch: refs/heads/master
Commit: 25529cbd0b178359fc8158b82d9ba81b87d470cd
Parents: 924b115
Author: Antoine DESSAIGNE <[email protected]>
Authored: Fri Jul 21 16:48:30 2017 +0200
Committer: Claus Ibsen <[email protected]>
Committed: Fri Jul 21 18:28:11 2017 +0200

----------------------------------------------------------------------
 .../runtimecatalog/AbstractCamelCatalog.java    | 32 +++++++++-----------
 .../camel/catalog/AbstractCamelCatalog.java     | 32 +++++++++-----------
 .../apache/camel/catalog/CamelCatalogTest.java  |  9 ++++++
 3 files changed, 37 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/25529cbd/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
 
b/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
index 3cda9d6..eeab211 100644
--- 
a/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
+++ 
b/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
@@ -67,6 +67,7 @@ public abstract class AbstractCamelCatalog {
     // CHECKSTYLE:OFF
 
     private static final Pattern SYNTAX_PATTERN = Pattern.compile("(\\w+)");
+    private static final Pattern COMPONENT_SYNTAX_PARSER = 
Pattern.compile("([^\\w-]*)([\\w-]+)");
 
     private SuggestionStrategy suggestionStrategy;
     private JSonSchemaResolver jsonSchemaResolver;
@@ -879,15 +880,15 @@ public abstract class AbstractCamelCatalog {
         }
 
         // grab the syntax
-        String syntax = null;
+        String originalSyntax = null;
         List<Map<String, String>> rows = 
JSonSchemaHelper.parseJsonSchema("component", json, false);
         for (Map<String, String> row : rows) {
             if (row.containsKey("syntax")) {
-                syntax = row.get("syntax");
+                originalSyntax = row.get("syntax");
                 break;
             }
         }
-        if (syntax == null) {
+        if (originalSyntax == null) {
             throw new IllegalArgumentException("Endpoint with scheme " + 
scheme + " has no syntax defined in the json schema");
         }
 
@@ -897,20 +898,17 @@ public abstract class AbstractCamelCatalog {
         rows = JSonSchemaHelper.parseJsonSchema("properties", json, true);
 
         // clip the scheme from the syntax
-        syntax = after(syntax, ":");
-
-        String originalSyntax = syntax;
+        originalSyntax = after(originalSyntax, ":");
 
         // build at first according to syntax (use a tree map as we want the 
uri options sorted)
-        Map<String, String> copy = new TreeMap<String, String>();
-        for (Map.Entry<String, String> entry : properties.entrySet()) {
-            String key = entry.getKey();
-            String value = entry.getValue() != null ? entry.getValue() : "";
-            if (syntax != null && syntax.contains(key)) {
-                syntax = syntax.replace(key, value);
-            } else {
-                copy.put(key, value);
-            }
+        Map<String, String> copy = new TreeMap<>(properties);
+        String syntax = "";
+        Matcher syntaxMatcher = 
COMPONENT_SYNTAX_PARSER.matcher(originalSyntax);
+        while (syntaxMatcher.find()) {
+            syntax += syntaxMatcher.group(1);
+            String propertyName = syntaxMatcher.group(2);
+            String propertyValue = copy.remove(propertyName);
+            syntax += propertyValue != null ? propertyValue : propertyName;
         }
 
         // do we have all the options the original syntax needs (easy way)
@@ -924,9 +922,7 @@ public abstract class AbstractCamelCatalog {
 
         if (hasAllKeys) {
             // we have all the keys for the syntax so we can build the uri the 
easy way
-            if (syntax != null) {
-                sb.append(syntax);
-            }
+            sb.append(syntax);
 
             if (!copy.isEmpty()) {
                 boolean hasQuestionmark = sb.toString().contains("?");

http://git-wip-us.apache.org/repos/asf/camel/blob/25529cbd/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git 
a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
 
b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
index b285d3a..3a97691 100644
--- 
a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
+++ 
b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
@@ -67,6 +67,7 @@ public abstract class AbstractCamelCatalog {
     // CHECKSTYLE:OFF
 
     private static final Pattern SYNTAX_PATTERN = Pattern.compile("(\\w+)");
+    private static final Pattern COMPONENT_SYNTAX_PARSER = 
Pattern.compile("([^\\w-]*)([\\w-]+)");
 
     private SuggestionStrategy suggestionStrategy;
     private JSonSchemaResolver jsonSchemaResolver;
@@ -879,15 +880,15 @@ public abstract class AbstractCamelCatalog {
         }
 
         // grab the syntax
-        String syntax = null;
+        String originalSyntax = null;
         List<Map<String, String>> rows = 
JSonSchemaHelper.parseJsonSchema("component", json, false);
         for (Map<String, String> row : rows) {
             if (row.containsKey("syntax")) {
-                syntax = row.get("syntax");
+                originalSyntax = row.get("syntax");
                 break;
             }
         }
-        if (syntax == null) {
+        if (originalSyntax == null) {
             throw new IllegalArgumentException("Endpoint with scheme " + 
scheme + " has no syntax defined in the json schema");
         }
 
@@ -897,20 +898,17 @@ public abstract class AbstractCamelCatalog {
         rows = JSonSchemaHelper.parseJsonSchema("properties", json, true);
 
         // clip the scheme from the syntax
-        syntax = after(syntax, ":");
-
-        String originalSyntax = syntax;
+        originalSyntax = after(originalSyntax, ":");
 
         // build at first according to syntax (use a tree map as we want the 
uri options sorted)
-        Map<String, String> copy = new TreeMap<String, String>();
-        for (Map.Entry<String, String> entry : properties.entrySet()) {
-            String key = entry.getKey();
-            String value = entry.getValue() != null ? entry.getValue() : "";
-            if (syntax != null && syntax.contains(key)) {
-                syntax = syntax.replace(key, value);
-            } else {
-                copy.put(key, value);
-            }
+        Map<String, String> copy = new TreeMap<>(properties);
+        String syntax = "";
+        Matcher syntaxMatcher = 
COMPONENT_SYNTAX_PARSER.matcher(originalSyntax);
+        while (syntaxMatcher.find()) {
+            syntax += syntaxMatcher.group(1);
+            String propertyName = syntaxMatcher.group(2);
+            String propertyValue = copy.remove(propertyName);
+            syntax += propertyValue != null ? propertyValue : propertyName;
         }
 
         // do we have all the options the original syntax needs (easy way)
@@ -924,9 +922,7 @@ public abstract class AbstractCamelCatalog {
 
         if (hasAllKeys) {
             // we have all the keys for the syntax so we can build the uri the 
easy way
-            if (syntax != null) {
-                sb.append(syntax);
-            }
+            sb.append(syntax);
 
             if (!copy.isEmpty()) {
                 boolean hasQuestionmark = sb.toString().contains("?");

http://git-wip-us.apache.org/repos/asf/camel/blob/25529cbd/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
----------------------------------------------------------------------
diff --git 
a/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
 
b/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 0a5d088..5ad90f6 100644
--- 
a/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ 
b/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -458,6 +458,15 @@ public class CamelCatalogTest {
     }
 
     @Test
+    public void testAsEndpointUriStream() throws Exception {
+        Map<String, String> map = new LinkedHashMap<>();
+        map.put("kind", "url");
+        map.put("url", "http://camel.apache.org";);
+
+        assertEquals("stream:url?url=http://camel.apache.org";, 
catalog.asEndpointUri("stream", map, false));
+    }
+
+    @Test
     public void testEndpointPropertiesJms() throws Exception {
         Map<String, String> map = catalog.endpointProperties("jms:queue:foo");
         assertNotNull(map);

Reply via email to