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

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

commit 1566966a90e372b13136402773c413c97766ff4c
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Nov 8 09:34:36 2023 +0100

    CAMEL-20087 - Backport data types from Kamelet utils to Camel - AWS2 S3
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../transformer/aws2-s3-application-cloudevents    |  2 +-
 .../converter/AWS2S3CloudEventOutputType.java      | 47 ++++++++++++++++++++++
 .../camel/impl/converter/ConverterStatistics.java  |  2 +-
 .../impl/converter/CoreTypeConverterRegistry.java  |  2 +-
 .../camel/impl/CustomBulkTypeConvertersTest.java   |  2 +-
 .../impl/converter/TypeResolverHelperTest.java     |  8 ++--
 .../apache/camel/support/CloudEventsHelper.java    | 45 +++++++++++++++++++++
 7 files changed, 100 insertions(+), 8 deletions(-)

diff --git 
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-s3-application-cloudevents
 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-s3-application-cloudevents
index 78f1be83b8c..df08df03072 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-s3-application-cloudevents
+++ 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-s3-application-cloudevents
@@ -1,2 +1,2 @@
 # Generated by camel build tools - do NOT edit this file!
-class=org.apache.camel.component.aws2.s3.transform.AWS2S3CloudEventDataTypeTransformer
+class=org.apache.camel.component.aws2.s3.datatype.converter.AWS2S3CloudEventOutputType
diff --git 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/datatype/converter/AWS2S3CloudEventOutputType.java
 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/datatype/converter/AWS2S3CloudEventOutputType.java
new file mode 100644
index 00000000000..adf6e35a350
--- /dev/null
+++ 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/datatype/converter/AWS2S3CloudEventOutputType.java
@@ -0,0 +1,47 @@
+/*
+ * 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.aws2.s3.datatype.converter;
+
+import java.util.Map;
+
+import org.apache.camel.Message;
+import org.apache.camel.component.aws2.s3.AWS2S3Constants;
+import org.apache.camel.spi.DataType;
+import org.apache.camel.spi.DataTypeTransformer;
+import org.apache.camel.spi.Transformer;
+import org.apache.camel.support.CloudEventsHelper;
+
+/**
+ * Output data type represents AWS S3 get object response as CloudEvent V1. 
The data type sets Camel specific CloudEvent
+ * headers on the exchange.
+ */
+@DataTypeTransformer(name = "aws2-s3:application-cloudevents")
+public class AWS2S3CloudEventOutputType extends Transformer {
+
+    @Override
+    public void transform(Message message, DataType fromType, DataType toType) 
{
+        final Map<String, Object> headers = message.getHeaders();
+
+        headers.put(CloudEventsHelper.CAMEL_CLOUD_EVENT_ID, 
message.getExchange().getExchangeId());
+        headers.put(CloudEventsHelper.CAMEL_CLOUD_EVENT_TYPE, 
"org.apache.camel.event.aws.s3.getObject");
+        headers.put(CloudEventsHelper.CAMEL_CLOUD_EVENT_SOURCE,
+                "aws.s3.bucket." + 
message.getHeader(AWS2S3Constants.BUCKET_NAME, String.class));
+        headers.put(CloudEventsHelper.CAMEL_CLOUD_EVENT_SUBJECT, 
message.getHeader(AWS2S3Constants.KEY, String.class));
+        headers.put(CloudEventsHelper.CAMEL_CLOUD_EVENT_TIME, 
CloudEventsHelper.getEventTime(message.getExchange()));
+    }
+}
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/ConverterStatistics.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/ConverterStatistics.java
index 83726e62638..98127de258e 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/ConverterStatistics.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/ConverterStatistics.java
@@ -21,8 +21,8 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.TypeConverter;
-import org.apache.camel.spi.TypeConvertible;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.spi.TypeConvertible;
 
 /**
  * Converter-specific statistics
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
index b536d9cb644..4ba9f012425 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
@@ -33,11 +33,11 @@ import org.apache.camel.TypeConverter;
 import org.apache.camel.TypeConverterExists;
 import org.apache.camel.TypeConverterExistsException;
 import org.apache.camel.converter.ObjectConverter;
-import org.apache.camel.spi.TypeConvertible;
 import org.apache.camel.spi.BulkTypeConverters;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.spi.TypeConvertible;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.support.service.ServiceSupport;
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/CustomBulkTypeConvertersTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/CustomBulkTypeConvertersTest.java
index d884a95572e..ba06146a208 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/CustomBulkTypeConvertersTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/CustomBulkTypeConvertersTest.java
@@ -21,8 +21,8 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.TypeConversionException;
 import org.apache.camel.TypeConverter;
-import org.apache.camel.spi.TypeConvertible;
 import org.apache.camel.spi.BulkTypeConverters;
+import org.apache.camel.spi.TypeConvertible;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/converter/TypeResolverHelperTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/converter/TypeResolverHelperTest.java
index 20ab54e29f5..1dc66ac50ae 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/converter/TypeResolverHelperTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/converter/TypeResolverHelperTest.java
@@ -16,15 +16,15 @@
  */
 package org.apache.camel.impl.converter;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.TypeConvertible;
 import org.apache.camel.support.SimpleTypeConverter;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -90,4 +90,4 @@ class TypeResolverHelperTest {
             });
         }
     }
-}
\ No newline at end of file
+}
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/CloudEventsHelper.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/CloudEventsHelper.java
new file mode 100644
index 00000000000..b0babd3b714
--- /dev/null
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/CloudEventsHelper.java
@@ -0,0 +1,45 @@
+/*
+ * 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.support;
+
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+
+import org.apache.camel.Exchange;
+
+/**
+ * Helper class to manage CloudEvents specific Camel message headers and other 
utilities.
+ */
+public class CloudEventsHelper {
+
+    public static final String CAMEL_CLOUD_EVENT_ID = "CamelCloudEventID";
+    public static final String CAMEL_CLOUD_EVENT_VERSION = 
"CamelCloudEventVersion";
+    public static final String CAMEL_CLOUD_EVENT_TYPE = "CamelCloudEventType";
+    public static final String CAMEL_CLOUD_EVENT_SOURCE = 
"CamelCloudEventSource";
+    public static final String CAMEL_CLOUD_EVENT_SUBJECT = 
"CamelCloudEventSubject";
+    public static final String CAMEL_CLOUD_EVENT_TIME = "CamelCloudEventTime";
+    public static final String CAMEL_CLOUD_EVENT_CONTENT_TYPE = 
Exchange.CONTENT_TYPE;
+
+    public static String getEventTime(Exchange exchange) {
+        final ZonedDateTime created
+                = 
ZonedDateTime.ofInstant(Instant.ofEpochMilli(exchange.getCreated()), 
ZoneId.systemDefault());
+        return DateTimeFormatter.ISO_INSTANT.format(created);
+    }
+}

Reply via email to