You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2020/09/21 16:30:40 UTC

[camel] 07/10: CAMEL-15375 - Camel-AWS2-Eventbridge: WIP

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

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

commit 41d759f6e6994493a7490431686d1037c6b340af
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Mon Sep 21 16:38:30 2020 +0200

    CAMEL-15375 - Camel-AWS2-Eventbridge: WIP
---
 .../aws2/eventbridge/EvenbridgeOperations.java     |  2 +-
 .../aws2/eventbridge/EventbridgeConstants.java     |  1 +
 .../aws2/eventbridge/EventbridgeProducer.java      | 79 ++++++++++++----------
 .../EventbridgePutRuleIntegrationTest.java         | 26 ++++++-
 4 files changed, 69 insertions(+), 39 deletions(-)

diff --git a/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EvenbridgeOperations.java b/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EvenbridgeOperations.java
index 9bef090..44f810f 100644
--- a/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EvenbridgeOperations.java
+++ b/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EvenbridgeOperations.java
@@ -19,5 +19,5 @@ package org.apache.camel.component.aws2.eventbridge;
 public enum EvenbridgeOperations {
 
     putRule,
-    putTarget
+    putTargets
 }
diff --git a/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java b/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java
index eecf9ca..e7acf29 100644
--- a/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java
+++ b/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java
@@ -23,4 +23,5 @@ public interface EventbridgeConstants {
     String OPERATION = "CamelAwsEventbridgeOperation";
     String RULE_NAME = "CamelAwsEventbridgeRuleName";
     String EVENT_PATTERN = "CamelAwsEventbridgeEventPattern";
+    String TARGETS = "CamelAwsEventbridgeTargets";
 }
diff --git a/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducer.java b/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducer.java
index efb947c..e4e4d05f 100644
--- a/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducer.java
+++ b/components/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducer.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.aws2.eventbridge;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.Charset;
+import java.util.Collection;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
@@ -35,6 +36,9 @@ import software.amazon.awssdk.awscore.exception.AwsServiceException;
 import software.amazon.awssdk.services.eventbridge.EventBridgeClient;
 import software.amazon.awssdk.services.eventbridge.model.PutRuleRequest;
 import software.amazon.awssdk.services.eventbridge.model.PutRuleResponse;
+import software.amazon.awssdk.services.eventbridge.model.PutTargetsRequest;
+import software.amazon.awssdk.services.eventbridge.model.PutTargetsResponse;
+import software.amazon.awssdk.services.eventbridge.model.Target;
 
 /**
  * A Producer which sends messages to the Amazon Eventbridge Service SDK v2 <a href="http://aws.amazon.com/sts/">AWS
@@ -56,6 +60,9 @@ public class EventbridgeProducer extends DefaultProducer {
             case putRule:
                 putRule(getEndpoint().getEventbridgeClient(), exchange);
                 break;
+            case putTargets:
+            	putTargets(getEndpoint().getEventbridgeClient(), exchange);
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
@@ -122,41 +129,43 @@ public class EventbridgeProducer extends DefaultProducer {
         }
     }
 
-    //    private void putTarget(EventBridgeClient eventbridgeClient, Exchange exchange) throws InvalidPayloadException {
-    //        if (getConfiguration().isPojoRequest()) {
-    //            Object payload = exchange.getIn().getMandatoryBody();
-    //            if (payload instanceof PutTargetsRequest) {
-    //                PutTargetsResponse result;
-    //                try {
-    //                    result = eventbridgeClient.putTargets((PutTargetsRequest) payload);
-    //                } catch (AwsServiceException ase) {
-    //                    LOG.trace("PutTargets command returned the error code {}", ase.awsErrorDetails().errorCode());
-    //                    throw ase;
-    //                }
-    //                Message message = getMessageForResponse(exchange);
-    //                message.setBody(result);
-    //            }
-    //        } else {
-    //            Put.Builder builder = PutRuleRequest.builder();
-    //            if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EventbridgeConstants.RULE_NAME))) {
-    //                String ruleName = exchange.getIn().getHeader(EventbridgeConstants.RULE_NAME, String.class);
-    //                builder.name(ruleName);
-    //            }
-    //            if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EventbridgeConstants.EVENT_PATTERN))) {
-    //                String eventPattern = exchange.getIn().getHeader(EventbridgeConstants.EVENT_PATTERN, String.class);
-    //                builder.eventPattern(eventPattern);
-    //            }
-    //            PutRuleResponse result;
-    //            try {
-    //                result = eventbridgeClient.putTargets(builder.build());
-    //            } catch (AwsServiceException ase) {
-    //                LOG.trace("Put Rule command returned the error code {}", ase.awsErrorDetails().errorCode());
-    //                throw ase;
-    //            }
-    //            Message message = getMessageForResponse(exchange);
-    //            message.setBody(result);
-    //        }
-    //    }
+        private void putTargets(EventBridgeClient eventbridgeClient, Exchange exchange) throws InvalidPayloadException {
+            if (getConfiguration().isPojoRequest()) {
+                Object payload = exchange.getIn().getMandatoryBody();
+                if (payload instanceof PutTargetsRequest) {
+                    PutTargetsResponse result;
+                    try {
+                        result = eventbridgeClient.putTargets((PutTargetsRequest) payload);
+                    } catch (AwsServiceException ase) {
+                        LOG.trace("PutTargets command returned the error code {}", ase.awsErrorDetails().errorCode());
+                        throw ase;
+                    }
+                    Message message = getMessageForResponse(exchange);
+                    message.setBody(result);
+                }
+            } else {
+                PutTargetsRequest.Builder builder = PutTargetsRequest.builder();
+                if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EventbridgeConstants.RULE_NAME))) {
+                    String ruleName = exchange.getIn().getHeader(EventbridgeConstants.RULE_NAME, String.class);
+                    builder.rule(ruleName);
+                }
+                if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(EventbridgeConstants.TARGETS))) {
+                    Collection<Target> targets = exchange.getIn().getHeader(EventbridgeConstants.TARGETS, Collection.class);
+                    builder.targets(targets);
+                } else {
+                    throw new IllegalArgumentException("At least one targets must be specified");
+                }
+                PutTargetsResponse result;
+                try {
+                    result = eventbridgeClient.putTargets(builder.build());
+                } catch (AwsServiceException ase) {
+                    LOG.trace("Put Targets command returned the error code {}", ase.awsErrorDetails().errorCode());
+                    throw ase;
+                }
+                Message message = getMessageForResponse(exchange);
+                message.setBody(result);
+            }
+        }
 
     @Override
     public EventbridgeEndpoint getEndpoint() {
diff --git a/components/camel-aws2-eventbridge/src/test/java/org/apache/camel/component/aws2/eventbridge/integration/EventbridgePutRuleIntegrationTest.java b/components/camel-aws2-eventbridge/src/test/java/org/apache/camel/component/aws2/eventbridge/integration/EventbridgePutRuleIntegrationTest.java
index 0106440..6d38748 100644
--- a/components/camel-aws2-eventbridge/src/test/java/org/apache/camel/component/aws2/eventbridge/integration/EventbridgePutRuleIntegrationTest.java
+++ b/components/camel-aws2-eventbridge/src/test/java/org/apache/camel/component/aws2/eventbridge/integration/EventbridgePutRuleIntegrationTest.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.aws2.eventbridge.integration;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -31,6 +34,7 @@ import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
 import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
 import software.amazon.awssdk.regions.Region;
 import software.amazon.awssdk.services.eventbridge.EventBridgeClient;
+import software.amazon.awssdk.services.eventbridge.model.Target;
 
 @Disabled("Must be manually tested. Provide your own accessKey and secretKey!")
 public class EventbridgePutRuleIntegrationTest extends CamelTestSupport {
@@ -39,7 +43,7 @@ public class EventbridgePutRuleIntegrationTest extends CamelTestSupport {
     EventBridgeClient client
             = EventBridgeClient.builder()
                     .credentialsProvider(StaticCredentialsProvider.create(
-                            AwsBasicCredentials.create("xxxx", "yyy")))
+                            AwsBasicCredentials.create("xxxx", "yyyy")))
                     .region(Region.EU_WEST_1).build();
 
     @EndpointInject
@@ -47,10 +51,14 @@ public class EventbridgePutRuleIntegrationTest extends CamelTestSupport {
 
     @EndpointInject("mock:result")
     private MockEndpoint result;
+    
+    @EndpointInject("mock:result1")
+    private MockEndpoint result1;
 
     @Test
     public void sendIn() throws Exception {
         result.expectedMessageCount(1);
+        result1.expectedMessageCount(1);
 
         template.send("direct:evs", new Processor() {
 
@@ -59,6 +67,18 @@ public class EventbridgePutRuleIntegrationTest extends CamelTestSupport {
                 exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
             }
         });
+        
+        template.send("direct:evs-targets", new Processor() {
+
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(EventbridgeConstants.RULE_NAME, "firstrule");
+                Target target = Target.builder().id("sqs-queue").arn("arn:aws:sqs:eu-west-1:780410022472:camel-connector-test").build();
+                List<Target> targets = new ArrayList<Target>();
+                targets.add(target);
+                exchange.getIn().setHeader(EventbridgeConstants.TARGETS, targets);
+            }
+        });
         assertMockEndpointsSatisfied();
 
     }
@@ -69,9 +89,9 @@ public class EventbridgePutRuleIntegrationTest extends CamelTestSupport {
             @Override
             public void configure() throws Exception {
                 String awsEndpoint = "aws2-eventbridge://test?operation=putRule&eventPatternFile=file:src/test/resources/eventpattern.json";
-
+                String target = "aws2-eventbridge://test?operation=putTargets";
                 from("direct:evs").to(awsEndpoint).log("${body}").to("mock:result");
-
+                from("direct:evs-targets").to(target).log("${body}").to("mock:result1");
             }
         };
     }