This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch camel-master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 9ae95f2febb878eadf61102d07d32a87fb3a8be8 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Thu Jun 18 16:30:49 2020 +0100 Upgrade to Camel 3.5.0-SNAPSHOT --- .../org/apache/camel/quarkus/core/BaseModel.java | 87 ++++++++++++++++++++++ .../core/DisabledXMLRoutesDefinitionLoader.java | 5 ++ .../camel/quarkus/core/FastCamelContext.java | 41 ++++++++++ .../quarkus/main/CamelMainRoutesCollector.java | 26 +++++++ .../runtime/support/CustomRoutesCollector.java | 7 ++ pom.xml | 2 +- 6 files changed, 167 insertions(+), 1 deletion(-) diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java index 9bd3b06..e08704e 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java @@ -27,12 +27,14 @@ import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition; import org.apache.camel.model.rest.RestDefinition; import org.apache.camel.model.transformer.TransformerDefinition; import org.apache.camel.model.validator.ValidatorDefinition; +import org.apache.camel.util.CollectionStringBuffer; public abstract class BaseModel implements Model { private final CamelContext camelContext; private final List<RouteDefinition> routeDefinitions = new ArrayList<>(); + private final List<RouteTemplateDefinition> routeTemplateDefinitions = new ArrayList<>(); private final List<RestDefinition> restDefinitions = new ArrayList<>(); private Map<String, DataFormatDefinition> dataFormats = new HashMap<>(); private List<TransformerDefinition> transformers = new ArrayList<>(); @@ -111,6 +113,91 @@ public abstract class BaseModel implements Model { } @Override + public List<RouteTemplateDefinition> getRouteTemplateDefinitions() { + return routeTemplateDefinitions; + } + + @Override + public RouteTemplateDefinition getRouteTemplateDefinition(String id) { + for (RouteTemplateDefinition route : routeTemplateDefinitions) { + if (route.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory()).equals(id)) { + return route; + } + } + return null; + } + + @Override + public void addRouteTemplateDefinitions(Collection<RouteTemplateDefinition> routeTemplateDefinitions) throws Exception { + if (routeTemplateDefinitions == null || routeTemplateDefinitions.isEmpty()) { + return; + } + this.routeTemplateDefinitions.addAll(routeTemplateDefinitions); + } + + @Override + public void addRouteTemplateDefinition(RouteTemplateDefinition routeTemplateDefinition) throws Exception { + this.routeTemplateDefinitions.addAll(routeTemplateDefinitions); + } + + @Override + public void removeRouteTemplateDefinitions(Collection<RouteTemplateDefinition> routeTemplateDefinitions) throws Exception { + routeTemplateDefinitions.removeAll(routeTemplateDefinitions); + } + + @Override + public void removeRouteTemplateDefinition(RouteTemplateDefinition routeTemplateDefinition) throws Exception { + routeTemplateDefinitions.remove(routeTemplateDefinition); + } + + @Override + public String addRouteFromTemplate(String routeId, String routeTemplateId, Map<String, Object> parameters) + throws Exception { + RouteTemplateDefinition target = null; + for (RouteTemplateDefinition def : routeTemplateDefinitions) { + if (routeTemplateId.equals(def.getId())) { + target = def; + break; + } + } + if (target == null) { + throw new IllegalArgumentException("Cannot find RouteTemplate with id " + routeTemplateId); + } + + CollectionStringBuffer cbs = new CollectionStringBuffer(); + final Map<String, Object> prop = new HashMap(); + // include default values first from the template (and validate that we have inputs for all required parameters) + if (target.getTemplateParameters() != null) { + for (RouteTemplateParameterDefinition temp : target.getTemplateParameters()) { + if (temp.getDefaultValue() != null) { + prop.put(temp.getName(), temp.getDefaultValue()); + } else { + // this is a required parameter do we have that as input + if (!parameters.containsKey(temp.getName())) { + cbs.append(temp.getName()); + } + } + } + } + if (!cbs.isEmpty()) { + throw new IllegalArgumentException("Route template " + routeTemplateId + + " the following mandatory parameters must be provided: " + cbs.toString()); + } + // then override with user parameters + if (parameters != null) { + prop.putAll(parameters); + } + + RouteDefinition def = target.asRouteDefinition(); + if (routeId != null) { + def.setId(routeId); + } + def.setTemplateParameters(prop); + addRouteDefinition(def); + return def.getId(); + } + + @Override public synchronized List<RestDefinition> getRestDefinitions() { return restDefinitions; } diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXMLRoutesDefinitionLoader.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXMLRoutesDefinitionLoader.java index 904d50d..a50befb 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXMLRoutesDefinitionLoader.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/DisabledXMLRoutesDefinitionLoader.java @@ -29,6 +29,11 @@ public class DisabledXMLRoutesDefinitionLoader implements XMLRoutesDefinitionLoa } @Override + public Object loadRouteTemplatesDefinition(CamelContext context, InputStream inputStream) throws Exception { + throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-xml-io"); + } + + @Override public Object loadRestsDefinition(CamelContext context, InputStream inputStream) throws Exception { throw new UnsupportedOperationException("Please add a dependency to camel-quarkus-xml-io"); } diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java index 5066702..afd09ba 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java @@ -87,6 +87,17 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override + public String addRouteFromTemplate(String routeId, String routeTemplateId, Map<String, Object> parameters) + throws Exception { + return model.addRouteFromTemplate(routeId, routeTemplateId, parameters); + } + + @Override + public RouteTemplateParameterBuilder addRouteFromTemplate(String routeTemplateId) { + return new RouteTemplateParameterBuilder(this, routeTemplateId); + } + + @Override protected Registry createRegistry() { throw new UnsupportedOperationException(); } @@ -512,6 +523,36 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam } @Override + public List<RouteTemplateDefinition> getRouteTemplateDefinitions() { + return model.getRouteTemplateDefinitions(); + } + + @Override + public RouteTemplateDefinition getRouteTemplateDefinition(String id) { + return model.getRouteTemplateDefinition(id); + } + + @Override + public void addRouteTemplateDefinitions(Collection<RouteTemplateDefinition> routeTemplateDefinitions) throws Exception { + model.addRouteTemplateDefinitions(routeTemplateDefinitions); + } + + @Override + public void addRouteTemplateDefinition(RouteTemplateDefinition routeTemplateDefinition) throws Exception { + model.addRouteTemplateDefinition(routeTemplateDefinition); + } + + @Override + public void removeRouteTemplateDefinitions(Collection<RouteTemplateDefinition> routeTemplateDefinitions) throws Exception { + model.removeRouteTemplateDefinitions(routeTemplateDefinitions); + } + + @Override + public void removeRouteTemplateDefinition(RouteTemplateDefinition routeTemplateDefinition) throws Exception { + model.removeRouteTemplateDefinition(routeTemplateDefinition); + } + + @Override public List<RestDefinition> getRestDefinitions() { return model.getRestDefinitions(); } diff --git a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java index da9350b..9498cc1 100644 --- a/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java +++ b/extensions-core/main/runtime/src/main/java/org/apache/camel/quarkus/main/CamelMainRoutesCollector.java @@ -26,6 +26,7 @@ import org.apache.camel.ExtendedCamelContext; import org.apache.camel.RoutesBuilder; import org.apache.camel.RuntimeCamelException; import org.apache.camel.main.RoutesCollector; +import org.apache.camel.model.RouteTemplatesDefinition; import org.apache.camel.model.RoutesDefinition; import org.apache.camel.model.rest.RestsDefinition; import org.apache.camel.quarkus.core.RegistryRoutesLoader; @@ -87,6 +88,31 @@ public class CamelMainRoutesCollector implements RoutesCollector { } @Override + public List<RouteTemplatesDefinition> collectXmlRouteTemplatesFromDirectory(CamelContext camelContext, String directory) + throws Exception { + List<RouteTemplatesDefinition> answer = new ArrayList<>(); + PackageScanResourceResolver resolver = camelContext.adapt(ExtendedCamelContext.class).getPackageScanResourceResolver(); + + for (String part : directory.split(",")) { + LOGGER.info("Loading additional Camel XML route templates from: {}", part); + try { + for (InputStream is : resolver.findResources(part)) { + Object definition = xmlRoutesLoader.loadRouteTemplatesDefinition(camelContext, is); + if (definition instanceof RestsDefinition) { + answer.add((RouteTemplatesDefinition) definition); + } + } + } catch (FileNotFoundException e) { + LOGGER.debug("No XML route templates found in {}. Skipping XML route templates detection.", part); + } catch (Exception e) { + throw RuntimeCamelException.wrapRuntimeException(e); + } + } + + return answer; + } + + @Override public List<RestsDefinition> collectXmlRestsFromDirectory(CamelContext camelContext, String directory) { List<RestsDefinition> answer = new ArrayList<>(); PackageScanResourceResolver resolver = camelContext.adapt(ExtendedCamelContext.class).getPackageScanResourceResolver(); diff --git a/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java b/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java index 84029bc..34f58be 100644 --- a/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java +++ b/integration-tests-support/custom-routes-collector/runtime/src/main/java/org/apache/camel/quarkus/main/runtime/support/CustomRoutesCollector.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.camel.CamelContext; import org.apache.camel.RoutesBuilder; import org.apache.camel.main.RoutesCollector; +import org.apache.camel.model.RouteTemplatesDefinition; import org.apache.camel.model.RoutesDefinition; import org.apache.camel.model.rest.RestsDefinition; @@ -40,6 +41,12 @@ public class CustomRoutesCollector implements RoutesCollector { } @Override + public List<RouteTemplatesDefinition> collectXmlRouteTemplatesFromDirectory(CamelContext camelContext, String directory) + throws Exception { + return Collections.emptyList(); + } + + @Override public List<RestsDefinition> collectXmlRestsFromDirectory(CamelContext camelContext, String directory) throws Exception { return Collections.emptyList(); } diff --git a/pom.xml b/pom.xml index 1156791..3cfe70b 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ <awssdk1.version>1.11.714</awssdk1.version> <awssdk1-swf-libs.version>1.11.22</awssdk1-swf-libs.version> <awssdk2.version>2.13.33</awssdk2.version> - <camel.version>3.4.0</camel.version> + <camel.version>3.5.0-SNAPSHOT</camel.version> <debezium.version>1.2.0.Final</debezium.version> <elasticsearch.version>7.6.1</elasticsearch.version> <freemarker.version>2.3.30</freemarker.version>