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 a7b6683  CAMEL-16757: Route now stores correctly which route 
configuration it has been applied with.
a7b6683 is described below

commit a7b6683230435880b1620bd9609a02d1d51ebcb3
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Aug 4 13:13:19 2021 +0200

    CAMEL-16757: Route now stores correctly which route configuration it has 
been applied with.
---
 .../org/apache/camel/model/RoutesDefinition.java   | 47 +++++++++++++---------
 .../core/xml/AbstractCamelContextFactoryBean.java  | 47 +++++++++++++---------
 2 files changed, 54 insertions(+), 40 deletions(-)

diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
index 1df5154..02bd6be 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
@@ -32,6 +32,7 @@ import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.spi.AsEndpointUri;
 import org.apache.camel.spi.Metadata;
+import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.PatternHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -231,26 +232,32 @@ public class RoutesDefinition extends 
OptionalIdentifiedDefinition<RoutesDefinit
             List<RouteConfigurationDefinition> globalConfigurations
                     = 
getCamelContext().adapt(ModelCamelContext.class).getRouteConfigurationDefinitions();
             if (globalConfigurations != null) {
-                globalConfigurations.stream()
-                        // global configurations have no id assigned or is a 
wildcard
-                        // if the route has a route configuration assigned 
then use pattern matching
-                        .filter(g -> {
-                            if (route.getRouteConfigurationId() != null) {
-                                return PatternHelper.matchPattern(g.getId(), 
route.getRouteConfigurationId());
-                            } else {
-                                return g.getId() == null || 
g.getId().equals("*");
-                            }
-                        })
-                        .forEach(g -> {
-                            String id = g.getId() == null ? "<default>" : 
g.getId();
-                            // remember the id that was used on the route
-                            route.addAppliedRouteConfigurationId(id);
-                            oe.addAll(g.getOnExceptions());
-                            icp.addAll(g.getIntercepts());
-                            ifrom.addAll(g.getInterceptFroms());
-                            ito.addAll(g.getInterceptSendTos());
-                            oc.addAll(g.getOnCompletions());
-                        });
+                // if there are multiple ids configured then we should apply 
in that same order
+                String[] ids = route.getRouteConfigurationId() != null
+                        ? route.getRouteConfigurationId().split(",") : new 
String[] { "*" };
+                for (String id : ids) {
+                    // sort according to ordered
+                    
globalConfigurations.stream().sorted(OrderedComparator.get())
+                            .filter(g -> {
+                                if (route.getRouteConfigurationId() != null) {
+                                    // if the route has a route configuration 
assigned then use pattern matching
+                                    return 
PatternHelper.matchPattern(g.getId(), id);
+                                } else {
+                                    // global configurations have no id 
assigned or is a wildcard
+                                    return g.getId() == null || 
g.getId().equals(id);
+                                }
+                            })
+                            .forEach(g -> {
+                                String aid = g.getId() == null ? "<default>" : 
g.getId();
+                                // remember the id that was used on the route
+                                route.addAppliedRouteConfigurationId(aid);
+                                oe.addAll(g.getOnExceptions());
+                                icp.addAll(g.getIntercepts());
+                                ifrom.addAll(g.getInterceptFroms());
+                                ito.addAll(g.getInterceptSendTos());
+                                oc.addAll(g.getOnCompletions());
+                            });
+                }
             }
         }
 
diff --git 
a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
 
b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index ab8857b..5c717be 100644
--- 
a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ 
b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -134,6 +134,7 @@ import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.spi.Validator;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.ObjectHelper;
+import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy;
@@ -565,26 +566,32 @@ public abstract class AbstractCamelContextFactoryBean<T 
extends ModelCamelContex
                 List<RouteConfigurationDefinition> globalConfigurations
                         = 
getContext().adapt(ModelCamelContext.class).getRouteConfigurationDefinitions();
                 if (globalConfigurations != null) {
-                    globalConfigurations.stream()
-                            // global configurations have no id assigned or is 
a wildcard
-                            // if the route has a route configuration assigned 
then use pattern matching
-                            .filter(g -> {
-                                if (route.getRouteConfigurationId() != null) {
-                                    return 
PatternHelper.matchPattern(g.getId(), route.getRouteConfigurationId());
-                                } else {
-                                    return g.getId() == null || 
g.getId().equals("*");
-                                }
-                            })
-                            .forEach(g -> {
-                                String id = g.getId() == null ? "<default>" : 
g.getId();
-                                // remember the id that was used on the route
-                                route.addAppliedRouteConfigurationId(id);
-                                oe.addAll(g.getOnExceptions());
-                                icp.addAll(g.getIntercepts());
-                                ifrom.addAll(g.getInterceptFroms());
-                                ito.addAll(g.getInterceptSendTos());
-                                oc.addAll(g.getOnCompletions());
-                            });
+                    // if there are multiple ids configured then we should 
apply in that same order
+                    String[] ids = route.getRouteConfigurationId() != null
+                            ? route.getRouteConfigurationId().split(",") : new 
String[] { "*" };
+                    for (String id : ids) {
+                        // sort according to ordered
+                        
globalConfigurations.stream().sorted(OrderedComparator.get())
+                                .filter(g -> {
+                                    if (route.getRouteConfigurationId() != 
null) {
+                                        // if the route has a route 
configuration assigned then use pattern matching
+                                        return 
PatternHelper.matchPattern(g.getId(), id);
+                                    } else {
+                                        // global configurations have no id 
assigned or is a wildcard
+                                        return g.getId() == null || 
g.getId().equals(id);
+                                    }
+                                })
+                                .forEach(g -> {
+                                    String aid = g.getId() == null ? 
"<default>" : g.getId();
+                                    // remember the id that was used on the 
route
+                                    route.addAppliedRouteConfigurationId(aid);
+                                    oe.addAll(g.getOnExceptions());
+                                    icp.addAll(g.getIntercepts());
+                                    ifrom.addAll(g.getInterceptFroms());
+                                    ito.addAll(g.getInterceptSendTos());
+                                    oc.addAll(g.getOnCompletions());
+                                });
+                    }
                 }
             }
 

Reply via email to