You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/01/15 13:51:55 UTC

[camel] 02/05: CAMEL-14389: add support for Endpoint DSL to FluentProducerTemplate

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

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

commit bafe7a518017a9a0e1dcbe1089f8198f50d3c706
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Tue Jan 14 16:14:01 2020 +0100

    CAMEL-14389: add support for Endpoint DSL to FluentProducerTemplate
---
 .../apache/camel/EndpointConsumerResolver.java}    | 29 +++-------------------
 .../apache/camel/EndpointProducerResolver.java}    | 29 +++-------------------
 .../org/apache/camel/FluentProducerTemplate.java   | 14 ++++++++++-
 .../camel/builder/EndpointConsumerBuilder.java     | 16 ++----------
 .../camel/builder/EndpointProducerBuilder.java     | 15 ++---------
 .../endpoint/LanguageEndpointScriptRouteTest.java  | 14 +++++++++++
 .../endpoint/LanguageEndpointStaticTest.java       | 12 +++++++++
 7 files changed, 49 insertions(+), 80 deletions(-)

diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java b/core/camel-api/src/main/java/org/apache/camel/EndpointConsumerResolver.java
similarity index 61%
copy from core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java
copy to core/camel-api/src/main/java/org/apache/camel/EndpointConsumerResolver.java
index 9d40fc3..8786d9e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java
+++ b/core/camel-api/src/main/java/org/apache/camel/EndpointConsumerResolver.java
@@ -14,38 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.NoSuchEndpointException;
-
-/**
- * Type-safe endpoint DSL for building consumer endpoints.
- *
- * @see EndpointProducerBuilder
- */
-public interface EndpointConsumerBuilder {
+package org.apache.camel;
 
+public interface EndpointConsumerResolver {
     /**
-     * Builds and resolves this endpoint DSL as an endpoint.
+     * Resolves this object as an endpoint.
      *
      * @param context the camel context
      * @return a built {@link Endpoint}
      * @throws NoSuchEndpointException is thrown if the endpoint
      */
     Endpoint resolve(CamelContext context) throws NoSuchEndpointException;
-
-    /**
-     * Builds the url of this endpoint. This API is only intended for Camel
-     * internally.
-     */
-    String getUri();
-
-    /**
-     * Adds an option to this endpoint. This API is only intended for Camel
-     * internally.
-     */
-    void doSetProperty(String name, Object value);
-
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java b/core/camel-api/src/main/java/org/apache/camel/EndpointProducerResolver.java
similarity index 61%
copy from core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java
copy to core/camel-api/src/main/java/org/apache/camel/EndpointProducerResolver.java
index 9d40fc3..669c218 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java
+++ b/core/camel-api/src/main/java/org/apache/camel/EndpointProducerResolver.java
@@ -14,38 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.builder;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.NoSuchEndpointException;
-
-/**
- * Type-safe endpoint DSL for building consumer endpoints.
- *
- * @see EndpointProducerBuilder
- */
-public interface EndpointConsumerBuilder {
+package org.apache.camel;
 
+public interface EndpointProducerResolver {
     /**
-     * Builds and resolves this endpoint DSL as an endpoint.
+     * Resolves this object as an endpoint.
      *
      * @param context the camel context
      * @return a built {@link Endpoint}
      * @throws NoSuchEndpointException is thrown if the endpoint
      */
     Endpoint resolve(CamelContext context) throws NoSuchEndpointException;
-
-    /**
-     * Builds the url of this endpoint. This API is only intended for Camel
-     * internally.
-     */
-    String getUri();
-
-    /**
-     * Adds an option to this endpoint. This API is only intended for Camel
-     * internally.
-     */
-    void doSetProperty(String name, Object value);
-
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java b/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java
index af19126..87a00ab 100644
--- a/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java
+++ b/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java
@@ -260,7 +260,7 @@ public interface FluentProducerTemplate extends Service {
     }
 
     /**
-     * Endpoint to send to
+     * Endpoint to send to.
      *
      * @param uri the String formatted endpoint uri to send to
      * @param args arguments for the string formatting of the uri
@@ -272,6 +272,18 @@ public interface FluentProducerTemplate extends Service {
     /**
      * Endpoint to send to
      *
+     * @param resolver the {@link EndpointConsumerResolver} that supply the endpoint to send to.
+     */
+    default FluentProducerTemplate to(EndpointConsumerResolver resolver) {
+        final CamelContext context = ObjectHelper.notNull(getCamelContext(), "camel context");
+        final Endpoint endpoint = resolver.resolve(context);
+
+        return to(endpoint);
+    }
+
+    /**
+     * Endpoint to send to
+     *
      * @param endpoint the endpoint to send to
      */
     FluentProducerTemplate to(Endpoint endpoint);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java
index 9d40fc3..dde688b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointConsumerBuilder.java
@@ -16,26 +16,14 @@
  */
 package org.apache.camel.builder;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.NoSuchEndpointException;
+import org.apache.camel.EndpointConsumerResolver;
 
 /**
  * Type-safe endpoint DSL for building consumer endpoints.
  *
  * @see EndpointProducerBuilder
  */
-public interface EndpointConsumerBuilder {
-
-    /**
-     * Builds and resolves this endpoint DSL as an endpoint.
-     *
-     * @param context the camel context
-     * @return a built {@link Endpoint}
-     * @throws NoSuchEndpointException is thrown if the endpoint
-     */
-    Endpoint resolve(CamelContext context) throws NoSuchEndpointException;
-
+public interface EndpointConsumerBuilder extends EndpointConsumerResolver{
     /**
      * Builds the url of this endpoint. This API is only intended for Camel
      * internally.
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointProducerBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointProducerBuilder.java
index e835574..b95ff48 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointProducerBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/EndpointProducerBuilder.java
@@ -17,26 +17,15 @@
 package org.apache.camel.builder;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
+import org.apache.camel.EndpointProducerResolver;
 import org.apache.camel.Expression;
-import org.apache.camel.NoSuchEndpointException;
 
 /**
  * Type-safe endpoint DSL for building producer endpoints.
  *
  * @see EndpointConsumerBuilder
  */
-public interface EndpointProducerBuilder {
-
-    /**
-     * Builds and resolves this endpoint DSL as an endpoint.
-     *
-     * @param context the camel context
-     * @return a built {@link Endpoint}
-     * @throws NoSuchEndpointException is thrown if the endpoint
-     */
-    Endpoint resolve(CamelContext context) throws NoSuchEndpointException;
-
+public interface EndpointProducerBuilder extends EndpointProducerResolver {
     /**
      * Builds the url of this endpoint. This API is only intended for Camel
      * internally.
diff --git a/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointScriptRouteTest.java b/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointScriptRouteTest.java
index c6c017c..8ad0c4b 100644
--- a/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointScriptRouteTest.java
+++ b/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointScriptRouteTest.java
@@ -20,6 +20,8 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.junit.Test;
 
+import static org.apache.camel.builder.endpoint.dsl.DirectEndpointBuilderFactory.direct;
+
 public class LanguageEndpointScriptRouteTest extends ContextTestSupport {
 
     @Test
@@ -31,6 +33,18 @@ public class LanguageEndpointScriptRouteTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    public void testLanguageFluent() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+        context.createFluentProducerTemplate()
+            .to(direct("start"))
+            .withBody("World")
+            .send();
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new EndpointRouteBuilder() {
diff --git a/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointStaticTest.java b/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointStaticTest.java
index dd77674..217e054 100644
--- a/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointStaticTest.java
+++ b/core/camel-endpointdsl/src/test/java/org/apache/camel/builder/endpoint/LanguageEndpointStaticTest.java
@@ -35,6 +35,18 @@ public class LanguageEndpointStaticTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    public void testLanguageFluent() throws Exception {
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
+
+        context.createFluentProducerTemplate()
+            .to(direct("start"))
+            .withBody("World")
+            .send();
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {