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

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

commit 6a4d05ee36253e12cc8df8cc200a45c15e3499e6
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Oct 9 15:42:00 2024 +0200

    CAMEL-21262 - Camel-AWS2-S3: Explicitly add Producer operations HeadObject 
and HeadBucket - HeadObject
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../camel/component/aws2/s3/AWS2S3Operations.java  |  3 ++-
 .../camel/component/aws2/s3/AWS2S3Producer.java    | 16 +++++++++++++
 .../aws2/s3/integration/S3HeadBucketIT.java        |  2 +-
 .../{S3HeadBucketIT.java => S3HeadObjectIT.java}   | 28 ++++++++++++++++------
 4 files changed, 40 insertions(+), 9 deletions(-)

diff --git 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java
 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java
index 1dc575c427f..b4e12b1ef85 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Operations.java
@@ -26,5 +26,6 @@ public enum AWS2S3Operations {
     getObject,
     getObjectRange,
     createDownloadLink,
-    headBucket
+    headBucket,
+    headObject
 }
diff --git 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
index 38bfc5bc6b0..b7edba14061 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Producer.java
@@ -104,6 +104,9 @@ public class AWS2S3Producer extends DefaultProducer {
                 case headBucket:
                     headBucket(getEndpoint().getS3Client(), exchange);
                     break;
+                case headObject:
+                    headObject(getEndpoint().getS3Client(), exchange);
+                    break;
                 default:
                     throw new IllegalArgumentException("Unsupported 
operation");
             }
@@ -712,6 +715,19 @@ public class AWS2S3Producer extends DefaultProducer {
         message.setBody(headBucketResponse);
     }
 
+    private void headObject(S3Client s3Client, Exchange exchange) {
+        String key = exchange.getIn().getHeader(AWS2S3Constants.KEY, 
String.class);
+        if (ObjectHelper.isEmpty(key)) {
+            throw new IllegalArgumentException(
+                    "Head Object operation requires to specify a bucket name 
via Header");
+        }
+        HeadObjectResponse headObjectResponse = 
s3Client.headObject(HeadObjectRequest.builder()
+                .bucket(AWS2S3Utils.determineBucketName(exchange, 
getConfiguration())).key(key).build());
+
+        Message message = getMessageForResponse(exchange);
+        message.setBody(headObjectResponse);
+    }
+
     private AWS2S3Operations determineOperation(Exchange exchange) {
         AWS2S3Operations operation = 
exchange.getIn().getHeader(AWS2S3Constants.S3_OPERATION, 
AWS2S3Operations.class);
         if (operation == null) {
diff --git 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
index 5c65e517f2b..4bc0b7427c9 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
@@ -33,7 +33,7 @@ public class S3HeadBucketIT extends Aws2S3Base {
     private MockEndpoint result;
 
     @Test
-    public void sendInWithUserMetadata() throws InterruptedException {
+    public void sendInHeadBucket() throws InterruptedException {
         result.expectedMessageCount(1);
 
         template.send("direct:headBucket", exchange -> {
diff --git 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadObjectIT.java
similarity index 62%
copy from 
components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
copy to 
components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadObjectIT.java
index 5c65e517f2b..34b170f3d69 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadBucketIT.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3HeadObjectIT.java
@@ -17,6 +17,8 @@
 package org.apache.camel.component.aws2.s3.integration;
 
 import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.aws2.s3.AWS2S3Constants;
@@ -24,7 +26,7 @@ import org.apache.camel.component.aws2.s3.AWS2S3Operations;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
-public class S3HeadBucketIT extends Aws2S3Base {
+public class S3HeadObjectIT extends Aws2S3Base {
 
     @EndpointInject
     private ProducerTemplate template;
@@ -33,12 +35,22 @@ public class S3HeadBucketIT extends Aws2S3Base {
     private MockEndpoint result;
 
     @Test
-    public void sendInWithUserMetadata() throws InterruptedException {
+    public void sendInHeadObject() throws InterruptedException {
         result.expectedMessageCount(1);
 
-        template.send("direct:headBucket", exchange -> {
-            exchange.getIn().setHeader(AWS2S3Constants.S3_OPERATION, 
AWS2S3Operations.headBucket);
-            exchange.getIn().setHeader(AWS2S3Constants.BUCKET_NAME, "mycamel");
+        template.send("direct:putObject", new Processor() {
+
+            @Override
+            public void process(Exchange exchange) {
+                exchange.getIn().setHeader(AWS2S3Constants.KEY, "camel.txt");
+                exchange.getIn().setHeader(AWS2S3Constants.CONTENT_TYPE, 
"application/text");
+                exchange.getIn().setBody("Camel rocks!");
+            }
+        });
+
+        template.send("direct:headObject", exchange -> {
+            exchange.getIn().setHeader(AWS2S3Constants.S3_OPERATION, 
AWS2S3Operations.headObject);
+            exchange.getIn().setHeader(AWS2S3Constants.KEY, "camel.txt");
         });
 
         result.assertIsSatisfied();
@@ -49,9 +61,11 @@ public class S3HeadBucketIT extends Aws2S3Base {
         return new RouteBuilder() {
             @Override
             public void configure() {
-                String awsEndpoint = "aws2-s3://test-ss3-s3";
+                String awsEndpoint = "aws2-s3://" + name.get();
+                String awsEndpointCreate = "aws2-s3://" + name.get() + 
"?autoCreateBucket=true";
 
-                
from("direct:headBucket").to(awsEndpoint).log("${body}").to("mock:result");
+                from("direct:putObject").to(awsEndpointCreate);
+                
from("direct:headObject").to(awsEndpoint).log("${body}").to("mock:result");
 
             }
         };

Reply via email to