This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch camel-master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 1474881d183c2761ca8f0835f3016824eca40465 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Aug 12 09:10:16 2020 +0200 CAMEL-14297: Introduce RouteBuilderConfigurer. --- .../quarkus/core/deployment/CamelProcessor.java | 3 + .../camel/quarkus/core/CamelContextRecorder.java | 10 +++ .../camel/quarkus/core/RegistryRoutesLoaders.java | 13 ++++ ...melMainRouteBuilderConfigurerDiscoveryTest.java | 74 ++++++++++++++++++++++ .../apache/camel/quarkus/core/CoreResource.java | 15 +++++ .../org/apache/camel/quarkus/core/CoreRoutes.java | 2 +- .../org/apache/camel/quarkus/core/CoreTest.java | 6 ++ 7 files changed, 122 insertions(+), 1 deletion(-) diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java index 728812d..870fa8d 100644 --- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java +++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelProcessor.java @@ -79,6 +79,8 @@ class CamelProcessor { "org.apache.camel.RoutesBuilder"); private static final DotName ROUTE_BUILDER_TYPE = DotName.createSimple( "org.apache.camel.builder.RouteBuilder"); + private static final DotName ROUTE_BUILDER_CONFIGURER_TYPE = DotName.createSimple( + "org.apache.camel.builder.RouteBuilderConfigurer"); private static final DotName ADVICE_WITH_ROUTE_BUILDER_TYPE = DotName.createSimple( "org.apache.camel.builder.AdviceWithRouteBuilder"); private static final DotName DATA_FORMAT_TYPE = DotName.createSimple( @@ -94,6 +96,7 @@ class CamelProcessor { private static final Set<DotName> UNREMOVABLE_BEANS_TYPES = CamelSupport.setOf( ROUTES_BUILDER_TYPE, + ROUTE_BUILDER_CONFIGURER_TYPE, DATA_FORMAT_TYPE, LANGUAGE_TYPE, COMPONENT_TYPE, diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java index 17cb43b..9a555ba 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelContextRecorder.java @@ -21,6 +21,8 @@ import io.quarkus.runtime.RuntimeValue; import io.quarkus.runtime.annotations.Recorder; import org.apache.camel.CamelContext; import org.apache.camel.RoutesBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.builder.RouteBuilderConfigurer; import org.apache.camel.catalog.RuntimeCamelCatalog; import org.apache.camel.spi.FactoryFinderResolver; import org.apache.camel.spi.ModelJAXBContextFactory; @@ -97,6 +99,14 @@ public class CamelContextRecorder { public void addRoutesFromContainer(RuntimeValue<CamelContext> context) { try { + for (RouteBuilderConfigurer builder : context.getValue().getRegistry().findByType(RouteBuilderConfigurer.class)) { + context.getValue().addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + builder.accept(this); + } + }); + } for (RoutesBuilder builder : context.getValue().getRegistry().findByType(RoutesBuilder.class)) { context.getValue().addRoutes(builder); } diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java index 2167689..2aa04f5 100644 --- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java +++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/RegistryRoutesLoaders.java @@ -24,6 +24,8 @@ import java.util.Set; import org.apache.camel.CamelContext; import org.apache.camel.RoutesBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.builder.RouteBuilderConfigurer; import org.apache.camel.util.AntPathMatcher; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; @@ -56,6 +58,17 @@ public final class RegistryRoutesLoaders { final List<RoutesBuilder> routes = new ArrayList<>(); final AntPathMatcher matcher = new AntPathMatcher(); + Set<RouteBuilderConfigurer> configurers = camelContext.getRegistry().findByType(RouteBuilderConfigurer.class); + for (RouteBuilderConfigurer configurer : configurers) { + RouteBuilder rb = new RouteBuilder() { + @Override + public void configure() throws Exception { + configurer.accept(this); + } + }; + routes.add(rb); + } + Set<RoutesBuilder> builders = camelContext.getRegistry().findByType(RoutesBuilder.class); for (RoutesBuilder routesBuilder : builders) { // filter out abstract classes diff --git a/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainRouteBuilderConfigurerDiscoveryTest.java b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainRouteBuilderConfigurerDiscoveryTest.java new file mode 100644 index 0000000..bbf9f3f --- /dev/null +++ b/extensions-core/main/deployment/src/test/java/org/apache/camel/quarkus/main/deployment/CamelMainRouteBuilderConfigurerDiscoveryTest.java @@ -0,0 +1,74 @@ +/* + * 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. + */ +package org.apache.camel.quarkus.main.deployment; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Properties; + +import javax.enterprise.inject.Produces; +import javax.inject.Inject; + +import io.quarkus.test.QuarkusUnitTest; +import org.apache.camel.builder.RouteBuilderConfigurer; +import org.apache.camel.quarkus.main.CamelMain; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.Asset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CamelMainRouteBuilderConfigurerDiscoveryTest { + @RegisterExtension + static final QuarkusUnitTest CONFIG = new QuarkusUnitTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addAsResource(applicationProperties(), "application.properties")); + + @Inject + CamelMain main; + + public static Asset applicationProperties() { + Writer writer = new StringWriter(); + + Properties props = new Properties(); + props.setProperty("quarkus.banner.enabled", "false"); + + try { + props.store(writer, ""); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return new StringAsset(writer.toString()); + } + + @Test + public void testRoutesDiscovery() { + assertThat(main.getCamelContext().getRoutes()).isNotEmpty(); + assertThat(main.configure().getRoutesBuilders()).isNotEmpty(); + } + + @Produces + public RouteBuilderConfigurer myRoute() { + return rb -> rb.from("direct:in").routeId("my-route").to("log:out"); + } + +} diff --git a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java index 21e5e80..af45a13 100644 --- a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java +++ b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreResource.java @@ -39,6 +39,8 @@ import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.ExtendedCamelContext; import org.apache.camel.NoSuchLanguageException; +import org.apache.camel.Route; +import org.apache.camel.builder.RouteBuilderConfigurer; import org.apache.camel.catalog.RuntimeCamelCatalog; import org.apache.camel.component.log.LogComponent; import org.apache.camel.model.ModelCamelContext; @@ -70,6 +72,19 @@ public class CoreResource { return result; } + @javax.enterprise.inject.Produces + public RouteBuilderConfigurer myOtherRoute() { + return rb -> rb.from("timer:bar").routeId("bar").to("log:bar"); + } + + @Path("/routes/lookup-routes") + @GET + @Produces(MediaType.TEXT_PLAIN) + public String lookupRoutes() { + // there should be 2 routes, the one with RouteBuilderConfigurer method above and from CoreRoutes.java + return context.getRoutes().stream().map(Route::getId).sorted().collect(Collectors.joining(",")); + } + @Path("/registry/lookup-registry") @GET @Produces(MediaType.TEXT_PLAIN) diff --git a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreRoutes.java b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreRoutes.java index e3bb7e3..4aa1678 100644 --- a/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreRoutes.java +++ b/integration-tests/core/src/main/java/org/apache/camel/quarkus/core/CoreRoutes.java @@ -23,7 +23,7 @@ public class CoreRoutes extends RouteBuilder { @Override public void configure() { from("timer:keep-alive") - .id("timer") + .routeId("timer") .setBody().constant("I'm alive !") .to("log:keep-alive"); diff --git a/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java index 42db9c8..f45b7f0 100644 --- a/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java +++ b/integration-tests/core/src/test/java/org/apache/camel/quarkus/core/CoreTest.java @@ -33,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; @QuarkusTest public class CoreTest { + @Test public void testContainerLookupFromRegistry() { RestAssured.when().get("/test/registry/lookup-registry").then().body(is("true")); @@ -40,6 +41,11 @@ public class CoreTest { } @Test + public void testLookupRoutes() { + RestAssured.when().get("/test/routes/lookup-routes").then().body(is("bar,timer")); + } + + @Test public void testCamelContextAwareRegistryBeansInitialized() { RestAssured.when().get("/test/registry/camel-context-aware/initialized").then().body(is("true")); }