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

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

commit edffa0469b852c68e1bb5d77c3b06cf14cfccc7f
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Apr 5 16:11:50 2019 +0200

    CAMEL-13380: camel-core - Move cloud out into camel-cloud component. Woprk 
in progress
---
 .../org/apache/camel/spi/ProcessorFactory.java     | 15 ++++++++++++++
 .../impl/cloud/DefaultServiceCallProcessor.java    | 19 ++++++++++-------
 .../apache/camel/impl/DefaultProcessorFactory.java | 24 ++++++++++++++++++++++
 .../apache/camel/impl/TypedProcessorFactory.java   |  7 +++++++
 .../processor/CustomProcessorFactoryTest.java      |  9 ++++++++
 5 files changed, 67 insertions(+), 7 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java
index cf750e6..b88cf57 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.spi;
 
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 
@@ -56,4 +59,16 @@ public interface ProcessorFactory {
      */
     Processor createProcessor(RouteContext routeContext, NamedNode definition) 
throws Exception;
 
+    /**
+     * Creates a processor by the name of the definition. This should only be 
used in some special situations
+     * where the processor is used internally in some features such as 
camel-cloud.
+     *
+     * @param camelContext     the camel context
+     * @param definitionName   the name of the definition that represents the 
processor
+     * @param args             arguments for creating the processor (name=vale 
pairs)
+     * @return the created processor, or <tt>null</tt> if this situation is 
not yet implemented.
+     * @throws Exception can be thrown if error creating the processor
+     */
+    Processor createProcessor(CamelContext camelContext, String 
definitionName, Map<String, Object> args) throws Exception;
+
 }
diff --git 
a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
 
b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
index 11d3940..9218ce9 100644
--- 
a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
+++ 
b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
@@ -16,19 +16,22 @@
  */
 package org.apache.camel.impl.cloud;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
+import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.Message;
+import org.apache.camel.Processor;
 import org.apache.camel.cloud.ServiceCallConstants;
 import org.apache.camel.cloud.ServiceDefinition;
 import org.apache.camel.cloud.ServiceLoadBalancer;
-import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.spi.Language;
+import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.apache.camel.support.AsyncProcessorSupport;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -44,7 +47,7 @@ public class DefaultServiceCallProcessor extends 
AsyncProcessorSupport {
     private final CamelContext camelContext;
     private final ServiceLoadBalancer loadBalancer;
     private final Expression expression;
-    private SendDynamicProcessor processor;
+    private AsyncProcessor processor;
 
     public DefaultServiceCallProcessor(
         CamelContext camelContext, String name, String scheme, String uri, 
ExchangePattern exchangePattern,
@@ -122,11 +125,13 @@ public class DefaultServiceCallProcessor extends 
AsyncProcessorSupport {
         ObjectHelper.notNull(expression, "expression");
         ObjectHelper.notNull(loadBalancer, "load balancer");
 
-        processor = new SendDynamicProcessor(uri, expression);
-        processor.setCamelContext(camelContext);
-        if (exchangePattern != null) {
-            processor.setPattern(exchangePattern);
-        }
+        Map<String, Object> args = new HashMap<>();
+        args.put("uri", uri);
+        args.put("expression", expression);
+        args.put("pattern", exchangePattern);
+
+        Processor send = 
camelContext.getProcessorFactory().createProcessor(camelContext, 
"SendDynamicProcessor", args);
+        processor = AsyncProcessorConverterHelper.convert(send);
 
         // Start services if needed
         ServiceHelper.startService(processor);
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java
 
b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java
index 2a7b9a1..a9c18c8 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultProcessorFactory.java
@@ -16,9 +16,15 @@
  */
 package org.apache.camel.impl;
 
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.Expression;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.Processor;
+import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.RouteContext;
@@ -75,4 +81,22 @@ public class DefaultProcessorFactory implements 
ProcessorFactory {
 
         return null;
     }
+
+    @Override
+    public Processor createProcessor(CamelContext camelContext, String 
definitionName, Map<String, Object> args) throws Exception {
+        // currently only SendDynamicProcessor is supported
+        SendDynamicProcessor answer = null;
+        if ("SendDynamicProcessor".equals(definitionName)) {
+            String uri = (String) args.get("uri");
+            Expression expression = (Expression) args.get("expression");
+            ExchangePattern pattern = (ExchangePattern) 
args.get("exchangePattern");
+            answer = new SendDynamicProcessor(uri, expression);
+            if (pattern != null) {
+                answer.setPattern(pattern);
+            }
+        }
+
+        return answer;
+    }
+    
 }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java
 
b/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java
index e25137d..ab91921 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/impl/TypedProcessorFactory.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.impl;
 
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.model.ProcessorDefinition;
@@ -47,6 +50,10 @@ public class TypedProcessorFactory<T extends 
ProcessorDefinition<T>> implements
         return null;
     }
 
+    @Override
+    public Processor createProcessor(CamelContext camelContext, String 
definitionName, Map<String, Object> args) throws Exception {
+        return null;
+    }
 
     protected Processor doCreateChildProcessor(RouteContext routeContext, T 
definition, boolean mandatory) throws Exception {
         return null;
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
index 23b9aa3..6f97c5a 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.processor;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.NamedNode;
@@ -83,10 +85,12 @@ public class CustomProcessorFactoryTest extends 
ContextTestSupport {
     // START SNIPPET: e3
     public static class MyFactory implements ProcessorFactory {
 
+        @Override
         public Processor createChildProcessor(RouteContext routeContext, 
NamedNode definition, boolean mandatory) throws Exception {
             return null;
         }
 
+        @Override
         public Processor createProcessor(RouteContext routeContext, NamedNode 
definition) throws Exception {
             if (definition instanceof SplitDefinition) {
                 // add additional output to the splitter
@@ -103,6 +107,11 @@ public class CustomProcessorFactoryTest extends 
ContextTestSupport {
             // before the processor was created
             return null;
         }
+
+        @Override
+        public Processor createProcessor(CamelContext camelContext, String 
definitionName, Map<String, Object> args) throws Exception {
+            return null;
+        }
     }
     // END SNIPPET: e3
 

Reply via email to