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

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

commit 70fb5d12f92024a07b73474028db92b25c29d129
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Sat Oct 12 10:45:58 2019 +0700

    JAMES-2917 Factorize RoutingKey generation logic
---
 .../org/apache/james/backends/es/RoutingKey.java   |  4 ++
 .../elasticsearch/MailboxIdRoutingKeyFactory.java  | 41 +++----------------
 .../ElasticSearchListeningMessageSearchIndex.java  | 16 ++++----
 .../search/ElasticSearchSearcher.java              | 10 ++++-
 .../ElasticSearchIntegrationTest.java              |  5 ++-
 .../MailboxIdRoutingKeyFactoryTest.java            | 47 +++++-----------------
 ...asticSearchListeningMessageSearchIndexTest.java |  8 ++--
 .../elasticsearch/UserRoutingKeyFactory.java       | 41 +++----------------
 .../events/ElasticSearchQuotaMailboxListener.java  | 14 +++----
 ...lasticSearchQuotaSearchTestSystemExtension.java |  3 +-
 .../elasticsearch/UserRoutingKeyFactoryTest.java   | 47 +++++-----------------
 .../ElasticSearchQuotaMailboxListenerTest.java     |  4 +-
 .../host/ElasticSearchHostSystem.java              |  6 ++-
 .../mailbox/ElasticSearchMailboxModule.java        | 10 ++++-
 .../mailbox/ElasticSearchQuotaSearcherModule.java  |  4 +-
 .../routes/ElasticSearchQuotaSearchExtension.java  |  4 +-
 16 files changed, 90 insertions(+), 174 deletions(-)

diff --git 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
 
b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
index 05021e5..6ce3598 100644
--- 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
+++ 
b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
@@ -26,6 +26,10 @@ import org.elasticsearch.common.Strings;
 import com.google.common.base.Preconditions;
 
 public class RoutingKey {
+    public interface Factory<T> {
+        RoutingKey from(T t);
+    }
+
     public static RoutingKey fromString(String value) {
         return new RoutingKey(value);
     }
diff --git 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactory.java
similarity index 58%
copy from 
backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
copy to 
mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactory.java
index 05021e5..56fc834 100644
--- 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactory.java
@@ -17,43 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es;
+package org.apache.james.mailbox.elasticsearch;
 
-import java.util.Objects;
-
-import org.elasticsearch.common.Strings;
-
-import com.google.common.base.Preconditions;
-
-public class RoutingKey {
-    public static RoutingKey fromString(String value) {
-        return new RoutingKey(value);
-    }
-
-
-    private final String value;
-
-    private RoutingKey(String value) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey 
must be specified");
-        this.value = value;
-    }
-
-    public String asString() {
-        return value;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof RoutingKey) {
-            RoutingKey that = (RoutingKey) o;
-
-            return Objects.equals(this.value, that.value);
-        }
-        return false;
-    }
+import org.apache.james.backends.es.RoutingKey;
+import org.apache.james.mailbox.model.MailboxId;
 
+public class MailboxIdRoutingKeyFactory implements 
RoutingKey.Factory<MailboxId> {
     @Override
-    public final int hashCode() {
-        return Objects.hash(value);
+    public RoutingKey from(MailboxId mailboxId) {
+        return RoutingKey.fromString(mailboxId.serialize());
     }
 }
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index c695b85..7cf681a 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -75,16 +75,18 @@ public class ElasticSearchListeningMessageSearchIndex 
extends ListeningMessageSe
     private final ElasticSearchIndexer elasticSearchIndexer;
     private final ElasticSearchSearcher searcher;
     private final MessageToElasticSearchJson messageToElasticSearchJson;
+    private final RoutingKey.Factory<MailboxId> routingKeyFactory;
 
     @Inject
     public 
ElasticSearchListeningMessageSearchIndex(MailboxSessionMapperFactory factory,
                                                     
@Named(MailboxElasticSearchConstants.InjectionNames.MAILBOX) 
ElasticSearchIndexer indexer,
                                                     ElasticSearchSearcher 
searcher, MessageToElasticSearchJson messageToElasticSearchJson,
-                                                    SessionProvider 
sessionProvider) {
+                                                    SessionProvider 
sessionProvider, RoutingKey.Factory<MailboxId> routingKeyFactory) {
         super(factory, sessionProvider);
         this.elasticSearchIndexer = indexer;
         this.messageToElasticSearchJson = messageToElasticSearchJson;
         this.searcher = searcher;
+        this.routingKeyFactory = routingKeyFactory;
     }
 
     @Override
@@ -142,7 +144,7 @@ public class ElasticSearchListeningMessageSearchIndex 
extends ListeningMessageSe
 
         String jsonContent = generateIndexedJson(mailbox, message, session);
 
-        elasticSearchIndexer.index(indexIdFor(mailbox, message.getUid()), 
jsonContent, toRoutingKey(mailbox.getMailboxId()));
+        elasticSearchIndexer.index(indexIdFor(mailbox, message.getUid()), 
jsonContent, routingKeyFactory.from(mailbox.getMailboxId()));
     }
 
     private String generateIndexedJson(Mailbox mailbox, MailboxMessage 
message, MailboxSession session) throws JsonProcessingException {
@@ -165,7 +167,7 @@ public class ElasticSearchListeningMessageSearchIndex 
extends ListeningMessageSe
                 .delete(expungedUids.stream()
                     .map(uid ->  indexIdFor(mailbox, uid))
                     .collect(Guavate.toImmutableList()),
-                    toRoutingKey(mailbox.getMailboxId()));
+                    routingKeyFactory.from(mailbox.getMailboxId()));
     }
 
     @Override
@@ -175,7 +177,7 @@ public class ElasticSearchListeningMessageSearchIndex 
extends ListeningMessageSe
             mailboxId.serialize());
 
         elasticSearchIndexer
-                .deleteAllMatchingQuery(queryBuilder, toRoutingKey(mailboxId));
+                .deleteAllMatchingQuery(queryBuilder, 
routingKeyFactory.from(mailboxId));
     }
 
     @Override
@@ -186,7 +188,7 @@ public class ElasticSearchListeningMessageSearchIndex 
extends ListeningMessageSe
                 .sneakyThrow())
             .collect(Guavate.toImmutableList());
 
-        elasticSearchIndexer.update(updates, 
toRoutingKey(mailbox.getMailboxId()));
+        elasticSearchIndexer.update(updates, 
routingKeyFactory.from(mailbox.getMailboxId()));
     }
 
     private UpdatedRepresentation 
createUpdatedDocumentPartFromUpdatedFlags(Mailbox mailbox, UpdatedFlags 
updatedFlags) throws JsonProcessingException {
@@ -205,8 +207,4 @@ public class ElasticSearchListeningMessageSearchIndex 
extends ListeningMessageSe
             LOGGER.error("No messageUid for {} in mailbox {}", 
searchResult.getMessageUid(), searchResult.getMailboxId());
         }
     }
-
-    private RoutingKey toRoutingKey(MailboxId mailboxId) {
-        return RoutingKey.fromString(mailboxId.serialize());
-    }
 }
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
index 48b67e4..bd3e629 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/search/ElasticSearchSearcher.java
@@ -26,6 +26,7 @@ import java.util.stream.Stream;
 import org.apache.james.backends.es.AliasName;
 import org.apache.james.backends.es.NodeMappingFactory;
 import org.apache.james.backends.es.ReadAliasName;
+import org.apache.james.backends.es.RoutingKey;
 import org.apache.james.backends.es.search.ScrolledSearch;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
@@ -59,16 +60,18 @@ public class ElasticSearchSearcher {
     private final MailboxId.Factory mailboxIdFactory;
     private final MessageId.Factory messageIdFactory;
     private final AliasName aliasName;
+    private final RoutingKey.Factory<MailboxId> routingKeyFactory;
 
     public ElasticSearchSearcher(RestHighLevelClient client, QueryConverter 
queryConverter, int size,
                                  MailboxId.Factory mailboxIdFactory, 
MessageId.Factory messageIdFactory,
-                                 ReadAliasName aliasName) {
+                                 ReadAliasName aliasName, 
RoutingKey.Factory<MailboxId> routingKeyFactory) {
         this.client = client;
         this.queryConverter = queryConverter;
         this.size = size;
         this.mailboxIdFactory = mailboxIdFactory;
         this.messageIdFactory = messageIdFactory;
         this.aliasName = aliasName;
+        this.routingKeyFactory = routingKeyFactory;
     }
 
     public Stream<MessageSearchIndex.SearchResult> 
search(Collection<MailboxId> mailboxIds, SearchQuery query,
@@ -101,7 +104,10 @@ public class ElasticSearchSearcher {
     }
 
     private String[] toRoutingKeys(Collection<MailboxId> mailboxIds) {
-        return 
mailboxIds.stream().map(MailboxId::serialize).toArray(String[]::new);
+        return mailboxIds.stream()
+            .map(routingKeyFactory::from)
+            .map(RoutingKey::asString)
+            .toArray(String[]::new);
     }
 
     private int computeRequiredSize(Optional<Integer> limit) {
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 55fca6a..8643f1b 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -97,6 +97,7 @@ public class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest
             elasticSearch.getDockerElasticSearch().configuration());
 
         InMemoryMessageId.Factory messageIdFactory = new 
InMemoryMessageId.Factory();
+        MailboxIdRoutingKeyFactory routingKeyFactory = new 
MailboxIdRoutingKeyFactory();
 
         InMemoryIntegrationResources resources = 
InMemoryIntegrationResources.builder()
             .preProvisionnedFakeAuthenticator()
@@ -111,9 +112,9 @@ public class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest
                     BATCH_SIZE),
                 new ElasticSearchSearcher(client, new QueryConverter(new 
CriterionConverter()), SEARCH_SIZE,
                     new InMemoryId.Factory(), messageIdFactory,
-                    MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS),
+                    MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS, 
routingKeyFactory),
                 new MessageToElasticSearchJson(textExtractor, 
ZoneId.of("Europe/Paris"), IndexAttachments.YES),
-                preInstanciationStage.getSessionProvider()))
+                preInstanciationStage.getSessionProvider(), routingKeyFactory))
             .noPreDeletionHooks()
             .storeQuotaManager()
             .build();
diff --git 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactoryTest.java
similarity index 57%
copy from 
backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
copy to 
mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactoryTest.java
index 05021e5..b666ffa 100644
--- 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/MailboxIdRoutingKeyFactoryTest.java
@@ -17,43 +17,18 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es;
+package org.apache.james.mailbox.elasticsearch;
 
-import java.util.Objects;
+import static org.assertj.core.api.Assertions.assertThat;
 
-import org.elasticsearch.common.Strings;
+import org.apache.james.backends.es.RoutingKey;
+import org.apache.james.mailbox.model.TestId;
+import org.junit.jupiter.api.Test;
 
-import com.google.common.base.Preconditions;
-
-public class RoutingKey {
-    public static RoutingKey fromString(String value) {
-        return new RoutingKey(value);
-    }
-
-
-    private final String value;
-
-    private RoutingKey(String value) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey 
must be specified");
-        this.value = value;
-    }
-
-    public String asString() {
-        return value;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof RoutingKey) {
-            RoutingKey that = (RoutingKey) o;
-
-            return Objects.equals(this.value, that.value);
-        }
-        return false;
-    }
-
-    @Override
-    public final int hashCode() {
-        return Objects.hash(value);
+class MailboxIdRoutingKeyFactoryTest {
+    @Test
+    void fromShouldRelyOnSerializedMailboxId() {
+        assertThat(new MailboxIdRoutingKeyFactory().from(TestId.of(5)))
+            .isEqualTo(RoutingKey.fromString("5"));
     }
-}
+}
\ No newline at end of file
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
index e2df49a..a126eb9 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndexTest.java
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.elasticsearch.MailboxIdRoutingKeyFactory;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.query.CriterionConverter;
@@ -160,7 +161,8 @@ public class ElasticSearchListeningMessageSearchIndexTest {
             ElasticSearchSearcher.DEFAULT_SEARCH_SIZE,
             new InMemoryId.Factory(),
             messageIdFactory,
-            MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS);
+            MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS,
+            new MailboxIdRoutingKeyFactory());
 
         FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
         fakeAuthenticator.addUser(ManagerTestProvisionner.USER, 
ManagerTestProvisionner.USER_PASS);
@@ -170,7 +172,7 @@ public class ElasticSearchListeningMessageSearchIndexTest {
         elasticSearchIndexer = new ElasticSearchIndexer(client, 
MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS);
         
         testee = new ElasticSearchListeningMessageSearchIndex(mapperFactory, 
elasticSearchIndexer, elasticSearchSearcher,
-            messageToElasticSearchJson, sessionProvider);
+            messageToElasticSearchJson, sessionProvider, new 
MailboxIdRoutingKeyFactory());
         session = sessionProvider.createSystemSession(USERNAME);
 
         mailbox = new Mailbox(MailboxPath.forUser(USERNAME, 
DefaultMailboxes.INBOX), MAILBOX_ID.id);
@@ -236,7 +238,7 @@ public class ElasticSearchListeningMessageSearchIndexTest {
             IndexAttachments.YES);
 
         testee = new ElasticSearchListeningMessageSearchIndex(mapperFactory, 
elasticSearchIndexer, elasticSearchSearcher,
-            messageToElasticSearchJson, sessionProvider);
+            messageToElasticSearchJson, sessionProvider, new 
MailboxIdRoutingKeyFactory());
 
         testee.add(session, mailbox, MESSAGE_WITH_ATTACHMENT);
         elasticSearch.awaitForElasticSearch();
diff --git 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
 
b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactory.java
similarity index 58%
copy from 
backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
copy to 
mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactory.java
index 05021e5..46abf86 100644
--- 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
+++ 
b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactory.java
@@ -17,43 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es;
+package org.apache.james.quota.search.elasticsearch;
 
-import java.util.Objects;
-
-import org.elasticsearch.common.Strings;
-
-import com.google.common.base.Preconditions;
-
-public class RoutingKey {
-    public static RoutingKey fromString(String value) {
-        return new RoutingKey(value);
-    }
-
-
-    private final String value;
-
-    private RoutingKey(String value) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey 
must be specified");
-        this.value = value;
-    }
-
-    public String asString() {
-        return value;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof RoutingKey) {
-            RoutingKey that = (RoutingKey) o;
-
-            return Objects.equals(this.value, that.value);
-        }
-        return false;
-    }
+import org.apache.james.backends.es.RoutingKey;
+import org.apache.james.core.User;
 
+public class UserRoutingKeyFactory implements RoutingKey.Factory<User> {
     @Override
-    public final int hashCode() {
-        return Objects.hash(value);
+    public RoutingKey from(User user) {
+        return RoutingKey.fromString(user.asString());
     }
 }
diff --git 
a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
 
b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index 7d27e53..c03a4f8 100644
--- 
a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ 
b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -42,13 +42,15 @@ public class ElasticSearchQuotaMailboxListener implements 
MailboxListener.GroupM
 
     private final ElasticSearchIndexer indexer;
     private final QuotaRatioToElasticSearchJson quotaRatioToElasticSearchJson;
+    private final RoutingKey.Factory<User> routingKeyFactory;
 
     @Inject
-    public ElasticSearchQuotaMailboxListener(
-        @Named(QuotaRatioElasticSearchConstants.InjectionNames.QUOTA_RATIO) 
ElasticSearchIndexer indexer,
-        QuotaRatioToElasticSearchJson quotaRatioToElasticSearchJson) {
+    public 
ElasticSearchQuotaMailboxListener(@Named(QuotaRatioElasticSearchConstants.InjectionNames.QUOTA_RATIO)
 ElasticSearchIndexer indexer,
+                                             QuotaRatioToElasticSearchJson 
quotaRatioToElasticSearchJson,
+                                             RoutingKey.Factory<User> 
routingKeyFactory) {
         this.indexer = indexer;
         this.quotaRatioToElasticSearchJson = quotaRatioToElasticSearchJson;
+        this.routingKeyFactory = routingKeyFactory;
     }
 
     @Override
@@ -70,11 +72,7 @@ public class ElasticSearchQuotaMailboxListener implements 
MailboxListener.GroupM
         User user = event.getUser();
         indexer.index(toDocumentId(user),
             quotaRatioToElasticSearchJson.convertToJson(event),
-            toRoutingKey(user));
-    }
-
-    private RoutingKey toRoutingKey(User user) {
-        return RoutingKey.fromString(user.asString());
+            routingKeyFactory.from(user));
     }
 
     private DocumentId toDocumentId(User user) {
diff --git 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
index bdeaf8d..9af1dc6 100644
--- 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
+++ 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -70,7 +70,8 @@ public class ElasticSearchQuotaSearchTestSystemExtension 
implements ParameterRes
             ElasticSearchQuotaMailboxListener listener = new 
ElasticSearchQuotaMailboxListener(
                 new ElasticSearchIndexer(client,
                     
QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS),
-                new QuotaRatioToElasticSearchJson());
+                new QuotaRatioToElasticSearchJson(),
+                new UserRoutingKeyFactory());
 
             resources.getMailboxManager().getEventBus().register(listener);
 
diff --git 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactoryTest.java
similarity index 57%
copy from 
backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
copy to 
mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactoryTest.java
index 05021e5..c1a2102 100644
--- 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/RoutingKey.java
+++ 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/UserRoutingKeyFactoryTest.java
@@ -17,43 +17,18 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es;
+package org.apache.james.quota.search.elasticsearch;
 
-import java.util.Objects;
+import static org.assertj.core.api.Assertions.assertThat;
 
-import org.elasticsearch.common.Strings;
+import org.apache.james.backends.es.RoutingKey;
+import org.apache.james.core.User;
+import org.junit.jupiter.api.Test;
 
-import com.google.common.base.Preconditions;
-
-public class RoutingKey {
-    public static RoutingKey fromString(String value) {
-        return new RoutingKey(value);
-    }
-
-
-    private final String value;
-
-    private RoutingKey(String value) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(value), "RoutingKey 
must be specified");
-        this.value = value;
-    }
-
-    public String asString() {
-        return value;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof RoutingKey) {
-            RoutingKey that = (RoutingKey) o;
-
-            return Objects.equals(this.value, that.value);
-        }
-        return false;
-    }
-
-    @Override
-    public final int hashCode() {
-        return Objects.hash(value);
+class UserRoutingKeyFactoryTest {
+    @Test
+    void fromShouldRelyOnUsername() {
+        assertThat(new UserRoutingKeyFactory().from(User.fromUsername("bob")))
+            .isEqualTo(RoutingKey.fromString("bob"));
     }
-}
+}
\ No newline at end of file
diff --git 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
index 69e55e8..9cdd817 100644
--- 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
+++ 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
@@ -37,6 +37,7 @@ import org.apache.james.mailbox.quota.QuotaFixture.Sizes;
 import org.apache.james.mailbox.store.event.EventFactory;
 import 
org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import 
org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
+import org.apache.james.quota.search.elasticsearch.UserRoutingKeyFactory;
 import 
org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
@@ -70,7 +71,8 @@ public class ElasticSearchQuotaMailboxListenerTest {
             new ElasticSearchIndexer(client,
                 
QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS,
                 BATCH_SIZE),
-            new QuotaRatioToElasticSearchJson());
+            new QuotaRatioToElasticSearchJson(),
+            new UserRoutingKeyFactory());
     }
 
     @After
diff --git 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 87151a2..b84bc80 100644
--- 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -36,6 +36,7 @@ import 
org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.elasticsearch.MailboxIdRoutingKeyFactory;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
 import 
org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
 import org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
@@ -86,6 +87,7 @@ public class ElasticSearchHostSystem extends 
JamesImapHostSystem {
                 .build());
 
         InMemoryMessageId.Factory messageIdFactory = new 
InMemoryMessageId.Factory();
+        MailboxIdRoutingKeyFactory routingKeyFactory = new 
MailboxIdRoutingKeyFactory();
 
         InMemoryIntegrationResources resources = 
InMemoryIntegrationResources.builder()
             .authenticator(authenticator)
@@ -99,9 +101,9 @@ public class ElasticSearchHostSystem extends 
JamesImapHostSystem {
                     MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS),
                 new ElasticSearchSearcher(client, new QueryConverter(new 
CriterionConverter()), ElasticSearchSearcher.DEFAULT_SEARCH_SIZE,
                     new InMemoryId.Factory(), messageIdFactory,
-                    MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS),
+                    MailboxElasticSearchConstants.DEFAULT_MAILBOX_READ_ALIAS, 
routingKeyFactory),
                 new MessageToElasticSearchJson(new DefaultTextExtractor(), 
ZoneId.of("Europe/Paris"), IndexAttachments.YES),
-                preInstanciationStage.getSessionProvider()))
+                preInstanciationStage.getSessionProvider(), routingKeyFactory))
             .noPreDeletionHooks()
             .storeQuotaManager()
             .build();
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 6bd4f54..bcc8148 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -32,11 +32,13 @@ import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.backends.es.RoutingKey;
 import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.lifecycle.api.Startable;
 import 
org.apache.james.mailbox.elasticsearch.ElasticSearchMailboxConfiguration;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.elasticsearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.elasticsearch.MailboxIdRoutingKeyFactory;
 import org.apache.james.mailbox.elasticsearch.MailboxIndexCreationUtil;
 import 
org.apache.james.mailbox.elasticsearch.events.ElasticSearchListeningMessageSearchIndex;
 import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
@@ -56,6 +58,7 @@ import org.slf4j.LoggerFactory;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Scopes;
+import com.google.inject.TypeLiteral;
 import com.google.inject.multibindings.Multibinder;
 import com.google.inject.multibindings.ProvidesIntoSet;
 
@@ -97,6 +100,8 @@ public class ElasticSearchMailboxModule extends 
AbstractModule {
         
bind(MessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
         
bind(ListeningMessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
 
+        bind(new TypeLiteral<RoutingKey.Factory<MailboxId>>() 
{}).to(MailboxIdRoutingKeyFactory.class);
+
         Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ElasticSearchListeningMessageSearchIndex.class);
@@ -122,14 +127,15 @@ public class ElasticSearchMailboxModule extends 
AbstractModule {
                                                                      
QueryConverter queryConverter,
                                                                      
MailboxId.Factory mailboxIdFactory,
                                                                      
MessageId.Factory messageIdFactory,
-                                                                     
ElasticSearchMailboxConfiguration configuration) {
+                                                                     
ElasticSearchMailboxConfiguration configuration,
+                                                                     
RoutingKey.Factory<MailboxId> routingKeyFactory) {
         return new ElasticSearchSearcher(
             client,
             queryConverter,
             DEFAULT_SEARCH_SIZE,
             mailboxIdFactory,
             messageIdFactory,
-            configuration.getReadAliasMailboxName());
+            configuration.getReadAliasMailboxName(), routingKeyFactory);
     }
 
     @Provides
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index fc98f6e..eb4f9b4 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -36,6 +36,7 @@ import org.apache.james.quota.search.QuotaSearcher;
 import 
org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaConfiguration;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
 import 
org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
+import org.apache.james.quota.search.elasticsearch.UserRoutingKeyFactory;
 import 
org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import 
org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.apache.james.utils.InitializationOperation;
@@ -111,7 +112,8 @@ public class ElasticSearchQuotaSearcherModule extends 
AbstractModule {
         return new ElasticSearchQuotaMailboxListener(
             new ElasticSearchIndexer(client,
                 configuration.getWriteAliasQuotaRatioName()),
-                new QuotaRatioToElasticSearchJson());
+                new QuotaRatioToElasticSearchJson(),
+            new UserRoutingKeyFactory());
     }
 
     @ProvidesIntoSet
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index a469985..5cbe210 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -35,6 +35,7 @@ import org.apache.james.quota.search.QuotaSearchTestSystem;
 import org.apache.james.quota.search.elasticsearch.ElasticSearchQuotaSearcher;
 import 
org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import 
org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
+import org.apache.james.quota.search.elasticsearch.UserRoutingKeyFactory;
 import 
org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import 
org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.apache.james.user.memory.MemoryUsersRepository;
@@ -76,7 +77,8 @@ public class ElasticSearchQuotaSearchExtension implements 
ParameterResolver, Bef
 
             ElasticSearchQuotaMailboxListener listener = new 
ElasticSearchQuotaMailboxListener(
                 new ElasticSearchIndexer(client, 
QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS),
-                new QuotaRatioToElasticSearchJson());
+                new QuotaRatioToElasticSearchJson(),
+                new UserRoutingKeyFactory());
 
             resources.getMailboxManager().getEventBus().register(listener);
 


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

Reply via email to