This is an automated email from the ASF dual-hosted git repository. nfilotto pushed a commit to branch 2.16.x in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit fa5fd0cae16ae7ee0254a06c06d85781c1a4873c Author: Nicolas Filotto <nfilo...@talend.com> AuthorDate: Fri Apr 7 15:48:05 2023 +0200 Ref #4749 - java-joor-dsl - Add templated route support to native mode --- .../java/joor/deployment/JavaJoorDslProcessor.java | 10 +++++++- .../dsl/java/joor/runtime/JavaJoorDslRecorder.java | 14 ++++++++-- .../resources/routes/MyRoutesWithTemplate.java | 27 +++++++++++++++++++ .../src/main/resources/routes/MyTemplate.java | 30 ++++++++++++++++++++++ .../quarkus/dsl/java/joor/JavaJoorDslTest.java | 4 +-- 5 files changed, 80 insertions(+), 5 deletions(-) diff --git a/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java b/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java index b52818dc46..c2d2cf3bb0 100644 --- a/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java +++ b/extensions/java-joor-dsl/deployment/src/main/java/org/apache/camel/quarkus/dsl/java/joor/deployment/JavaJoorDslProcessor.java @@ -19,6 +19,7 @@ package org.apache.camel.quarkus.dsl.java.joor.deployment; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,6 +43,7 @@ import io.quarkus.paths.PathCollection; import io.quarkus.runtime.RuntimeValue; import io.quarkus.runtime.annotations.RegisterForReflection; import org.apache.camel.CamelContext; +import org.apache.camel.RoutesBuilder; import org.apache.camel.dsl.java.joor.CompilationUnit; import org.apache.camel.dsl.java.joor.MultiCompile; import org.apache.camel.quarkus.core.deployment.main.CamelMainHelper; @@ -208,8 +210,14 @@ public class JavaJoorDslProcessor { CamelContextBuildItem context, JavaJoorDslRecorder recorder) throws Exception { RuntimeValue<CamelContext> camelContext = context.getCamelContext(); + List<RoutesBuilder> builders = new ArrayList<>(classes.size()); + // Register routes first for (JavaJoorGeneratedClassBuildItem clazz : classes) { - recorder.registerRoutesBuilder(camelContext, clazz.getName(), clazz.getLocation()); + builders.add(recorder.registerRoutes(camelContext, clazz.getName(), clazz.getLocation())); + } + // Then register templated routes + for (RoutesBuilder builder : builders) { + recorder.registerTemplatedRoutes(camelContext, builder); } } diff --git a/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java b/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java index 4a309eceb4..315e6e4cfe 100644 --- a/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java +++ b/extensions/java-joor-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/java/joor/runtime/JavaJoorDslRecorder.java @@ -35,7 +35,8 @@ public class JavaJoorDslRecorder { private static final Logger LOG = LoggerFactory.getLogger(JavaJoorDslRecorder.class); - public void registerRoutesBuilder(RuntimeValue<CamelContext> context, String className, String location) throws Exception { + public RoutesBuilder registerRoutes(RuntimeValue<CamelContext> context, String className, String location) + throws Exception { Class<?> clazz = Class.forName(className); boolean skip = clazz.isInterface() || Modifier.isAbstract(clazz.getModifiers()) || Modifier.isPrivate(clazz.getModifiers()); @@ -49,7 +50,9 @@ public class JavaJoorDslRecorder { // inject context and resource CamelContextAware.trySetCamelContext(obj, context.getValue()); ResourceAware.trySetResource(obj, ResourceHelper.fromString(location, "")); - context.getValue().addRoutes((RoutesBuilder) obj); + RoutesBuilder builder = (RoutesBuilder) obj; + context.getValue().addRoutes(builder); + return builder; } else { LOG.warn("Ignoring the class {} as it is not of type RoutesBuilder", className); } @@ -59,5 +62,12 @@ public class JavaJoorDslRecorder { } else { LOG.warn("Ignoring the class {} as it cannot be instantiated with the default constructor", className); } + return null; + } + + public void registerTemplatedRoutes(RuntimeValue<CamelContext> camelContext, RoutesBuilder builder) throws Exception { + if (builder != null) { + camelContext.getValue().addTemplatedRoutes(builder); + } } } diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithTemplate.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithTemplate.java new file mode 100644 index 0000000000..4b836f0190 --- /dev/null +++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyRoutesWithTemplate.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import org.apache.camel.builder.RouteBuilder; + +public class MyRoutesWithTemplate extends RouteBuilder { + @Override + public void configure() throws Exception { + templatedRoute("someTemplate") + .routeId("routes-with-template") + .parameter("id", "routes-with-template") + .parameter("body", "Hi PK"); + } +} diff --git a/integration-tests/java-joor-dsl/src/main/resources/routes/MyTemplate.java b/integration-tests/java-joor-dsl/src/main/resources/routes/MyTemplate.java new file mode 100644 index 0000000000..0e4fe84f66 --- /dev/null +++ b/integration-tests/java-joor-dsl/src/main/resources/routes/MyTemplate.java @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import org.apache.camel.builder.RouteBuilder; + +public class MyTemplate extends RouteBuilder { + @Override + public void configure() throws Exception { + routeTemplate("someTemplate") + .templateParameter("id") + .templateParameter("body") + .route() + .from("direct:{{id}}") + .setBody().constant("{{body}}") + .setBody().simple("${body.endsWith('PK')}"); + } +} diff --git a/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java b/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java index 38998a3cb5..767196aeaf 100644 --- a/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java +++ b/integration-tests/java-joor-dsl/src/test/java/org/apache/camel/quarkus/dsl/java/joor/JavaJoorDslTest.java @@ -76,13 +76,13 @@ class JavaJoorDslTest { .then() .statusCode(200) .body(CoreMatchers.is( - "inner-classes-route,my-java-route,reflection-route,routes-with-bean,routes-with-inner-bean,routes-with-nested-class,routes-with-rest,routes-with-rest-get")); + "inner-classes-route,my-java-route,reflection-route,routes-with-bean,routes-with-inner-bean,routes-with-nested-class,routes-with-rest,routes-with-rest-get,routes-with-template")); RestAssured.given() .get("/java-joor-dsl/main/successful/routes") .then() .statusCode(200) - .body(CoreMatchers.is("3")); + .body(CoreMatchers.is("4")); } @Test