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

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 2eef1014b2dfd1c37d2577411f63929f5dd413ab
Author: Rene Cordier <rcord...@linagora.com>
AuthorDate: Tue Jun 3 10:57:23 2025 +0700

    JAMES-4135 Make MailboxMappingFactory into an interface
    
    It eases custom overrides for projects relying on James but wanting more 
flexibility regarding OpenSearch index mapping
---
 ...tory.java => DefaultMailboxMappingFactory.java} |   5 +-
 .../opensearch/MailboxIndexCreationUtil.java       |   8 +-
 .../mailbox/opensearch/MailboxMappingFactory.java  | 270 +--------------------
 .../opensearch/OpenSearchIntegrationTest.java      |   3 +-
 .../OpenSearchNoIndexBodyIntegrationTest.java      |   2 +-
 .../opensearch/OpenSearchQueryStringTest.java      |   2 +-
 .../search/OpenSearchSearchHighlighterTest.java    |   3 +-
 .../opensearch/search/OpenSearchSearcherTest.java  |   3 +-
 .../java/org/apache/james/SearchModuleChooser.java |   2 +
 .../mailbox/OpenSearchMailboxMappingModule.java    |  34 +++
 .../modules/mailbox/OpenSearchMailboxModule.java   |   9 +-
 11 files changed, 61 insertions(+), 280 deletions(-)

diff --git 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/DefaultMailboxMappingFactory.java
similarity index 99%
copy from 
mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
copy to 
mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/DefaultMailboxMappingFactory.java
index 84a61f9b9b..e106f347d5 100644
--- 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
+++ 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/DefaultMailboxMappingFactory.java
@@ -41,11 +41,12 @@ import 
org.opensearch.client.opensearch._types.mapping.TypeMapping;
 
 import com.google.common.collect.ImmutableMap;
 
-public class MailboxMappingFactory {
+public class DefaultMailboxMappingFactory implements MailboxMappingFactory {
     private static final String STANDARD = "standard";
     private static final String SIMPLE = "simple";
 
-    public static TypeMapping getMappingContent() {
+    @Override
+    public TypeMapping getMappingContent() {
         return new TypeMapping.Builder()
             .dynamic(DynamicMapping.Strict)
             .routing(new RoutingField.Builder()
diff --git 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
index d2c8a73c5f..536ae29cf7 100644
--- 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
+++ 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
@@ -32,12 +32,13 @@ public class MailboxIndexCreationUtil {
                                                         ReadAliasName 
readAlias,
                                                         WriteAliasName 
writeAlias,
                                                         IndexName indexName,
-                                                        
OpenSearchConfiguration configuration) {
+                                                        
OpenSearchConfiguration configuration,
+                                                        MailboxMappingFactory 
mailboxMappingFactory) {
             return new IndexCreationFactory(configuration)
                 .useIndex(indexName)
                 .addAlias(readAlias)
                 .addAlias(writeAlias)
-                .createIndexAndAliases(client, 
MailboxMappingFactory.getMappingContent());
+                .createIndexAndAliases(client, 
mailboxMappingFactory.getMappingContent());
     }
 
     public static ReactorOpenSearchClient 
prepareDefaultClient(ReactorOpenSearchClient client, OpenSearchConfiguration 
configuration) {
@@ -45,6 +46,7 @@ public class MailboxIndexCreationUtil {
             MailboxOpenSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
             MailboxOpenSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
             MailboxOpenSearchConstants.DEFAULT_MAILBOX_INDEX,
-            configuration);
+            configuration,
+            new DefaultMailboxMappingFactory());
     }
 }
diff --git 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
index 84a61f9b9b..d58789e884 100644
--- 
a/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
+++ 
b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
@@ -19,274 +19,8 @@
 
 package org.apache.james.mailbox.opensearch;
 
-import static 
org.apache.james.backends.opensearch.IndexCreationFactory.CASE_INSENSITIVE;
-import static 
org.apache.james.backends.opensearch.IndexCreationFactory.KEEP_MAIL_AND_URL;
-import static 
org.apache.james.backends.opensearch.IndexCreationFactory.KEYWORD;
-import static org.apache.james.backends.opensearch.IndexCreationFactory.RAW;
-
-import java.util.Map;
-
-import org.apache.james.mailbox.opensearch.json.JsonMessageConstants;
-import org.opensearch.client.opensearch._types.mapping.BooleanProperty;
-import org.opensearch.client.opensearch._types.mapping.DateProperty;
-import org.opensearch.client.opensearch._types.mapping.DynamicMapping;
-import org.opensearch.client.opensearch._types.mapping.KeywordProperty;
-import org.opensearch.client.opensearch._types.mapping.LongNumberProperty;
-import org.opensearch.client.opensearch._types.mapping.NestedProperty;
-import org.opensearch.client.opensearch._types.mapping.ObjectProperty;
-import org.opensearch.client.opensearch._types.mapping.Property;
-import org.opensearch.client.opensearch._types.mapping.RoutingField;
-import org.opensearch.client.opensearch._types.mapping.TextProperty;
 import org.opensearch.client.opensearch._types.mapping.TypeMapping;
 
-import com.google.common.collect.ImmutableMap;
-
-public class MailboxMappingFactory {
-    private static final String STANDARD = "standard";
-    private static final String SIMPLE = "simple";
-
-    public static TypeMapping getMappingContent() {
-        return new TypeMapping.Builder()
-            .dynamic(DynamicMapping.Strict)
-            .routing(new RoutingField.Builder()
-                .required(true)
-                .build())
-            .properties(generateProperties())
-            .build();
-    }
-
-    private static Map<String, Property> generateProperties() {
-        return new ImmutableMap.Builder<String, Property>()
-            .put(JsonMessageConstants.MESSAGE_ID, new Property.Builder()
-                .keyword(new KeywordProperty.Builder().store(true).build())
-                .build())
-            .put(JsonMessageConstants.THREAD_ID, new Property.Builder()
-                .keyword(new KeywordProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.UID, new Property.Builder()
-                .long_(new LongNumberProperty.Builder().store(true).build())
-                .build())
-            .put(JsonMessageConstants.MODSEQ, new Property.Builder()
-                .long_(new LongNumberProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.SIZE, new Property.Builder()
-                .long_(new LongNumberProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.IS_ANSWERED, new Property.Builder()
-                .boolean_(new BooleanProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.IS_DELETED, new Property.Builder()
-                .boolean_(new BooleanProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.IS_DRAFT, new Property.Builder()
-                .boolean_(new BooleanProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.IS_FLAGGED, new Property.Builder()
-                .boolean_(new BooleanProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.IS_RECENT, new Property.Builder()
-                .boolean_(new BooleanProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.IS_UNREAD, new Property.Builder()
-                .boolean_(new BooleanProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.DATE, new Property.Builder()
-                .date(new DateProperty.Builder()
-                    
.format("uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX")
-                    .build())
-                .build())
-            .put(JsonMessageConstants.SENT_DATE, new Property.Builder()
-                .date(new DateProperty.Builder()
-                    
.format("uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX")
-                    .build())
-                .build())
-            .put(JsonMessageConstants.SAVE_DATE, new Property.Builder()
-                .date(new DateProperty.Builder()
-                    
.format("uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX")
-                    .build())
-                .build())
-            .put(JsonMessageConstants.USER_FLAGS, new Property.Builder()
-                .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                .build())
-            .put(JsonMessageConstants.MEDIA_TYPE, new Property.Builder()
-                .keyword(new KeywordProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.SUBTYPE, new Property.Builder()
-                .keyword(new KeywordProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.FROM, new Property.Builder()
-                .object(new ObjectProperty.Builder()
-                    .properties(ImmutableMap.of(
-                        JsonMessageConstants.EMailer.NAME, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(KEEP_MAIL_AND_URL)
-                                .fields(RAW, new Property.Builder()
-                                    .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                                    .build())
-                                .build())
-                            .build(),
-                        JsonMessageConstants.EMailer.DOMAIN, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(SIMPLE)
-                                .searchAnalyzer(KEYWORD)
-                                .build())
-                            .build(),
-                        JsonMessageConstants.EMailer.ADDRESS, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(STANDARD)
-                                .searchAnalyzer(KEEP_MAIL_AND_URL)
-                                .fields(RAW, new Property.Builder()
-                                    .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                                    .build())
-                                .build())
-                            .build()
-                    ))
-                    .build())
-                .build())
-            .put(JsonMessageConstants.HEADERS, new Property.Builder()
-                .nested(new NestedProperty.Builder()
-                    .properties(ImmutableMap.of(
-                        JsonMessageConstants.HEADER.NAME, new 
Property.Builder()
-                            .keyword(new KeywordProperty.Builder().build())
-                            .build(),
-                        JsonMessageConstants.HEADER.VALUE, new 
Property.Builder()
-                            .text(new 
TextProperty.Builder().analyzer(KEEP_MAIL_AND_URL).build())
-                            .build()
-                    ))
-                    .build())
-                .build())
-            .put(JsonMessageConstants.SUBJECT, new Property.Builder()
-                .text(new TextProperty.Builder()
-                    .analyzer(KEEP_MAIL_AND_URL)
-                    .fields(RAW, new Property.Builder()
-                        .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                        .build())
-                    .build())
-                .build())
-            .put(JsonMessageConstants.TO, new Property.Builder()
-                .object(new ObjectProperty.Builder()
-                    .properties(ImmutableMap.of(
-                        JsonMessageConstants.EMailer.NAME, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(KEEP_MAIL_AND_URL)
-                                .fields(RAW, new Property.Builder()
-                                    .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                                    .build())
-                                .build())
-                            .build(),
-                        JsonMessageConstants.EMailer.DOMAIN, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(SIMPLE)
-                                .searchAnalyzer(KEYWORD)
-                                .build())
-                            .build(),
-                        JsonMessageConstants.EMailer.ADDRESS, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(STANDARD)
-                                .searchAnalyzer(KEEP_MAIL_AND_URL)
-                                .fields(RAW, new Property.Builder()
-                                    .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                                    .build())
-                                .build())
-                            .build()
-                    ))
-                    .build())
-                .build())
-            .put(JsonMessageConstants.CC, new Property.Builder()
-                .object(new ObjectProperty.Builder()
-                    .properties(ImmutableMap.of(
-                        JsonMessageConstants.EMailer.NAME, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(KEEP_MAIL_AND_URL)
-                                .fields(RAW, new Property.Builder()
-                                    .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                                    .build())
-                                .build())
-                            .build(),
-                        JsonMessageConstants.EMailer.DOMAIN, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(SIMPLE)
-                                .searchAnalyzer(KEYWORD)
-                                .build())
-                            .build(),
-                        JsonMessageConstants.EMailer.ADDRESS, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(STANDARD)
-                                .searchAnalyzer(KEEP_MAIL_AND_URL)
-                                .fields(RAW, new Property.Builder()
-                                    .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                                    .build())
-                                .build())
-                            .build()
-                    ))
-                    .build())
-                .build())
-            .put(JsonMessageConstants.BCC, new Property.Builder()
-                .object(new ObjectProperty.Builder()
-                    .properties(ImmutableMap.of(
-                        JsonMessageConstants.EMailer.NAME, new 
Property.Builder()
-                            .text(new 
TextProperty.Builder().analyzer(KEEP_MAIL_AND_URL).build())
-                            .build(),
-                        JsonMessageConstants.EMailer.DOMAIN, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(SIMPLE)
-                                .searchAnalyzer(KEYWORD)
-                                .build())
-                            .build(),
-                        JsonMessageConstants.EMailer.ADDRESS, new 
Property.Builder()
-                            .text(new TextProperty.Builder()
-                                .analyzer(STANDARD)
-                                .searchAnalyzer(KEEP_MAIL_AND_URL)
-                                .fields(RAW, new Property.Builder()
-                                    .keyword(new 
KeywordProperty.Builder().normalizer(CASE_INSENSITIVE).build())
-                                    .build())
-                                .build())
-                            .build()
-                    ))
-                    .build())
-                .build())
-            .put(JsonMessageConstants.MAILBOX_ID, new Property.Builder()
-                .keyword(new KeywordProperty.Builder().store(true).build())
-                .build())
-            .put(JsonMessageConstants.MIME_MESSAGE_ID, new Property.Builder()
-                .keyword(new KeywordProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.USER, new Property.Builder()
-                .keyword(new KeywordProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.TEXT_BODY, new Property.Builder()
-                .text(new TextProperty.Builder().analyzer(STANDARD).build())
-                .build())
-            .put(JsonMessageConstants.HTML_BODY, new Property.Builder()
-                .text(new TextProperty.Builder().analyzer(STANDARD).build())
-                .build())
-            .put(JsonMessageConstants.HAS_ATTACHMENT, new Property.Builder()
-                .boolean_(new BooleanProperty.Builder().build())
-                .build())
-            .put(JsonMessageConstants.ATTACHMENTS, new Property.Builder()
-                .object(new ObjectProperty.Builder()
-                    .properties(ImmutableMap.of(
-                        JsonMessageConstants.Attachment.FILENAME, new 
Property.Builder()
-                            .text(new 
TextProperty.Builder().analyzer(STANDARD).build())
-                            .build(),
-                        JsonMessageConstants.Attachment.TEXT_CONTENT, new 
Property.Builder()
-                            .text(new 
TextProperty.Builder().analyzer(STANDARD).build())
-                            .build(),
-                        JsonMessageConstants.Attachment.MEDIA_TYPE, new 
Property.Builder()
-                            .keyword(new KeywordProperty.Builder().build())
-                            .build(),
-                        JsonMessageConstants.Attachment.SUBTYPE, new 
Property.Builder()
-                            .keyword(new KeywordProperty.Builder().build())
-                            .build(),
-                        JsonMessageConstants.Attachment.FILE_EXTENSION, new 
Property.Builder()
-                            .keyword(new KeywordProperty.Builder().build())
-                            .build(),
-                        JsonMessageConstants.Attachment.CONTENT_DISPOSITION, 
new Property.Builder()
-                            .keyword(new KeywordProperty.Builder().build())
-                            .build()
-                    ))
-                    .build())
-                .build())
-            .build();
-    }
+public interface MailboxMappingFactory {
+    TypeMapping getMappingContent();
 }
diff --git 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
index a2d2441303..88e35dbbc5 100644
--- 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
+++ 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
@@ -145,7 +145,8 @@ class OpenSearchIntegrationTest extends 
AbstractMessageSearchIndexTest {
         indexName = new IndexName(UUID.randomUUID().toString());
         MailboxIndexCreationUtil.prepareClient(
             client, readAliasName, writeAliasName, indexName,
-            openSearch.getDockerOpenSearch().configuration());
+            openSearch.getDockerOpenSearch().configuration(),
+            new DefaultMailboxMappingFactory());
 
         InMemoryIntegrationResources resources = 
InMemoryIntegrationResources.builder()
             .preProvisionnedFakeAuthenticator()
diff --git 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchNoIndexBodyIntegrationTest.java
 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchNoIndexBodyIntegrationTest.java
index 72b42ec897..e2db6f76bd 100644
--- 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchNoIndexBodyIntegrationTest.java
+++ 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchNoIndexBodyIntegrationTest.java
@@ -111,7 +111,7 @@ class OpenSearchNoIndexBodyIntegrationTest {
         WriteAliasName writeAliasName = new 
WriteAliasName(UUID.randomUUID().toString());
         indexName = new IndexName(UUID.randomUUID().toString());
         MailboxIndexCreationUtil.prepareClient(client, readAliasName, 
writeAliasName, indexName,
-            openSearch.getDockerOpenSearch().configuration());
+            openSearch.getDockerOpenSearch().configuration(), new 
DefaultMailboxMappingFactory());
 
         InMemoryIntegrationResources resources = 
InMemoryIntegrationResources.builder()
             .preProvisionnedFakeAuthenticator()
diff --git 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
index 74b3f41a25..7ca9e8bb82 100644
--- 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
+++ 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchQueryStringTest.java
@@ -111,7 +111,7 @@ class OpenSearchQueryStringTest {
         WriteAliasName writeAliasName = new 
WriteAliasName(UUID.randomUUID().toString());
         indexName = new IndexName(UUID.randomUUID().toString());
         MailboxIndexCreationUtil.prepareClient(client, readAliasName, 
writeAliasName, indexName,
-            openSearch.getDockerOpenSearch().configuration());
+            openSearch.getDockerOpenSearch().configuration(), new 
DefaultMailboxMappingFactory());
 
         OpenSearchMailboxConfiguration openSearchMailboxConfiguration = 
OpenSearchMailboxConfiguration.builder()
             .indexBody(IndexBody.YES)
diff --git 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java
 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java
index 34162e536f..9c81a9bb45 100644
--- 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java
+++ 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java
@@ -44,6 +44,7 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.opensearch.DefaultMailboxMappingFactory;
 import org.apache.james.mailbox.opensearch.IndexAttachments;
 import org.apache.james.mailbox.opensearch.IndexHeaders;
 import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
@@ -116,7 +117,7 @@ public class OpenSearchSearchHighlighterTest implements 
SearchHighLighterContrac
         IndexName indexName = new IndexName(UUID.randomUUID().toString());
         MailboxIndexCreationUtil.prepareClient(
             client, readAliasName, writeAliasName, indexName,
-            openSearch.getDockerOpenSearch().configuration());
+            openSearch.getDockerOpenSearch().configuration(), new 
DefaultMailboxMappingFactory());
 
         MailboxIdRoutingKeyFactory routingKeyFactory = new 
MailboxIdRoutingKeyFactory();
         OpenSearchMailboxConfiguration openSearchMailboxConfiguration = 
OpenSearchMailboxConfiguration.builder()
diff --git 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcherTest.java
 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcherTest.java
index 635f98b837..21cd6fad8b 100644
--- 
a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcherTest.java
+++ 
b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcherTest.java
@@ -48,6 +48,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.opensearch.DefaultMailboxMappingFactory;
 import org.apache.james.mailbox.opensearch.IndexAttachments;
 import org.apache.james.mailbox.opensearch.IndexHeaders;
 import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
@@ -117,7 +118,7 @@ class OpenSearchSearcherTest {
         WriteAliasName writeAliasName = new 
WriteAliasName(UUID.randomUUID().toString());
         indexName = new IndexName(UUID.randomUUID().toString());
         MailboxIndexCreationUtil.prepareClient(client, readAliasName, 
writeAliasName, indexName,
-            openSearch.getDockerOpenSearch().configuration());
+            openSearch.getDockerOpenSearch().configuration(), new 
DefaultMailboxMappingFactory());
 
         InMemoryIntegrationResources resources = 
InMemoryIntegrationResources.builder()
             .preProvisionnedFakeAuthenticator()
diff --git 
a/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
 
b/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
index 6481b3cd7d..51a0477372 100644
--- 
a/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
+++ 
b/server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
@@ -45,6 +45,7 @@ import 
org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.modules.mailbox.OpenSearchClientModule;
 import org.apache.james.modules.mailbox.OpenSearchDisabledModule;
+import org.apache.james.modules.mailbox.OpenSearchMailboxMappingModule;
 import org.apache.james.modules.mailbox.OpenSearchMailboxModule;
 import org.apache.james.modules.server.ReIndexingModule;
 import org.apache.james.quota.search.QuotaSearcher;
@@ -160,6 +161,7 @@ public class SearchModuleChooser {
         return switch (searchConfiguration.getImplementation()) {
             case OpenSearch -> ImmutableList.of(
                 new OpenSearchClientModule(),
+                new OpenSearchMailboxMappingModule(),
                 new OpenSearchMailboxModule(),
                 new ReIndexingModule(),
                 new OpenSearchHighlightModule());
diff --git 
a/server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxMappingModule.java
 
b/server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxMappingModule.java
new file mode 100644
index 0000000000..9c527394a2
--- /dev/null
+++ 
b/server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxMappingModule.java
@@ -0,0 +1,34 @@
+/****************************************************************
+ * 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.james.modules.mailbox;
+
+import org.apache.james.mailbox.opensearch.DefaultMailboxMappingFactory;
+import org.apache.james.mailbox.opensearch.MailboxMappingFactory;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Scopes;
+
+public class OpenSearchMailboxMappingModule extends AbstractModule {
+    @Override
+    protected void configure() {
+        bind(DefaultMailboxMappingFactory.class).in(Scopes.SINGLETON);
+        
bind(MailboxMappingFactory.class).to(DefaultMailboxMappingFactory.class);
+    }
+}
diff --git 
a/server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxModule.java
 
b/server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxModule.java
index 4abde88eac..16eb190553 100644
--- 
a/server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxModule.java
+++ 
b/server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxModule.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.opensearch.IndexAttachments;
 import org.apache.james.mailbox.opensearch.IndexHeaders;
 import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
 import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.MailboxMappingFactory;
 import org.apache.james.mailbox.opensearch.MailboxOpenSearchConstants;
 import org.apache.james.mailbox.opensearch.OpenSearchMailboxConfiguration;
 import 
org.apache.james.mailbox.opensearch.events.OpenSearchListeningMessageSearchIndex;
@@ -63,14 +64,17 @@ public class OpenSearchMailboxModule extends AbstractModule 
{
         private final OpenSearchConfiguration configuration;
         private final OpenSearchMailboxConfiguration mailboxConfiguration;
         private final ReactorOpenSearchClient client;
+        private final MailboxMappingFactory mailboxMappingFactory;
 
         @Inject
         MailboxIndexCreator(OpenSearchConfiguration configuration,
                             OpenSearchMailboxConfiguration 
mailboxConfiguration,
-                            ReactorOpenSearchClient client) {
+                            ReactorOpenSearchClient client,
+                            MailboxMappingFactory mailboxMappingFactory) {
             this.configuration = configuration;
             this.mailboxConfiguration = mailboxConfiguration;
             this.client = client;
+            this.mailboxMappingFactory = mailboxMappingFactory;
         }
 
         void createIndex() {
@@ -78,7 +82,8 @@ public class OpenSearchMailboxModule extends AbstractModule {
                 mailboxConfiguration.getReadAliasMailboxName(),
                 mailboxConfiguration.getWriteAliasMailboxName(),
                 mailboxConfiguration.getIndexMailboxName(),
-                configuration);
+                configuration,
+                mailboxMappingFactory);
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to