Author: davsclaus
Date: Wed Oct 24 12:58:51 2012
New Revision: 1401660

URL: http://svn.apache.org/viewvc?rev=1401660&view=rev
Log:
CAMEL-5739: Camel validates when starting routes that any custom assigned ids 
on the route models is unique. As this is required to be unique within each 
CamelContext.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1401660&r1=1401659&r2=1401660&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
 Wed Oct 24 12:58:51 2012
@@ -1971,9 +1971,6 @@ public class DefaultCamelContext extends
     }
 
     private boolean doCheckStartupOrderClash(DefaultRouteStartupOrder answer, 
Map<Integer, DefaultRouteStartupOrder> inputs) throws 
FailedToStartRouteException {
-        // TODO: There could potential be routeId clash as well, so we should 
check for that as well
-
-
         // check for clash by startupOrder id
         DefaultRouteStartupOrder other = inputs.get(answer.getStartupOrder());
         if (other != null && answer != other) {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java?rev=1401660&r1=1401659&r2=1401660&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
 Wed Oct 24 12:58:51 2012
@@ -137,7 +137,17 @@ public final class ProcessorDefinitionHe
         }
     }
 
-    public static Set<String> getAllIDs(ProcessorDefinition<?> node, 
Set<String> set, boolean onlyCustomId, boolean includeAbstract) {
+    /**
+     * Traverses the node, including its children (recursive), and gathers all 
the node ids.
+     *
+     * @param node  the target node
+     * @param set   set to store ids, if <tt>null</tt> a new set will be 
created
+     * @param onlyCustomId  whether to only store custom assigned ids (ie. 
{@link 
org.apache.camel.model.OptionalIdentifiedDefinition#hasCustomIdAssigned()}
+     * @param includeAbstract whether to include abstract nodes (ie. {@link 
org.apache.camel.model.ProcessorDefinition#isAbstract()}
+     * @return the set with the found ids.
+     */
+    public static Set<String> gatherAllNodeIds(ProcessorDefinition<?> node, 
Set<String> set,
+                                               boolean onlyCustomId, boolean 
includeAbstract) {
         if (node == null) {
             return set;
         }
@@ -163,7 +173,7 @@ public final class ProcessorDefinitionHe
         if (children != null && !children.isEmpty()) {
             for (ProcessorDefinition child : children) {
                 // traverse children also
-                getAllIDs(child, set, onlyCustomId, includeAbstract);
+                gatherAllNodeIds(child, set, onlyCustomId, includeAbstract);
             }
         }
 

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java?rev=1401660&r1=1401659&r2=1401660&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
 Wed Oct 24 12:58:51 2012
@@ -17,13 +17,11 @@
 package org.apache.camel.model;
 
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.FailedToStartRouteException;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.EndpointHelper;
@@ -45,10 +43,10 @@ public final class RouteDefinitionHelper
      * Validates that the target route has no duplicate id's from any of the 
existing routes.
      *
      * @param target  the target route
-     * @param routes  the other routes
-     * @return <tt>null</tt> if no duplicate id's detected, otherwise the 
duplicate id is returned.
+     * @param routes  the existing routes
+     * @return <tt>null</tt> if no duplicate id's detected, otherwise the 
first found duplicate id is returned.
      */
-    public static String validateUniqueIds(RouteDefinition target, 
List<RouteDefinition> routes) throws FailedToStartRouteException {
+    public static String validateUniqueIds(RouteDefinition target, 
List<RouteDefinition> routes) {
         Set<String> routesIds = new LinkedHashSet<String>();
         // gather all ids for the existing route, but only include custom ids, 
and no abstract ids
         // as abstract nodes is cross-cutting functionality such as 
interceptors etc
@@ -57,13 +55,13 @@ public final class RouteDefinitionHelper
             if (route == target) {
                 continue;
             }
-            ProcessorDefinitionHelper.getAllIDs(route, routesIds, true, false);
+            ProcessorDefinitionHelper.gatherAllNodeIds(route, routesIds, true, 
false);
         }
 
         // gather all ids for the target route, but only include custom ids, 
and no abstract ids
         // as abstract nodes is cross-cutting functionality such as 
interceptors etc
         Set<String> targetIds = new LinkedHashSet<String>();
-        ProcessorDefinitionHelper.getAllIDs(target, targetIds, true, false);
+        ProcessorDefinitionHelper.gatherAllNodeIds(target, targetIds, true, 
false);
 
         // now check for clash with the target route
         for (String id : targetIds) {


Reply via email to