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

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

commit 461c086552e1a7612066487bc39e9c3ae5b5ee45
Author: Andrea Cosentino <anco...@gmail.com>
AuthorDate: Tue Feb 13 17:23:59 2024 +0100

    CAMEL-20415 - AWS Cloudtrail CloudEvent transformer
    
    Signed-off-by: Andrea Cosentino <anco...@gmail.com>
---
 components/camel-aws/camel-aws-cloudtrail/pom.xml  |  8 ++++
 .../aws-cloudtrail-application-cloudevents         |  2 +
 .../CloudtrailCloudEventDataTypeTransformer.java   | 55 ++++++++++++++++++++++
 3 files changed, 65 insertions(+)

diff --git a/components/camel-aws/camel-aws-cloudtrail/pom.xml 
b/components/camel-aws/camel-aws-cloudtrail/pom.xml
index 1d45a991ad5..b6420014c97 100644
--- a/components/camel-aws/camel-aws-cloudtrail/pom.xml
+++ b/components/camel-aws/camel-aws-cloudtrail/pom.xml
@@ -55,6 +55,14 @@
             <artifactId>camel-health</artifactId>
         </dependency>
 
+        <!-- optional CloudEvent support -->
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-cloudevents</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+
         <!-- for testing -->
         <dependency>
             <groupId>org.apache.camel</groupId>
diff --git 
a/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws-cloudtrail-application-cloudevents
 
b/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws-cloudtrail-application-cloudevents
new file mode 100644
index 00000000000..adcb3ce3ca4
--- /dev/null
+++ 
b/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws-cloudtrail-application-cloudevents
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.aws.cloudtrail.transform.CloudtrailCloudEventDataTypeTransformer
diff --git 
a/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/transform/CloudtrailCloudEventDataTypeTransformer.java
 
b/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/transform/CloudtrailCloudEventDataTypeTransformer.java
new file mode 100644
index 00000000000..dbfc15a999f
--- /dev/null
+++ 
b/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/transform/CloudtrailCloudEventDataTypeTransformer.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.camel.component.aws.cloudtrail.transform;
+
+import java.util.Map;
+
+import org.apache.camel.Message;
+import org.apache.camel.component.aws.cloudtrail.CloudtrailConstants;
+import org.apache.camel.component.cloudevents.CloudEvent;
+import org.apache.camel.component.cloudevents.CloudEvents;
+import org.apache.camel.spi.DataType;
+import org.apache.camel.spi.DataTypeTransformer;
+import org.apache.camel.spi.Transformer;
+
+/**
+ * Data type transformer converts AWS Cloudtrail lookup events response to 
CloudEvent v1_0 data format. The data type
+ * sets Camel specific CloudEvent headers with values extracted from AWS 
Cloudtrail lookup events response.
+ */
+@DataTypeTransformer(name = "aws-cloudtrail:application-cloudevents")
+public class CloudtrailCloudEventDataTypeTransformer extends Transformer {
+
+    @Override
+    public void transform(Message message, DataType fromType, DataType toType) 
{
+        final Map<String, Object> headers = message.getHeaders();
+
+        CloudEvent cloudEvent = CloudEvents.v1_0;
+        headers.putIfAbsent(CloudEvent.CAMEL_CLOUD_EVENT_ID, 
message.getExchange().getExchangeId());
+        headers.putIfAbsent(CloudEvent.CAMEL_CLOUD_EVENT_VERSION, 
cloudEvent.version());
+        headers.put(CloudEvent.CAMEL_CLOUD_EVENT_TYPE, 
"org.apache.camel.event.aws.cloudtrail.lookupEvents");
+
+        if 
(message.getHeaders().containsKey(CloudtrailConstants.EVENT_SOURCE)) {
+            headers.put(CloudEvent.CAMEL_CLOUD_EVENT_SOURCE,
+                    "aws.cloudtrail.event.source." + 
message.getHeader(CloudtrailConstants.EVENT_SOURCE, String.class));
+        }
+
+        headers.put(CloudEvent.CAMEL_CLOUD_EVENT_SUBJECT, 
message.getHeader(CloudtrailConstants.EVENT_ID, String.class));
+        headers.put(CloudEvent.CAMEL_CLOUD_EVENT_TIME, 
cloudEvent.getEventTime(message.getExchange()));
+        headers.put(CloudEvent.CAMEL_CLOUD_EVENT_CONTENT_TYPE, 
CloudEvent.TEXT_PLAIN_MIME_TYPE);
+    }
+}

Reply via email to