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); + } +}
