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

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 64abe1998255c41f5a5c83d9c75850126f578348
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Mon May 20 18:16:53 2019 +0200

    [CAMEL-13371] small refactorings on RouteContext and reifiers
---
 .../hystrix/processor/HystrixReifier.java          |  3 +--
 .../apache/camel/spring/EndpointReferenceTest.java |  2 +-
 .../java/org/apache/camel/spi/RouteContext.java    | 20 ++++++---------
 .../org/apache/camel/impl/DefaultRouteContext.java | 29 ++++++++++++++++------
 .../java/org/apache/camel/impl/RouteService.java   |  5 ++--
 .../apache/camel/model/OnCompletionDefinition.java | 19 --------------
 .../apache/camel/model/OnExceptionDefinition.java  | 18 --------------
 .../errorhandler/ErrorHandlerSupport.java          |  2 +-
 .../errorhandler/RedeliveryErrorHandler.java       |  6 ++---
 .../apache/camel/reifier/OnCompletionReifier.java  |  4 +--
 .../apache/camel/reifier/OnExceptionReifier.java   |  5 ++--
 .../org/apache/camel/reifier/ProcessorReifier.java | 11 +++++---
 .../java/org/apache/camel/reifier/StepReifier.java |  3 +--
 13 files changed, 50 insertions(+), 77 deletions(-)

diff --git 
a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
 
b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
index a0d2981..a3c24e3 100644
--- 
a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
+++ 
b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
@@ -27,7 +27,6 @@ import com.netflix.hystrix.HystrixCommandProperties;
 import com.netflix.hystrix.HystrixThreadPoolKey;
 import com.netflix.hystrix.HystrixThreadPoolProperties;
 import org.apache.camel.CamelContext;
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.HystrixDefinition;
@@ -56,7 +55,7 @@ public class HystrixReifier extends 
ProcessorReifier<HystrixDefinition> {
         }
 
         final HystrixConfigurationDefinition config = 
buildHystrixConfiguration(routeContext.getCamelContext());
-        final String id = 
definition.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
+        final String id = getId(definition, routeContext);
 
         // group and thread pool keys to use they can be configured on 
configRef and config, so look there first, and if none then use default
         String groupKey = config.getGroupKey();
diff --git 
a/components/camel-spring/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java
 
b/components/camel-spring/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java
index 8e68565..d172ef5 100644
--- 
a/components/camel-spring/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java
+++ 
b/components/camel-spring/src/test/java/org/apache/camel/spring/EndpointReferenceTest.java
@@ -74,7 +74,7 @@ public class EndpointReferenceTest extends SpringTestSupport {
     @Test
     public void testReferenceEndpointFromOtherCamelContext() throws Exception {
         CamelContext context = applicationContext.getBean("camel2", 
CamelContext.class);
-        RouteContext routeContext = new DefaultRouteContext(context, new 
RouteDefinition("temporary"), null);
+        RouteContext routeContext = new DefaultRouteContext(context, new 
RouteDefinition("temporary"));
         try {
             routeContext.resolveEndpoint(null, "endpoint1");
             fail("Should have thrown exception");
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
index ba8d9c6..f931785 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
@@ -199,18 +199,6 @@ public interface RouteContext extends 
RuntimeConfiguration, EndpointAware {
 
     Integer getStartupOrder();
 
-    /**
-     * A private counter that increments, is used to as book keeping
-     * when building a route based on the model
-     * <p/>
-     * We need this special book keeping be able to assign the correct
-     * {@link org.apache.camel.model.ProcessorDefinition} to the {@link 
org.apache.camel.Channel}
-     *
-     * @param node the current node
-     * @return the current count
-     */
-    int getAndIncrement(NamedNode node);
-
     ErrorHandlerFactory getErrorHandlerFactory();
 
     /**
@@ -249,4 +237,12 @@ public interface RouteContext extends 
RuntimeConfiguration, EndpointAware {
     default void setRouteController(RouteController controller) {
     }
 
+    Processor getOnCompletion(String onCompletionId);
+
+    void setOnCompletion(String onCompletionId, Processor processor);
+
+    Processor getOnException(String onExceptionId);
+
+    void setOnException(String onExceptionId, Processor processor);
+
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java 
b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
index 6df3b2a..a64cd54 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -54,7 +53,6 @@ import org.apache.camel.support.CamelContextHelper;
  * The context used to activate new routing rules
  */
 public class DefaultRouteContext implements RouteContext {
-    private final Map<NamedNode, AtomicInteger> nodeIndex = new HashMap<>();
     private final RouteDefinition route;
     private final String routeId;
     private Route runtimeRoute;
@@ -77,6 +75,8 @@ public class DefaultRouteContext implements RouteContext {
     private ShutdownRunningTask shutdownRunningTask;
     private RouteError routeError;
     private RouteController routeController;
+    private final Map<String, Processor> onCompletions = new HashMap<>();
+    private final Map<String, Processor> onExceptions = new HashMap<>();
 
     public DefaultRouteContext(CamelContext camelContext, RouteDefinition 
route) {
         this.camelContext = camelContext;
@@ -464,11 +464,6 @@ public class DefaultRouteContext implements RouteContext {
             return getCamelContext().getShutdownRunningTask();
         }
     }
-    
-    public int getAndIncrement(NamedNode node) {
-        AtomicInteger count = nodeIndex.computeIfAbsent(node, n -> new 
AtomicInteger());
-        return count.getAndIncrement();
-    }
 
     public void setRoutePolicyList(List<RoutePolicy> routePolicyList) {
         this.routePolicyList = routePolicyList;
@@ -497,4 +492,24 @@ public class DefaultRouteContext implements RouteContext {
     public void setRouteController(RouteController routeController) {
         this.routeController = routeController;
     }
+
+    @Override
+    public Processor getOnCompletion(String onCompletionId) {
+        return onCompletions.get(onCompletionId);
+    }
+
+    @Override
+    public void setOnCompletion(String onCompletionId, Processor processor) {
+        onCompletions.put(onCompletionId, processor);
+    }
+
+    @Override
+    public Processor getOnException(String onExceptionId) {
+        return onExceptions.get(onExceptionId);
+    }
+
+    @Override
+    public void setOnException(String onExceptionId, Processor processor) {
+        onExceptions.put(onExceptionId, processor);
+    }
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java 
b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
index 9cde665..1551af6 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/RouteService.java
@@ -88,11 +88,12 @@ public class RouteService extends BaseRouteService {
      * Gather all other kind of route scoped services from the given route, 
except error handler
      */
     protected void doGetRouteScopedServices(List<Service> services) {
+
         for (ProcessorDefinition<?> output : routeDefinition.getOutputs()) {
             if (output instanceof OnExceptionDefinition) {
                 OnExceptionDefinition onExceptionDefinition = 
(OnExceptionDefinition) output;
                 if (onExceptionDefinition.isRouteScoped()) {
-                    Processor errorHandler = 
onExceptionDefinition.getErrorHandler(getId());
+                    Processor errorHandler = 
getRouteContext().getOnException(onExceptionDefinition.getId());
                     if (errorHandler instanceof Service) {
                         services.add((Service) errorHandler);
                     }
@@ -100,7 +101,7 @@ public class RouteService extends BaseRouteService {
             } else if (output instanceof OnCompletionDefinition) {
                 OnCompletionDefinition onCompletionDefinition = 
(OnCompletionDefinition) output;
                 if (onCompletionDefinition.isRouteScoped()) {
-                    Processor onCompletionProcessor = 
onCompletionDefinition.getOnCompletion(getId());
+                    Processor onCompletionProcessor = 
getRouteContext().getOnCompletion(onCompletionDefinition.getId());
                     if (onCompletionProcessor instanceof Service) {
                         services.add((Service) onCompletionProcessor);
                     }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
 
b/core/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
index 0c6b959..b7b43f0 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java
@@ -17,11 +17,8 @@
 package org.apache.camel.model;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -33,7 +30,6 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.Predicate;
-import org.apache.camel.Processor;
 import org.apache.camel.spi.AsPredicate;
 import org.apache.camel.spi.Metadata;
 
@@ -64,9 +60,6 @@ public class OnCompletionDefinition extends 
ProcessorDefinition<OnCompletionDefi
     private ExecutorService executorService;
     @XmlTransient
     private Boolean routeScoped;
-    // TODO: in Camel 3.0 the OnCompletionDefinition should not contain state 
and OnCompletion processors
-    @XmlTransient
-    private final Map<String, Processor> onCompletions = new HashMap<>();
 
     public OnCompletionDefinition() {
     }
@@ -80,18 +73,6 @@ public class OnCompletionDefinition extends 
ProcessorDefinition<OnCompletionDefi
         return routeScoped;
     }
 
-    public Processor getOnCompletion(String routeId) {
-        return onCompletions.get(routeId);
-    }
-
-    public Collection<Processor> getOnCompletions() {
-        return onCompletions.values();
-    }
-
-    public void setOnCompletion(String routeId, Processor processor) {
-        onCompletions.put(routeId, processor);
-    }
-
     @Override
     public String toString() {
         return "onCompletion[" + getOutputs() + "]";
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
 
b/core/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
index c8c32cf..87bb2eb 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/model/OnExceptionDefinition.java
@@ -17,10 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -83,9 +80,6 @@ public class OnExceptionDefinition extends 
ProcessorDefinition<OnExceptionDefini
     private Processor onExceptionOccurred;
     @XmlTransient
     private Boolean routeScoped;
-    // TODO: in Camel 3.0 the OnExceptionDefinition should not contain state 
and ErrorHandler processors
-    @XmlTransient
-    private final Map<String, Processor> errorHandlers = new HashMap<>();
 
     public OnExceptionDefinition() {
     }
@@ -733,18 +727,6 @@ public class OnExceptionDefinition extends 
ProcessorDefinition<OnExceptionDefini
         this.exceptions = exceptions;
     }
 
-    public Processor getErrorHandler(String routeId) {
-        return errorHandlers.get(routeId);
-    }
-    
-    public Collection<Processor> getErrorHandlers() {
-        return errorHandlers.values();
-    }
-
-    public void setErrorHandler(String routeId, Processor errorHandler) {
-        errorHandlers.put(routeId, errorHandler);
-    }
-
     public RedeliveryPolicyDefinition getRedeliveryPolicyType() {
         return redeliveryPolicyType;
     }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
 
b/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
index b164240..dfa1ebc 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
@@ -46,7 +46,7 @@ public abstract class ErrorHandlerSupport extends 
ChildServiceSupport implements
     public void addExceptionPolicy(RouteContext routeContext, 
OnExceptionDefinition exceptionType) {
         if (routeContext != null) {
             // add error handler as child service so they get lifecycle handled
-            Processor errorHandler = 
exceptionType.getErrorHandler(routeContext.getRouteId());
+            Processor errorHandler = 
routeContext.getOnException(exceptionType.getId());
             if (errorHandler != null) {
                 addChildService(errorHandler);
             }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
 
b/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index f65cb63..754c990 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -676,13 +676,11 @@ public abstract class RedeliveryErrorHandler extends 
ErrorHandlerSupport impleme
                 Processor processor = null;
                 UnitOfWork uow = exchange.getUnitOfWork();
                 if (uow != null && uow.getRouteContext() != null) {
-                    String routeId = uow.getRouteContext().getRouteId();
-                    processor = exceptionPolicy.getErrorHandler(routeId);
-                } else if (!exceptionPolicy.getErrorHandlers().isEmpty()) {
+                    processor = 
uow.getRouteContext().getOnException(exceptionPolicy.getId());
+                } else {
                     // note this should really not happen, but we have this 
code as a fail safe
                     // to be backwards compatible with the old behavior
                     log.warn("Cannot determine current route from Exchange 
with id: {}, will fallback and use first error handler.", 
exchange.getExchangeId());
-                    processor = 
exceptionPolicy.getErrorHandlers().iterator().next();
                 }
                 if (processor != null) {
                     failureProcessor = processor;
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
 
b/core/camel-core/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
index 6662037..5db1ece 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
@@ -60,15 +60,13 @@ class OnCompletionReifier extends 
ProcessorReifier<OnCompletionDefinition> {
             routeContext.setAllowUseOriginalMessage(true);
         }
 
-        String routeId = routeContext.getRouteId();
-
         Processor childProcessor = this.createChildProcessor(routeContext, 
true);
 
         // wrap the on completion route in a unit of work processor
         CamelInternalProcessor internal = new 
CamelInternalProcessor(childProcessor);
         internal.addAdvice(new 
CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext));
 
-        definition.setOnCompletion(routeId, internal);
+        routeContext.setOnCompletion(getId(definition, routeContext), 
internal);
 
         Predicate when = null;
         if (definition.getOnWhen() != null) {
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
 
b/core/camel-core/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
index e958fb4..98d19f8 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
@@ -24,7 +24,6 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.processor.CatchProcessor;
 import org.apache.camel.processor.FatalFallbackErrorHandler;
 import org.apache.camel.spi.ClassResolver;
@@ -68,8 +67,8 @@ class OnExceptionReifier extends 
ProcessorReifier<OnExceptionDefinition> {
         if (child != null) {
             // wrap in our special safe fallback error handler if OnException 
have child output
             Processor errorHandler = new FatalFallbackErrorHandler(child);
-            String id = routeContext.getRouteId();
-            definition.setErrorHandler(id, errorHandler);
+            String id = getId(definition, routeContext);
+            routeContext.setOnException(id, errorHandler);
         }
         // lookup the error handler builder
         ErrorHandlerBuilder builder = (ErrorHandlerBuilder) 
routeContext.getErrorHandlerFactory();
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java 
b/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 9d1b615..891ca43 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -55,6 +55,7 @@ import org.apache.camel.model.MulticastDefinition;
 import org.apache.camel.model.OnCompletionDefinition;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.model.OnFallbackDefinition;
+import org.apache.camel.model.OptionalIdentifiedDefinition;
 import org.apache.camel.model.OtherwiseDefinition;
 import org.apache.camel.model.PipelineDefinition;
 import org.apache.camel.model.PolicyDefinition;
@@ -105,6 +106,7 @@ import org.apache.camel.processor.interceptor.HandleFault;
 import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.LifecycleStrategy;
+import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.spi.RouteContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -450,7 +452,7 @@ public abstract class ProcessorReifier<T extends 
ProcessorDefinition<?>> {
 
             // inject id
             if (processor instanceof IdAware) {
-                String id = 
output.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
+                String id = getId(output, routeContext);
                 ((IdAware) processor).setId(id);
             }
 
@@ -541,7 +543,7 @@ public abstract class ProcessorReifier<T extends 
ProcessorDefinition<?>> {
 
         // inject id
         if (processor instanceof IdAware) {
-            String id = 
definition.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
+            String id = getId(definition, routeContext);
             ((IdAware) processor).setId(id);
         }
 
@@ -568,5 +570,8 @@ public abstract class ProcessorReifier<T extends 
ProcessorDefinition<?>> {
         // noop
     }
 
-
+    protected String getId(OptionalIdentifiedDefinition<?> def, RouteContext 
routeContext) {
+        return def.idOrCreate(routeContext.getCamelContext()
+                .adapt(ExtendedCamelContext.class).getNodeIdFactory());
+    }
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java 
b/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java
index 71d8880..1cd333c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/StepReifier.java
@@ -18,7 +18,6 @@ package org.apache.camel.reifier;
 
 import java.util.List;
 
-import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.StepDefinition;
@@ -38,7 +37,7 @@ class StepReifier extends ProcessorReifier<StepDefinition> {
 
     @Override
     protected Processor createCompositeProcessor(RouteContext routeContext, 
List<Processor> list) throws Exception {
-        String stepId = 
definition.idOrCreate(routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getNodeIdFactory());
+        String stepId = getId(definition, routeContext);
         return StepProcessor.newInstance(routeContext.getCamelContext(), list, 
stepId);
     }
 }

Reply via email to