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

zbendhiba pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 32acb7d5bcd3 CAMEL-23219 - google-mail-stream: Expose threadId, 
Message-ID and lab… (#22116)
32acb7d5bcd3 is described below

commit 32acb7d5bcd382b65ff3af7862716afb660530e6
Author: Zineb BENDHIBA <[email protected]>
AuthorDate: Fri Mar 20 14:23:22 2026 +0100

    CAMEL-23219 - google-mail-stream: Expose threadId, Message-ID and lab… 
(#22116)
    
    * CAMEL-23219 - google-mail-stream: Expose threadId, Message-ID and 
labelIds as exchange headers
    
    * fix regen
---
 .../catalog/components/google-mail-stream.json     |   5 +-
 .../google/mail/stream/google-mail-stream.json     |   5 +-
 .../mail/stream/GoogleMailStreamConstants.java     |   6 +
 .../mail/stream/GoogleMailStreamConsumer.java      |   5 +
 .../GoogleMailStreamConsumerHeadersTest.java       | 171 +++++++++++++++++++++
 .../GoogleMailStreamEndpointBuilderFactory.java    |  36 +++++
 6 files changed, 226 insertions(+), 2 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
index c020dc005f6e..c4277dfe5012 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
@@ -50,7 +50,10 @@
     "CamelGoogleMailStreamCc": { "index": 2, "kind": "header", "displayName": 
"", "group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The carbon copy of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_CC"
 },
     "CamelGoogleMailStreamBcc": { "index": 3, "kind": "header", "displayName": 
"", "group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The blind carbon cpoy of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_BCC"
 },
     "CamelGoogleMailStreamSubject": { "index": 4, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The subject of the message", 
"constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_SUBJECT"
 },
-    "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ID of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
 }
+    "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ID of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
 },
+    "CamelGoogleMailStreamThreadId": { "index": 6, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The thread ID of the message", 
"constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_THREAD_ID"
 },
+    "CamelGoogleMailStreamMessageId": { "index": 7, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The Message-ID of the message", 
"constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_MESSAGE_ID"
 },
+    "CamelGoogleMailStreamLabelIds": { "index": 8, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "java.util.List<String>", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "description": "The label IDs of the 
message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_LABEL_IDS"
 }
   },
   "properties": {
     "index": { "index": 0, "kind": "path", "displayName": "Index", "group": 
"consumer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration", 
"configurationField": "configuration", "description": "Currently not in use" },
diff --git 
a/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
 
b/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
index c020dc005f6e..c4277dfe5012 100644
--- 
a/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
+++ 
b/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
@@ -50,7 +50,10 @@
     "CamelGoogleMailStreamCc": { "index": 2, "kind": "header", "displayName": 
"", "group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The carbon copy of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_CC"
 },
     "CamelGoogleMailStreamBcc": { "index": 3, "kind": "header", "displayName": 
"", "group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The blind carbon cpoy of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_BCC"
 },
     "CamelGoogleMailStreamSubject": { "index": 4, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The subject of the message", 
"constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_SUBJECT"
 },
-    "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ID of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
 }
+    "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ID of the message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
 },
+    "CamelGoogleMailStreamThreadId": { "index": 6, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The thread ID of the message", 
"constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_THREAD_ID"
 },
+    "CamelGoogleMailStreamMessageId": { "index": 7, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The Message-ID of the message", 
"constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_MESSAGE_ID"
 },
+    "CamelGoogleMailStreamLabelIds": { "index": 8, "kind": "header", 
"displayName": "", "group": "consumer", "label": "", "required": false, 
"javaType": "java.util.List<String>", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "description": "The label IDs of the 
message", "constantName": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_LABEL_IDS"
 }
   },
   "properties": {
     "index": { "index": 0, "kind": "path", "displayName": "Index", "group": 
"consumer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration", 
"configurationField": "configuration", "description": "Currently not in use" },
diff --git 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
index 7d4bafece368..c5df88b5345a 100644
--- 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
+++ 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
@@ -35,6 +35,12 @@ public final class GoogleMailStreamConstants {
     public static final String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
     @Metadata(description = "The ID of the message", javaType = "String")
     public static final String MAIL_ID = "CamelGoogleMailId";
+    @Metadata(description = "The thread ID of the message", javaType = 
"String")
+    public static final String MAIL_THREAD_ID = 
"CamelGoogleMailStreamThreadId";
+    @Metadata(description = "The Message-ID of the message", javaType = 
"String")
+    public static final String MAIL_MESSAGE_ID = 
"CamelGoogleMailStreamMessageId";
+    @Metadata(description = "The label IDs of the message", javaType = 
"java.util.List<String>")
+    public static final String MAIL_LABEL_IDS = 
"CamelGoogleMailStreamLabelIds";
 
     /**
      * Prevent instantiation.
diff --git 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
index aba62302a233..1b40dfec21a1 100644
--- 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
+++ 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
@@ -185,6 +185,8 @@ public class GoogleMailStreamConsumer extends 
ScheduledBatchPollingConsumer {
         exchange.setPattern(pattern);
         org.apache.camel.Message message = exchange.getIn();
         exchange.getIn().setHeader(GoogleMailStreamConstants.MAIL_ID, 
mail.getId());
+        exchange.getIn().setHeader(GoogleMailStreamConstants.MAIL_THREAD_ID, 
mail.getThreadId());
+        exchange.getIn().setHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS, 
mail.getLabelIds());
         if (getConfiguration().isRaw()) {
             message.setBody(mail.getRaw());
         } else {
@@ -217,6 +219,9 @@ public class GoogleMailStreamConsumer extends 
ScheduledBatchPollingConsumer {
             if ("BCC".equalsIgnoreCase(headerName)) {
                 message.setHeader(GoogleMailStreamConstants.MAIL_BCC, 
header.getValue());
             }
+            if ("MESSAGE-ID".equalsIgnoreCase(headerName)) {
+                message.setHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID, 
header.getValue());
+            }
         }
     }
 
diff --git 
a/components/camel-google/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumerHeadersTest.java
 
b/components/camel-google/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumerHeadersTest.java
new file mode 100644
index 000000000000..48471ee2a2d4
--- /dev/null
+++ 
b/components/camel-google/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumerHeadersTest.java
@@ -0,0 +1,171 @@
+/*
+ * 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.google.mail.stream;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.api.services.gmail.model.Message;
+import com.google.api.services.gmail.model.MessagePart;
+import com.google.api.services.gmail.model.MessagePartBody;
+import com.google.api.services.gmail.model.MessagePartHeader;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+public class GoogleMailStreamConsumerHeadersTest {
+
+    private CamelContext camelContext;
+    private GoogleMailStreamConsumer consumer;
+
+    @BeforeEach
+    void setUp() throws Exception {
+        camelContext = new DefaultCamelContext();
+        camelContext.start();
+
+        GoogleMailStreamComponent component = new 
GoogleMailStreamComponent(camelContext);
+        camelContext.addComponent("google-mail-stream", component);
+
+        GoogleMailStreamEndpoint endpoint = (GoogleMailStreamEndpoint) 
camelContext
+                .getEndpoint(
+                        
"google-mail-stream://test?clientId=a&clientSecret=b&applicationName=c&accessToken=d&refreshToken=e");
+
+        consumer = new GoogleMailStreamConsumer(endpoint, exchange -> {
+        }, "UNREAD", Collections.emptyList());
+        consumer.start();
+    }
+
+    @AfterEach
+    void tearDown() throws Exception {
+        if (consumer != null) {
+            consumer.stop();
+        }
+        if (camelContext != null) {
+            camelContext.stop();
+        }
+    }
+
+    @Test
+    void testThreadIdHeader() {
+        Message mail = createTestMessage("msg-123", "thread-456");
+        Exchange exchange = consumer.createExchange(ExchangePattern.InOnly, 
mail);
+
+        assertEquals("thread-456", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_THREAD_ID));
+    }
+
+    @Test
+    void testMessageIdHeader() {
+        Message mail = createTestMessage("msg-123", "thread-456");
+        addHeader(mail, "Message-ID", "<[email protected]>");
+
+        Exchange exchange = consumer.createExchange(ExchangePattern.InOnly, 
mail);
+
+        assertEquals("<[email protected]>", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID));
+    }
+
+    @Test
+    void testAllHeaders() {
+        Message mail = createTestMessage("msg-123", "thread-456");
+        mail.setLabelIds(List.of("INBOX", "UNREAD"));
+        addHeader(mail, "Subject", "Test Subject");
+        addHeader(mail, "To", "[email protected]");
+        addHeader(mail, "From", "[email protected]");
+        addHeader(mail, "Cc", "[email protected]");
+        addHeader(mail, "Bcc", "[email protected]");
+        addHeader(mail, "Message-ID", "<[email protected]>");
+
+        Exchange exchange = consumer.createExchange(ExchangePattern.InOnly, 
mail);
+
+        assertEquals("msg-123", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_ID));
+        assertEquals("thread-456", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_THREAD_ID));
+        assertEquals(List.of("INBOX", "UNREAD"), 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS));
+        assertEquals("Test Subject", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_SUBJECT));
+        assertEquals("[email protected]", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_TO));
+        assertEquals("[email protected]", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_FROM));
+        assertEquals("[email protected]", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_CC));
+        assertEquals("[email protected]", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_BCC));
+        assertEquals("<[email protected]>", 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID));
+    }
+
+    @Test
+    void testLabelIdsHeader() {
+        Message mail = createTestMessage("msg-123", "thread-456");
+        List<String> labels = List.of("INBOX", "UNREAD", "CATEGORY_PERSONAL");
+        mail.setLabelIds(labels);
+
+        Exchange exchange = consumer.createExchange(ExchangePattern.InOnly, 
mail);
+
+        List<String> result = 
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS, 
List.class);
+        assertNotNull(result);
+        assertEquals(3, result.size());
+        assertEquals("INBOX", result.get(0));
+        assertEquals("UNREAD", result.get(1));
+        assertEquals("CATEGORY_PERSONAL", result.get(2));
+    }
+
+    @Test
+    void testNullLabelIdsHeader() {
+        Message mail = createTestMessage("msg-123", "thread-456");
+
+        Exchange exchange = consumer.createExchange(ExchangePattern.InOnly, 
mail);
+
+        
assertNull(exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS));
+    }
+
+    @Test
+    void testMissingMessageIdHeader() {
+        Message mail = createTestMessage("msg-123", "thread-456");
+
+        Exchange exchange = consumer.createExchange(ExchangePattern.InOnly, 
mail);
+
+        
assertNull(exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID));
+    }
+
+    private Message createTestMessage(String id, String threadId) {
+        Message mail = new Message();
+        mail.setId(id);
+        mail.setThreadId(threadId);
+
+        MessagePartBody body = new MessagePartBody();
+        body.setData(null);
+
+        MessagePart payload = new MessagePart();
+        payload.setHeaders(new ArrayList<>());
+        payload.setParts(null);
+        payload.setBody(body);
+
+        mail.setPayload(payload);
+        return mail;
+    }
+
+    private void addHeader(Message mail, String name, String value) {
+        List<MessagePartHeader> headers = mail.getPayload().getHeaders();
+        MessagePartHeader header = new MessagePartHeader();
+        header.setName(name);
+        header.setValue(value);
+        headers.add(header);
+    }
+}
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
index 16e9782664c2..60dbffebc95b 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
@@ -1079,6 +1079,42 @@ public interface GoogleMailStreamEndpointBuilderFactory {
         public String googleMailId() {
             return "CamelGoogleMailId";
         }
+        /**
+         * The thread ID of the message.
+         * 
+         * The option is a: {@code String} type.
+         * 
+         * Group: consumer
+         * 
+         * @return the name of the header {@code GoogleMailStreamThreadId}.
+         */
+        public String googleMailStreamThreadId() {
+            return "CamelGoogleMailStreamThreadId";
+        }
+        /**
+         * The Message-ID of the message.
+         * 
+         * The option is a: {@code String} type.
+         * 
+         * Group: consumer
+         * 
+         * @return the name of the header {@code GoogleMailStreamMessageId}.
+         */
+        public String googleMailStreamMessageId() {
+            return "CamelGoogleMailStreamMessageId";
+        }
+        /**
+         * The label IDs of the message.
+         * 
+         * The option is a: {@code java.util.List<String>} type.
+         * 
+         * Group: consumer
+         * 
+         * @return the name of the header {@code GoogleMailStreamLabelIds}.
+         */
+        public String googleMailStreamLabelIds() {
+            return "CamelGoogleMailStreamLabelIds";
+        }
     }
     static GoogleMailStreamEndpointBuilder endpointBuilder(String 
componentName, String path) {
         class GoogleMailStreamEndpointBuilderImpl extends 
AbstractEndpointBuilder implements GoogleMailStreamEndpointBuilder, 
AdvancedGoogleMailStreamEndpointBuilder {

Reply via email to