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 <anco...@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"); } }; }