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 2020/09/25 18:45:09 UTC

[camel] 12/16: CAMEL-15567: components - Generate source code for creating endpoint uri via a map of properties. WIP

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch uri-assembler
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 6e668189bffcf459d74034ddf88895bb096c08ae
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 25 14:22:26 2020 +0200

    CAMEL-15567: components - Generate source code for creating endpoint uri via a map of properties. WIP
---
 .../org/apache/camel/spi/EndpointUriAssembler.java | 13 ++---
 .../impl/engine/DefaultAssemblerResolver.java      |  2 +
 .../catalog/CustomEndpointUriAssemblerTest.java    | 67 +++++++++++++---------
 ...untimeCamelCatalogEndpointUriAssemblerTest.java |  2 +-
 .../component/log/LogEndpointUriAssemblerTest.java |  2 +-
 .../component/EndpointUriAssemblerSupport.java     | 17 +++++-
 .../packaging/EndpointUriAssemblerGenerator.java   |  7 +--
 7 files changed, 66 insertions(+), 44 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/EndpointUriAssembler.java b/core/camel-api/src/main/java/org/apache/camel/spi/EndpointUriAssembler.java
index 427d526..8480eeb 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/EndpointUriAssembler.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/EndpointUriAssembler.java
@@ -19,12 +19,12 @@ package org.apache.camel.spi;
 import java.net.URISyntaxException;
 import java.util.Map;
 
-import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 
 /**
  * To assemble an endpoint uri String from a map of parameters.
  */
-public interface EndpointUriAssembler {
+public interface EndpointUriAssembler extends CamelContextAware {
 
     /**
      * Checks whether this assembler supports the given component name
@@ -34,11 +34,10 @@ public interface EndpointUriAssembler {
     /**
      * Assembles an endpoint uri for the given component name with the given parameters.
      *
-     * @param  camelContext the Camel context
-     * @param  scheme       the component name
-     * @param  parameters   endpoint options
-     * @return              the constructed endpoint uri
+     * @param  scheme     the component name
+     * @param  parameters endpoint options
+     * @return            the constructed endpoint uri
      */
-    String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) throws URISyntaxException;
+    String buildUri(String scheme, Map<String, Object> parameters) throws URISyntaxException;
 
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAssemblerResolver.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAssemblerResolver.java
index c8ffea6..9737fef 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAssemblerResolver.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAssemblerResolver.java
@@ -71,6 +71,7 @@ public class DefaultAssemblerResolver extends ServiceSupport implements CamelCon
         Set<EndpointUriAssembler> assemblers = context.getRegistry().findByType(EndpointUriAssembler.class);
         answer = assemblers.stream().filter(a -> a.isEnabled(name)).findFirst().orElse(null);
         if (answer != null) {
+            answer.setCamelContext(context);
             cache.put(name, answer);
             return answer;
         }
@@ -96,6 +97,7 @@ public class DefaultAssemblerResolver extends ServiceSupport implements CamelCon
             // create the assembler
             if (EndpointUriAssembler.class.isAssignableFrom(type)) {
                 answer = (EndpointUriAssembler) context.getInjector().newInstance(type, false);
+                answer.setCamelContext(context);
                 cache.put(name, answer);
                 return answer;
             } else {
diff --git a/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java b/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java
index d0bb0ff..ffd65af 100644
--- a/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java
@@ -21,7 +21,6 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.EndpointUriAssembler;
@@ -34,6 +33,7 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
     @Test
     public void testCustomAssemble() throws Exception {
         EndpointUriAssembler assembler = new MyAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new HashMap<>();
         params.put("name", "foo");
@@ -41,13 +41,14 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("port", 4444);
         params.put("verbose", true);
 
-        String uri = assembler.buildUri(context, "acme", params);
+        String uri = assembler.buildUri("acme", params);
         Assertions.assertEquals("acme:foo:4444?amount=123&verbose=true", uri);
     }
 
     @Test
     public void testCustomAssembleRegistry() throws Exception {
-        context.getRegistry().bind("myAssembler", new MyAssembler());
+        EndpointUriAssembler assembler = new MyAssembler();
+        context.getRegistry().bind("myAssembler", assembler);
 
         Map<String, Object> params = new HashMap<>();
         params.put("name", "foo");
@@ -55,14 +56,15 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("port", 4444);
         params.put("verbose", true);
 
-        EndpointUriAssembler assembler = context.adapt(ExtendedCamelContext.class).getEndpointUriAssembler("acme");
-        String uri = assembler.buildUri(context, "acme", params);
+        assembler = context.adapt(ExtendedCamelContext.class).getEndpointUriAssembler("acme");
+        String uri = assembler.buildUri("acme", params);
         Assertions.assertEquals("acme:foo:4444?amount=123&verbose=true", uri);
     }
 
     @Test
     public void testCustomAssembleUnsorted() throws Exception {
         EndpointUriAssembler assembler = new MyAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("name", "foo");
@@ -70,13 +72,14 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("port", 4444);
         params.put("amount", "123");
 
-        String uri = assembler.buildUri(context, "acme", params);
+        String uri = assembler.buildUri("acme", params);
         Assertions.assertEquals("acme:foo:4444?amount=123&verbose=false", uri);
     }
 
     @Test
     public void testCustomAssembleNoMandatory() throws Exception {
         EndpointUriAssembler assembler = new MyAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("verbose", false);
@@ -84,7 +87,7 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("amount", "123");
 
         try {
-            assembler.buildUri(context, "acme", params);
+            assembler.buildUri("acme", params);
             Assertions.fail();
         } catch (IllegalArgumentException e) {
             Assertions.assertEquals("Option name is required when creating endpoint uri with syntax acme:name:port",
@@ -95,19 +98,21 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
     @Test
     public void testCustomAssembleDefault() throws Exception {
         EndpointUriAssembler assembler = new MyAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("name", "bar");
         params.put("verbose", false);
         params.put("amount", "123");
 
-        String uri = assembler.buildUri(context, "acme", params);
+        String uri = assembler.buildUri("acme", params);
         Assertions.assertEquals("acme:bar?amount=123&verbose=false", uri);
     }
 
     @Test
     public void testCustomAssembleComplex() throws Exception {
         EndpointUriAssembler assembler = new MySecondAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("name", "bar");
@@ -115,13 +120,14 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("verbose", true);
         params.put("amount", "123");
 
-        String uri = assembler.buildUri(context, "acme2", params);
+        String uri = assembler.buildUri("acme2", params);
         Assertions.assertEquals("acme2:bar/moes?amount=123&verbose=true", uri);
     }
 
     @Test
     public void testCustomAssembleComplexPort() throws Exception {
         EndpointUriAssembler assembler = new MySecondAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("name", "bar");
@@ -130,13 +136,14 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("verbose", true);
         params.put("amount", "123");
 
-        String uri = assembler.buildUri(context, "acme2", params);
+        String uri = assembler.buildUri("acme2", params);
         Assertions.assertEquals("acme2:bar/moes:4444?amount=123&verbose=true", uri);
     }
 
     @Test
     public void testCustomAssembleComplexNoPath() throws Exception {
         EndpointUriAssembler assembler = new MySecondAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("name", "bar");
@@ -144,58 +151,62 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("verbose", true);
         params.put("amount", "123");
 
-        String uri = assembler.buildUri(context, "acme2", params);
+        String uri = assembler.buildUri("acme2", params);
         Assertions.assertEquals("acme2:bar:4444?amount=123&verbose=true", uri);
     }
 
     @Test
     public void testCustomAssembleComplexNoPathNoPort() throws Exception {
         EndpointUriAssembler assembler = new MySecondAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("name", "bar");
         params.put("verbose", true);
         params.put("amount", "123");
 
-        String uri = assembler.buildUri(context, "acme2", params);
+        String uri = assembler.buildUri("acme2", params);
         Assertions.assertEquals("acme2:bar?amount=123&verbose=true", uri);
     }
 
     @Test
     public void testJms() throws Exception {
         EndpointUriAssembler assembler = new MyJmsAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("destinationName", "foo");
         params.put("destinationType", "topic");
         params.put("deliveryPersistent", true);
 
-        String uri = assembler.buildUri(context, "jms2", params);
+        String uri = assembler.buildUri("jms2", params);
         Assertions.assertEquals("jms2:topic:foo?deliveryPersistent=true", uri);
     }
 
     @Test
     public void testJmsMatchDefault() throws Exception {
         EndpointUriAssembler assembler = new MyJmsAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("destinationName", "foo");
         params.put("destinationType", "queue");
         params.put("deliveryPersistent", true);
 
-        String uri = assembler.buildUri(context, "jms2", params);
+        String uri = assembler.buildUri("jms2", params);
         Assertions.assertEquals("jms2:queue:foo?deliveryPersistent=true", uri);
     }
 
     @Test
     public void testJmsNoDefault() throws Exception {
         EndpointUriAssembler assembler = new MyJmsAssembler();
+        assembler.setCamelContext(context);
 
         Map<String, Object> params = new LinkedHashMap<>();
         params.put("destinationName", "foo");
         params.put("deliveryPersistent", true);
 
-        String uri = assembler.buildUri(context, "jms2", params);
+        String uri = assembler.buildUri("jms2", params);
         Assertions.assertEquals("jms2:foo?deliveryPersistent=true", uri);
     }
 
@@ -209,16 +220,16 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         }
 
         @Override
-        public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters)
+        public String buildUri(String scheme, Map<String, Object> parameters)
                 throws URISyntaxException {
             // begin from syntax
             String uri = SYNTAX;
 
             // append path parameters
-            uri = buildPathParameter(camelContext, SYNTAX, uri, "name", null, true, parameters);
-            uri = buildPathParameter(camelContext, SYNTAX, uri, "port", 8080, false, parameters);
+            uri = buildPathParameter(SYNTAX, uri, "name", null, true, parameters);
+            uri = buildPathParameter(SYNTAX, uri, "port", 8080, false, parameters);
             // append remainder parameters
-            uri = buildQueryParameters(camelContext, uri, parameters);
+            uri = buildQueryParameters(uri, parameters);
 
             return uri;
         }
@@ -235,17 +246,17 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         }
 
         @Override
-        public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters)
+        public String buildUri(String scheme, Map<String, Object> parameters)
                 throws URISyntaxException {
             // begin from syntax
             String uri = SYNTAX;
 
             // append path parameters
-            uri = buildPathParameter(camelContext, SYNTAX, uri, "name", null, true, parameters);
-            uri = buildPathParameter(camelContext, SYNTAX, uri, "path", null, false, parameters);
-            uri = buildPathParameter(camelContext, SYNTAX, uri, "port", 8080, false, parameters);
+            uri = buildPathParameter(SYNTAX, uri, "name", null, true, parameters);
+            uri = buildPathParameter(SYNTAX, uri, "path", null, false, parameters);
+            uri = buildPathParameter(SYNTAX, uri, "port", 8080, false, parameters);
             // append remainder parameters
-            uri = buildQueryParameters(camelContext, uri, parameters);
+            uri = buildQueryParameters(uri, parameters);
 
             return uri;
         }
@@ -262,13 +273,13 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         }
 
         @Override
-        public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters)
+        public String buildUri(String scheme, Map<String, Object> parameters)
                 throws URISyntaxException {
 
             String uri = SYNTAX;
-            uri = buildPathParameter(camelContext, SYNTAX, uri, "destinationType", "queue", false, parameters);
-            uri = buildPathParameter(camelContext, SYNTAX, uri, "destinationName", null, true, parameters);
-            uri = buildQueryParameters(camelContext, uri, parameters);
+            uri = buildPathParameter(SYNTAX, uri, "destinationType", "queue", false, parameters);
+            uri = buildPathParameter(SYNTAX, uri, "destinationName", null, true, parameters);
+            uri = buildQueryParameters(uri, parameters);
 
             return uri;
         }
diff --git a/core/camel-core/src/test/java/org/apache/camel/catalog/RuntimeCamelCatalogEndpointUriAssemblerTest.java b/core/camel-core/src/test/java/org/apache/camel/catalog/RuntimeCamelCatalogEndpointUriAssemblerTest.java
index f52d4a7..683b626 100644
--- a/core/camel-core/src/test/java/org/apache/camel/catalog/RuntimeCamelCatalogEndpointUriAssemblerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/catalog/RuntimeCamelCatalogEndpointUriAssemblerTest.java
@@ -36,7 +36,7 @@ public class RuntimeCamelCatalogEndpointUriAssemblerTest extends ContextTestSupp
         params.put("period", "123");
         params.put("repeatCount", "5");
 
-        String uri = assembler.buildUri(context, "timer", params);
+        String uri = assembler.buildUri("timer", params);
         Assertions.assertEquals("timer:foo?period=123&repeatCount=5", uri);
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointUriAssemblerTest.java b/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointUriAssemblerTest.java
index f8115fd..528f0bb 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointUriAssemblerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointUriAssemblerTest.java
@@ -25,7 +25,7 @@ public class LogEndpointUriAssemblerTest extends ContextTestSupport {
         boolean generated = assembler instanceof LogEndpointUriAssembler;
         Assertions.assertTrue(generated);
 
-        String uri = assembler.buildUri(context, "log", params);
+        String uri = assembler.buildUri("log", params);
         Assertions.assertEquals("log:foo?groupSize=123&logMask=true&showExchangePattern=false", uri);
     }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java
index cfcb0d5..1a3ec4d 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.TreeMap;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 
@@ -28,10 +29,20 @@ import org.apache.camel.util.URISupport;
  * Base class used by Camel Package Maven Plugin when it generates source code for fast endpoint uri assembler via
  * {@link org.apache.camel.spi.EndpointUriAssembler}.
  */
-public abstract class EndpointUriAssemblerSupport {
+public abstract class EndpointUriAssemblerSupport implements CamelContextAware {
+
+    protected CamelContext camelContext;
+
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
 
     protected String buildPathParameter(
-            CamelContext camelContext, String syntax, String uri, String name, Object defaultValue, boolean required,
+            String syntax, String uri, String name, Object defaultValue, boolean required,
             Map<String, Object> parameters) {
         Object obj = parameters.remove(name);
         if (ObjectHelper.isEmpty(obj) && defaultValue != null && required) {
@@ -62,7 +73,7 @@ public abstract class EndpointUriAssemblerSupport {
         return uri;
     }
 
-    protected String buildQueryParameters(CamelContext camelContext, String uri, Map<String, Object> parameters)
+    protected String buildQueryParameters(String uri, Map<String, Object> parameters)
             throws URISyntaxException {
         // we want sorted parameters
         Map<String, Object> map = new TreeMap<>(parameters);
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriAssemblerGenerator.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriAssemblerGenerator.java
index 90e8f0b..8aa7bc9 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriAssemblerGenerator.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointUriAssemblerGenerator.java
@@ -40,7 +40,6 @@ public final class EndpointUriAssemblerGenerator {
         w.write("import java.util.HashMap;\n");
         w.write("import java.util.Map;\n");
         w.write("\n");
-        w.write("import org.apache.camel.CamelContext;\n");
         w.write("import org.apache.camel.spi.EndpointUriAssembler;\n");
         w.write("\n");
         w.write("/**\n");
@@ -70,17 +69,17 @@ public final class EndpointUriAssemblerGenerator {
         w.write("    }\n");
         w.write("\n");
         w.write("    @Override\n");
-        w.write("    public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) throws URISyntaxException {\n");
+        w.write("    public String buildUri(String scheme, Map<String, Object> parameters) throws URISyntaxException {\n");
         w.write("        String syntax = scheme + BASE;\n");
         w.write("        String uri = syntax;\n");
         w.write("\n");
         w.write("        Map<String, Object> copy = new HashMap<>(parameters);\n");
         w.write("\n");
         for (BaseOptionModel option : model.getEndpointPathOptions()) {
-            w.write("        uri = buildPathParameter(camelContext, syntax, uri, \"" + option.getName() + "\", "
+            w.write("        uri = buildPathParameter(syntax, uri, \"" + option.getName() + "\", "
                     + defaultValue(option) + ", " + option.isRequired() + ", copy);\n");
         }
-        w.write("        uri = buildQueryParameters(camelContext, uri, copy);\n");
+        w.write("        uri = buildQueryParameters(uri, copy);\n");
         w.write("        return uri;\n");
         w.write("    }\n");
         w.write("}\n");