This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new ff375a00060 feat: add a global route builder interceptors ff375a00060 is described below commit ff375a00060148926c321adb342ee4bd44f82e93 Author: Luca Burgazzoli <lburgazz...@gmail.com> AuthorDate: Wed Aug 17 11:01:32 2022 +0200 feat: add a global route builder interceptors --- .../org/apache/camel/builder/RouteBuilder.java | 9 ++- .../builder/RouteBuilderLifecycleStrategy.java | 16 ++++- .../org/apache/camel/builder/RouteBuilderTest.java | 69 ++++++++++++++++++++++ 3 files changed, 91 insertions(+), 3 deletions(-) diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java index 622b581e835..359bad8d584 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java @@ -18,6 +18,7 @@ package org.apache.camel.builder; import java.io.Reader; import java.util.ArrayList; +import java.util.Comparator; import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; @@ -665,7 +666,11 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory()); } - for (RouteBuilderLifecycleStrategy interceptor : lifecycleInterceptors) { + List<RouteBuilderLifecycleStrategy> strategies = new ArrayList<>(lifecycleInterceptors); + strategies.addAll(camelContext.getRegistry().findByType(RouteBuilderLifecycleStrategy.class)); + strategies.sort(Comparator.comparing(Ordered::getOrder)); + + for (RouteBuilderLifecycleStrategy interceptor : strategies) { interceptor.beforeConfigure(this); } @@ -679,7 +684,7 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild getRouteCollection().prepareRoute(route); } - for (RouteBuilderLifecycleStrategy interceptor : lifecycleInterceptors) { + for (RouteBuilderLifecycleStrategy interceptor : strategies) { interceptor.afterConfigure(this); } } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java index dc6b8d4f594..61af4c72ab3 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilderLifecycleStrategy.java @@ -16,10 +16,12 @@ */ package org.apache.camel.builder; +import org.apache.camel.Ordered; + /** * Strategy for {@link RouteBuilder} lifecycle notifications. */ -public interface RouteBuilderLifecycleStrategy { +public interface RouteBuilderLifecycleStrategy extends Ordered { /** * This method is invoked before the {@link RouteBuilder#configure()} method is invoked. */ @@ -31,4 +33,16 @@ public interface RouteBuilderLifecycleStrategy { */ default void afterConfigure(RouteBuilder builder) { } + + /** + * Gets the order. + * <p/> + * Default to {@link Ordered#LOWEST}. + * + * @return the order + */ + @Override + default int getOrder() { + return Ordered.LOWEST; + } } diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java index f5f6228e26e..183b91959f8 100644 --- a/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java @@ -19,6 +19,7 @@ package org.apache.camel.builder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import org.apache.camel.CamelContext; @@ -26,6 +27,7 @@ import org.apache.camel.Channel; import org.apache.camel.DelegateProcessor; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; +import org.apache.camel.Ordered; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.Route; @@ -579,4 +581,71 @@ public class RouteBuilderTest extends TestSupport { assertEquals(1, before.get()); assertEquals(1, after.get()); } + + @Test + public void testLifecycleInterceptorFromContext() throws Exception { + List<String> ordered = new ArrayList<>(); + + RouteBuilder builder = new RouteBuilder() { + public void configure() throws Exception { + } + }; + + builder.addLifecycleInterceptor(new RouteBuilderLifecycleStrategy() { + @Override + public void beforeConfigure(RouteBuilder builder) { + ordered.add("before-1"); + } + + @Override + public void afterConfigure(RouteBuilder builder) { + ordered.add("after-1"); + } + + @Override + public int getOrder() { + return Ordered.LOWEST - 2000; + } + }); + + builder.addLifecycleInterceptor(new RouteBuilderLifecycleStrategy() { + @Override + public void beforeConfigure(RouteBuilder builder) { + ordered.add("before-2"); + } + + @Override + public void afterConfigure(RouteBuilder builder) { + ordered.add("after-2"); + } + + @Override + public int getOrder() { + return Ordered.LOWEST; + } + }); + + try (DefaultCamelContext context = new DefaultCamelContext()) { + context.getRegistry().bind(UUID.randomUUID().toString(), new RouteBuilderLifecycleStrategy() { + @Override + public void beforeConfigure(RouteBuilder builder) { + ordered.add("before-3"); + } + + @Override + public void afterConfigure(RouteBuilder builder) { + ordered.add("after-3"); + } + + @Override + public int getOrder() { + return Ordered.HIGHEST; + } + }); + + context.addRoutes(builder); + + assertEquals(ordered, List.of("before-3", "before-1", "before-2", "after-3", "after-1", "after-2")); + } + } }