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