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