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:01 UTC
[camel] 04/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 07b9d7f96df2e53359642f6bce96bec0819817ca
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 25 09:44:17 2020 +0200
CAMEL-15567: components - Generate source code for creating endpoint uri via a map of properties. WIP
---
.../component/ahc/AhcEndpointUriAssembler.java | 12 ++++++---
.../org/apache/camel/spi/EndpointUriAssembler.java | 2 +-
.../camel/impl/engine/AbstractCamelContext.java | 3 +--
.../impl/CamelCatalogEndpointUriAssembler.java | 7 +++--
.../catalog/CustomEndpointUriAssemblerTest.java | 11 ++++----
...untimeCamelCatalogEndpointUriAssemblerTest.java | 4 +--
.../component/EndpointUriAssemblerSupport.java | 21 +++++++++------
.../packaging/EndpointUriAssemblerGenerator.java | 31 ++++++++++------------
.../GenerateUriEndpointAssemblerMojo.java | 8 +++---
9 files changed, 54 insertions(+), 45 deletions(-)
diff --git a/components/camel-ahc/src/generated/java/org/apache/camel/component/ahc/AhcEndpointUriAssembler.java b/components/camel-ahc/src/generated/java/org/apache/camel/component/ahc/AhcEndpointUriAssembler.java
index 751a18a..3e3d8ae 100644
--- a/components/camel-ahc/src/generated/java/org/apache/camel/component/ahc/AhcEndpointUriAssembler.java
+++ b/components/camel-ahc/src/generated/java/org/apache/camel/component/ahc/AhcEndpointUriAssembler.java
@@ -6,17 +6,21 @@ import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.spi.EndpointUriAssembler;
-import org.apache.camel.component.ahc.AhcComponent;
/**
* Generated by camel build tools - do NOT edit this file!
*/
-@SuppressWarnings("unchecked")
public class AhcEndpointUriAssembler extends org.apache.camel.support.component.EndpointUriAssemblerSupport implements EndpointUriAssembler {
+ private static final String SYNTAX = "ahc:httpUri";
+
@Override
- public String buildUri(CamelContext camelContext, String scheme, Map<String, String> parameters) throws URISyntaxException {
- return null;
+ public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) throws URISyntaxException {
+ String uri = SYNTAX;
+
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "httpUri", null, true, parameters);
+ uri = buildQueryParameters(camelContext, uri, parameters);
+ return uri;
}
}
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 27ba83f..c1ed600 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
@@ -36,6 +36,6 @@ public interface EndpointUriAssembler {
* @param parameters endpoint options
* @return the constructed endpoint uri
*/
- String buildUri(CamelContext camelContext, String scheme, Map<String, String> parameters) throws URISyntaxException;
+ String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) throws URISyntaxException;
}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index cdab0f2..dd810cb 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -4243,8 +4243,7 @@ public abstract class AbstractCamelContext extends BaseService
return new BaseServiceResolver<>(RuntimeCamelCatalog.ENDPOINT_URI_ASSEMBLER_FACTORY, EndpointUriAssembler.class)
.resolve(getCamelContextReference())
.orElseThrow(() -> new IllegalArgumentException(
- "Cannot find RuntimeCamelCatalog on classpath. "
- + "Add camel-core-catalog to classpath."));
+ "Cannot find RuntimeCamelCatalog on classpath. Add camel-core-catalog to classpath."));
}
public enum Initialization {
diff --git a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelCatalogEndpointUriAssembler.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelCatalogEndpointUriAssembler.java
index 153671e..7245b8d 100644
--- a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelCatalogEndpointUriAssembler.java
+++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelCatalogEndpointUriAssembler.java
@@ -1,6 +1,7 @@
package org.apache.camel.catalog.impl;
import java.net.URISyntaxException;
+import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.camel.CamelContext;
@@ -19,9 +20,11 @@ import static org.apache.camel.catalog.RuntimeCamelCatalog.ENDPOINT_URI_ASSEMBLE
public class CamelCatalogEndpointUriAssembler implements EndpointUriAssembler {
@Override
- public String buildUri(CamelContext camelContext, String scheme, Map<String, String> parameters) {
+ public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) {
try {
- return camelContext.adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog().asEndpointUri(scheme, parameters,
+ Map<String, String> copy = new LinkedHashMap<>();
+ parameters.forEach((k, v) -> copy.put(k, v != null ? v.toString() : null));
+ return camelContext.adapt(ExtendedCamelContext.class).getRuntimeCamelCatalog().asEndpointUri(scheme, copy,
false);
} catch (URISyntaxException e) {
throw RuntimeCamelException.wrapRuntimeException(e);
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 e92fe0d..f5097da 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
@@ -34,9 +34,9 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
public void testCustomAssemble() throws Exception {
EndpointUriAssembler assembler = new MyAssembler();
- Map<String, String> params = new HashMap<>();
+ Map<String, Object> params = new HashMap<>();
params.put("timerName", "foo");
- params.put("period", "123");
+ params.put("period", 123);
params.put("repeatCount", "5");
String uri = assembler.buildUri(context, "timer", params);
@@ -47,9 +47,9 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
public void testCustomAssembleUnsorted() throws Exception {
EndpointUriAssembler assembler = new MyAssembler();
- Map<String, String> params = new LinkedHashMap<>();
+ Map<String, Object> params = new LinkedHashMap<>();
params.put("timerName", "foo");
- params.put("repeatCount", "5");
+ params.put("repeatCount", 5);
params.put("period", "123");
String uri = assembler.buildUri(context, "timer", params);
@@ -61,7 +61,8 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
private static final String SYNTAX = "timer:timerName";
@Override
- public String buildUri(CamelContext camelContext, String scheme, Map<String, String> parameters) throws URISyntaxException {
+ public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters)
+ throws URISyntaxException {
// begin from syntax
String uri = SYNTAX;
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 fbf620b..a3cf85b 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
@@ -32,7 +32,7 @@ public class RuntimeCamelCatalogEndpointUriAssemblerTest extends ContextTestSupp
public void testLookupAssemble() throws Exception {
EndpointUriAssembler assembler = context.adapt(ExtendedCamelContext.class).getEndpointUriAssembler("timer");
- Map<String, String> params = new HashMap<>();
+ Map<String, Object> params = new HashMap<>();
params.put("timerName", "foo");
params.put("period", "123");
params.put("repeatCount", "5");
@@ -45,7 +45,7 @@ public class RuntimeCamelCatalogEndpointUriAssemblerTest extends ContextTestSupp
public void testRuntimeAssemble() throws Exception {
EndpointUriAssembler assembler = new CamelCatalogEndpointUriAssembler();
- Map<String, String> params = new HashMap<>();
+ Map<String, Object> params = new HashMap<>();
params.put("timerName", "foo");
params.put("period", "123");
params.put("repeatCount", "5");
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 b74fbae..14a8aa0 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
@@ -30,23 +30,28 @@ import org.apache.camel.util.URISupport;
*/
public abstract class EndpointUriAssemblerSupport {
- protected String buildPathParameter(CamelContext camelContext, String syntax, String uri, String name, String defaultValue, boolean required, Map<String, String> parameters) {
- String obj = parameters.remove(name);
- if (ObjectHelper.isEmpty(obj)) {
- obj = defaultValue;
+ protected String buildPathParameter(
+ CamelContext camelContext, 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) {
+ obj = camelContext.getTypeConverter().convertTo(String.class, defaultValue);
}
if (ObjectHelper.isEmpty(obj) && required) {
- throw new IllegalArgumentException("Option " + name + " is required when creating endpoint uri with syntax " + syntax);
+ throw new IllegalArgumentException(
+ "Option " + name + " is required when creating endpoint uri with syntax " + syntax);
}
if (ObjectHelper.isNotEmpty(obj)) {
- uri = uri.replace(name, obj);
+ String str = camelContext.getTypeConverter().convertTo(String.class, obj);
+ uri = uri.replace(name, str);
}
return uri;
}
- protected String buildQueryParameters(CamelContext camelContext, String uri, Map<String, String> parameters) throws URISyntaxException {
+ protected String buildQueryParameters(CamelContext camelContext, String uri, Map<String, Object> parameters)
+ throws URISyntaxException {
// we want sorted parameters
- Map map = new TreeMap(parameters);
+ Map<String, Object> map = new TreeMap<>(parameters);
String query = URISupport.createQueryString(map);
if (ObjectHelper.isNotEmpty(query)) {
uri = uri + "?" + query;
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 c097e03..01b2e38 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
@@ -18,11 +18,9 @@ package org.apache.camel.maven.packaging;
import java.io.IOException;
import java.io.Writer;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.stream.Collectors;
import org.apache.camel.tooling.model.BaseOptionModel;
+import org.apache.camel.tooling.model.ComponentModel;
public final class EndpointUriAssemblerGenerator {
@@ -31,8 +29,7 @@ public final class EndpointUriAssemblerGenerator {
public static void generateEndpointUriAssembler(
String pn, String cn, String en,
- String pfqn, String psn,
- Collection<? extends BaseOptionModel> options, Writer w)
+ String pfqn, String psn, ComponentModel model, Writer w)
throws IOException {
w.write("/* " + AbstractGeneratorMojo.GENERATED_MSG + " */\n");
@@ -43,25 +40,25 @@ public final class EndpointUriAssemblerGenerator {
w.write("\n");
w.write("import org.apache.camel.CamelContext;\n");
w.write("import org.apache.camel.spi.EndpointUriAssembler;\n");
- w.write("import " + pfqn + ";\n");
w.write("\n");
w.write("/**\n");
w.write(" * " + AbstractGeneratorMojo.GENERATED_MSG + "\n");
w.write(" */\n");
- w.write("@SuppressWarnings(\"unchecked\")\n");
- w.write("public class " + cn + " extends " + psn
- + " implements EndpointUriAssembler {\n");
-
- // sort options A..Z so they always have same order
- options = options.stream().sorted(Comparator.comparing(BaseOptionModel::getName)).collect(Collectors.toList());
-
- // generate API that returns all the options
+ w.write("public class " + cn + " extends " + psn + " implements EndpointUriAssembler {\n");
+ w.write("\n");
+ w.write(" private static final String SYNTAX = \"" + model.getSyntax() + "\";\n");
w.write("\n");
w.write(" @Override\n");
- w.write(" public String buildUri(CamelContext camelContext, String scheme, Map<String, String> parameters) throws URISyntaxException {\n");
- w.write(" return null;\n");
+ w.write(" public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) throws URISyntaxException {\n");
+ w.write(" String uri = SYNTAX;\n");
+ w.write("\n");
+ for (BaseOptionModel option : model.getEndpointPathOptions()) {
+ w.write(" uri = buildPathParameter(camelContext, SYNTAX, uri, \"" + option.getName() + "\", "
+ + option.getDefaultValue() + ", " + option.isRequired() + ", parameters);\n");
+ }
+ w.write(" uri = buildQueryParameters(camelContext, uri, parameters);\n");
+ w.write(" return uri;\n");
w.write(" }\n");
-
w.write("}\n");
w.write("\n");
}
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateUriEndpointAssemblerMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateUriEndpointAssemblerMojo.java
index 431f2d7..f6d0301 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateUriEndpointAssemblerMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateUriEndpointAssemblerMojo.java
@@ -128,10 +128,10 @@ public class GenerateUriEndpointAssemblerMojo extends AbstractGeneratorMojo {
}
protected void createEndpointUrlAssembler(ComponentModel model) throws IOException {
- getLog().info("Generating endpoint-uri-assembler: " + model.getScheme());
+ getLog().debug("Generating endpoint-uri-assembler: " + model.getScheme());
String fqn = model.getJavaType();
- generateEndpointUriAssembler(fqn, fqn, model.getEndpointOptions(), sourcesOutputDir);
+ generateEndpointUriAssembler(fqn, fqn, model, sourcesOutputDir);
int pos = fqn.lastIndexOf('.');
String pn = fqn.substring(0, pos);
@@ -159,7 +159,7 @@ public class GenerateUriEndpointAssemblerMojo extends AbstractGeneratorMojo {
@Deprecated
private void generateEndpointUriAssembler(
- String fqn, String targetFqn, List<ComponentModel.EndpointOptionModel> options, File outputDir)
+ String fqn, String targetFqn, ComponentModel model, File outputDir)
throws IOException {
int pos = targetFqn.lastIndexOf('.');
@@ -172,7 +172,7 @@ public class GenerateUriEndpointAssemblerMojo extends AbstractGeneratorMojo {
String psn = "org.apache.camel.support.component.EndpointUriAssemblerSupport";
StringWriter sw = new StringWriter();
- EndpointUriAssemblerGenerator.generateEndpointUriAssembler(pn, cn, en, pfqn, psn, options, sw);
+ EndpointUriAssemblerGenerator.generateEndpointUriAssembler(pn, cn, en, pfqn, psn, model, sw);
String source = sw.toString();