This is an automated email from the ASF dual-hosted git repository.

davsclaus 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 4a8071924de CAMEL-22126: camel-core - Add API to get routes by group id
4a8071924de is described below

commit 4a8071924de8ecf381e1d7c0cac24fec9b9843be
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Fri May 30 15:51:58 2025 +0200

    CAMEL-22126: camel-core - Add API to get routes by group id
---
 .../main/java/org/apache/camel/CamelContext.java    | 17 +++++++++++++++++
 .../camel/impl/engine/AbstractCamelContext.java     | 21 +++++++++++++++++++++
 .../camel/impl/engine/DefaultCamelContextTest.java  | 21 +++++++++++++++++++++
 .../camel/api/management/ManagedCamelContext.java   | 12 ++++++++++--
 .../camel/management/ManagedCamelContextImpl.java   | 21 +++++++++++++++------
 .../camel/management/ManagedCamelContextTest.java   | 14 ++++++++++----
 6 files changed, 94 insertions(+), 12 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java 
b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
index 2911a3f8755..7d41a6766d2 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContext.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import org.apache.camel.clock.EventClock;
 import org.apache.camel.spi.CamelContextNameStrategy;
@@ -507,6 +508,22 @@ public interface CamelContext extends 
CamelContextLifecycle, RuntimeConfiguratio
      */
     List<Route> getRoutes();
 
+    /**
+     * To get all the routes that matches the filter.
+     *
+     * @param  filter to filter to include only accepted routes
+     * @return        the routes that matched the filter
+     */
+    List<Route> getRoutes(Predicate<Route> filter);
+
+    /**
+     * Gets the routes for the given group
+     *
+     * @param  groupId the id of the group
+     * @return         the routes or an empty list if no routes exists for the 
given group id
+     */
+    List<Route> getRoutesByGroup(String groupId);
+
     /**
      * Returns the total number of routes in this CamelContext
      */
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 0adfb36d59d..0fddc3ac0ac 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -963,6 +963,27 @@ public abstract class AbstractCamelContext extends 
BaseService
         }
     }
 
+    @Override
+    public List<Route> getRoutes(Predicate<Route> filter) {
+        routesLock.lock();
+        try {
+            List<Route> answer = new ArrayList<>();
+            for (Route route : getRoutes()) {
+                if (filter.test(route)) {
+                    answer.add(route);
+                }
+            }
+            return answer;
+        } finally {
+            routesLock.unlock();
+        }
+    }
+
+    @Override
+    public List<Route> getRoutesByGroup(String groupId) {
+        return getRoutes(f -> groupId.equals(f.getGroup()));
+    }
+
     @Override
     public int getRoutesSize() {
         return routes.size();
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
index 0d137577311..6f76552dd33 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/engine/DefaultCamelContextTest.java
@@ -303,6 +303,27 @@ public class DefaultCamelContextTest extends TestSupport {
         ctx.stop();
     }
 
+    @Test
+    public void testGetRouteByFilter() throws Exception {
+        DefaultCamelContext ctx = new DefaultCamelContext(false);
+        ctx.disableJMX();
+
+        ctx.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start").group("cheese").to("mock:result");
+                from("direct:start2").group("cheese").to("mock:result2");
+                from("direct:start3").to("mock:result3");
+            }
+        });
+        ctx.start();
+
+        assertEquals(2, ctx.getRoutesByGroup("cheese").size());
+        assertEquals(1, ctx.getRoutes(f -> f.getGroup() == null).size());
+
+        ctx.stop();
+    }
+
     @Test
     public void testSuspend() {
         DefaultCamelContext ctx = new DefaultCamelContext(false);
diff --git 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java
 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java
index 02b33095543..1b39eb83538 100644
--- 
a/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java
+++ 
b/core/camel-management-api/src/main/java/org/apache/camel/api/management/ManagedCamelContext.java
@@ -16,14 +16,14 @@
  */
 package org.apache.camel.api.management;
 
+import java.util.List;
+
 import org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
 import org.apache.camel.api.management.mbean.ManagedConsumerMBean;
 import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
 import org.apache.camel.api.management.mbean.ManagedRouteMBean;
 import org.apache.camel.api.management.mbean.ManagedStepMBean;
 
-import java.util.List;
-
 public interface ManagedCamelContext {
 
     /**
@@ -88,6 +88,14 @@ public interface ManagedCamelContext {
      */
     List<ManagedRouteMBean> getManagedRoutes();
 
+    /**
+     * Gets all the managed routes for the given group
+     *
+     * @param  groupId the group id
+     * @return         the routes or an empty list if no routes exists for the 
group
+     */
+    List<ManagedRouteMBean> getManagedRoutesByGroup(String groupId);
+
     /**
      * Gets the managed consumer client api from any of the routes which with 
the given route id
      *
diff --git 
a/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
 
b/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
index 6ce6925fe84..629825f8a84 100644
--- 
a/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
+++ 
b/core/camel-management/src/main/java/org/apache/camel/management/ManagedCamelContextImpl.java
@@ -124,6 +124,12 @@ public class ManagedCamelContextImpl implements 
ManagedCamelContext {
 
     @Override
     public List<ManagedRouteMBean> getManagedRoutes() {
+        // null group will return all
+        return getManagedRoutesByGroup(null);
+    }
+
+    @Override
+    public List<ManagedRouteMBean> getManagedRoutesByGroup(String groupId) {
         // jmx must be enabled
         if (getManagementStrategy().getManagementAgent() == null) {
             return null;
@@ -131,12 +137,15 @@ public class ManagedCamelContextImpl implements 
ManagedCamelContext {
 
         List<ManagedRouteMBean> answer = new ArrayList<>();
         for (Route route : camelContext.getRoutes()) {
-            try {
-                ObjectName on = 
getManagementStrategy().getManagementObjectNameStrategy().getObjectNameForRoute(route);
-                ManagedRouteMBean mr = 
getManagementStrategy().getManagementAgent().newProxyClient(on, 
ManagedRouteMBean.class);
-                answer.add(mr);
-            } catch (MalformedObjectNameException e) {
-                throw RuntimeCamelException.wrapRuntimeCamelException(e);
+            if (groupId == null || groupId.equals(route.getGroup())) {
+                try {
+                    ObjectName on = 
getManagementStrategy().getManagementObjectNameStrategy().getObjectNameForRoute(route);
+                    ManagedRouteMBean mr
+                            = 
getManagementStrategy().getManagementAgent().newProxyClient(on, 
ManagedRouteMBean.class);
+                    answer.add(mr);
+                } catch (MalformedObjectNameException e) {
+                    throw RuntimeCamelException.wrapRuntimeCamelException(e);
+                }
             }
         }
         return answer;
diff --git 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
index df72f03f8fb..f529f60dfae 100644
--- 
a/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
+++ 
b/core/camel-management/src/test/java/org/apache/camel/management/ManagedCamelContextTest.java
@@ -71,6 +71,10 @@ public class ManagedCamelContextTest extends 
ManagementTestSupport {
 
         List<ManagedRouteMBean> routes
                 = 
context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class).getManagedRoutes();
+        assertEquals(3, routes.size());
+
+        routes = 
context.getCamelContextExtension().getContextPlugin(ManagedCamelContext.class)
+                .getManagedRoutesByGroup("cheese");
         assertEquals(2, routes.size());
     }
 
@@ -106,10 +110,10 @@ public class ManagedCamelContextTest extends 
ManagementTestSupport {
         assertEquals(Boolean.FALSE, logMask);
 
         Integer total = (Integer) mbeanServer.getAttribute(on, "TotalRoutes");
-        assertEquals(2, total.intValue());
+        assertEquals(3, total.intValue());
 
         Integer started = (Integer) mbeanServer.getAttribute(on, 
"StartedRoutes");
-        assertEquals(2, started.intValue());
+        assertEquals(3, started.intValue());
 
         // invoke operations
         MockEndpoint mock = getMockEndpoint("mock:result");
@@ -268,11 +272,13 @@ public class ManagedCamelContextTest extends 
ManagementTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                from("direct:start")
+                from("direct:start").group("cheese")
                         .delay(10)
                         .to("mock:result");
 
-                from("direct:foo")
+                from("direct:bar").to("mock:bar");
+
+                from("direct:foo").group("cheese")
                         .delay(10)
                         .transform(constant("Bye World")).id("myTransform");
             }

Reply via email to