You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2022/08/17 11:33:22 UTC

[camel] branch main updated: feat: add a global route builder interceptors

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 <lb...@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"));
+        }
+    }
 }