You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/03/08 01:13:54 UTC

[james-project] 10/14: JAMES-2665 Allow configuring directly "defaultProtocol" in mailrepositorystore.xml

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 c98b00f286e9d977e1ed5c88dfa0a51a4e29f79c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Mar 4 15:19:59 2019 +0700

    JAMES-2665 Allow configuring directly "defaultProtocol" in mailrepositorystore.xml
    
    This avoids the implicit knowledge of 'first configured protocol is the default one'
    
    Note that if none is configured, the previous behaviour is preserved.
---
 .../modules/vault/DeletedMessageVaultModule.java   |  2 +-
 .../memory/MailRepositoryStoreConfiguration.java   | 38 +++++++++++++++++-----
 .../MailRepositoryStoreConfigurationTest.java      | 20 +++++++-----
 .../mailets/ToSenderDomainRepositoryTest.java      |  6 ++--
 .../MailRepositoryDeletedMessageVaultTest.java     |  6 ++--
 .../apache/james/smtpserver/SMTPServerTest.java    |  6 ++--
 .../routes/MailRepositoriesRoutesTest.java         | 18 +++++-----
 .../webadmin/service/ReprocessingServiceTest.java  |  6 ++--
 8 files changed, 63 insertions(+), 39 deletions(-)

diff --git a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
index 3932537..dfdbd33 100644
--- a/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
+++ b/server/container/guice/mailbox-plugin-deleted-messages-vault-guice/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
@@ -51,7 +51,7 @@ public class DeletedMessageVaultModule extends AbstractModule {
             return MailRepositoryDeletedMessageVault.Configuration.from(configuration);
         } catch (Exception e) {
             LOGGER.warn("Error encountered while retrieving Deleted message vault configuration. Using default MailRepository URL instead.");
-            Protocol defaultProtocol = mailRepositoryStoreConfiguration.defaultProtocol()
+            Protocol defaultProtocol = mailRepositoryStoreConfiguration.getDefaultProtocol()
                 .orElseThrow(() -> new IllegalStateException("No default MailRepository Protocol could be inferred. We can not configure the default deletedMessages vault."));
 
             return new MailRepositoryDeletedMessageVault.Configuration(
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
index 1294df6..0a6db81 100644
--- a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
+++ b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
@@ -25,6 +25,7 @@ import java.util.Optional;
 
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.mailrepository.api.Protocol;
+import org.apache.james.util.OptionalUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -63,12 +64,27 @@ public class MailRepositoryStoreConfiguration {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(MailRepositoryStoreConfiguration.class);
 
+    public static MailRepositoryStoreConfiguration forItems(Item... items) {
+        return forItems(ImmutableList.copyOf(items));
+    }
+
+    public static MailRepositoryStoreConfiguration forItems(List<Item> items) {
+        Optional<Protocol> defaultProtocol = computeDefaultProtocol(items);
+
+        return new MailRepositoryStoreConfiguration(items, defaultProtocol);
+    }
+
     public static MailRepositoryStoreConfiguration parse(HierarchicalConfiguration configuration) {
-        return new MailRepositoryStoreConfiguration(
-            retrieveRegisteredClassConfiguration(configuration)
+        ImmutableList<Item> items = retrieveRegisteredClassConfiguration(configuration)
             .stream()
             .map(MailRepositoryStoreConfiguration::readItem)
-            .collect(Guavate.toImmutableList()));
+            .collect(Guavate.toImmutableList());
+
+        Optional<Protocol> defaultProtocol = OptionalUtils.or(
+            Optional.ofNullable(configuration.getString("defaultProtocol", null)).map(Protocol::new),
+            computeDefaultProtocol(items));
+
+        return new MailRepositoryStoreConfiguration(items, defaultProtocol);
     }
 
     private static List<HierarchicalConfiguration> retrieveRegisteredClassConfiguration(HierarchicalConfiguration configuration) {
@@ -80,6 +96,12 @@ public class MailRepositoryStoreConfiguration {
         }
     }
 
+    static Optional<Protocol> computeDefaultProtocol(List<Item> items) {
+        return items.stream()
+            .flatMap(item -> item.getProtocols().stream())
+            .findFirst();
+    }
+
     private static Item readItem(HierarchicalConfiguration configuration) {
         String className = configuration.getString("[@class]");
         List<Protocol> protocolStream = Arrays.stream(configuration.getStringArray("protocols.protocol")).map(Protocol::new).collect(Guavate.toImmutableList());
@@ -97,18 +119,18 @@ public class MailRepositoryStoreConfiguration {
 
 
     private final List<Item> items;
+    private final Optional<Protocol> defaultProtocol;
 
-    public MailRepositoryStoreConfiguration(List<Item> items) {
+    public MailRepositoryStoreConfiguration(List<Item> items, Optional<Protocol> defaultProtocol) {
         this.items = items;
+        this.defaultProtocol = defaultProtocol;
     }
 
     public List<Item> getItems() {
         return items;
     }
 
-    public Optional<Protocol> defaultProtocol() {
-        return items.stream()
-            .flatMap(item -> item.getProtocols().stream())
-            .findFirst();
+    public Optional<Protocol> getDefaultProtocol() {
+        return defaultProtocol;
     }
 }
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
index c2959ff..4f9dd4a 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
@@ -21,45 +21,47 @@ package org.apache.james.mailrepository.memory;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.util.Optional;
+
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.mailrepository.api.Protocol;
 import org.junit.jupiter.api.Test;
 
 import com.google.common.collect.ImmutableList;
 
-public class MailRepositoryStoreConfigurationTest {
+class MailRepositoryStoreConfigurationTest {
     @Test
     void defaultProtocolShouldReturnEmptyWhenEmpty() {
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(ImmutableList.of());
+        Optional<Protocol> defaultProtocol = MailRepositoryStoreConfiguration.computeDefaultProtocol(ImmutableList.of());
 
-        assertThat(configuration.defaultProtocol()).isEmpty();
+        assertThat(defaultProtocol).isEmpty();
     }
 
     @Test
     void defaultProtocolShouldReturnEmptyWhenEmptyItems() {
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(ImmutableList.of(
+        Optional<Protocol> defaultProtocol = MailRepositoryStoreConfiguration.computeDefaultProtocol(ImmutableList.of(
             new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(),
                 "class.fqdn",
                 new HierarchicalConfiguration())));
 
-        assertThat(configuration.defaultProtocol()).isEmpty();
+        assertThat(defaultProtocol).isEmpty();
     }
 
     @Test
     void defaultProtocolShouldReturnFirstConfiguredProtocol() {
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(ImmutableList.of(
+        Optional<Protocol> defaultProtocol = MailRepositoryStoreConfiguration.computeDefaultProtocol(ImmutableList.of(
             new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(new Protocol("1"), new Protocol("2")),
                 "class.fqdn",
                 new HierarchicalConfiguration())));
 
-        assertThat(configuration.defaultProtocol()).contains(new Protocol("1"));
+        assertThat(defaultProtocol).contains(new Protocol("1"));
     }
 
     @Test
     void defaultProtocolShouldSkipItemsWithNoProtocols() {
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(ImmutableList.of(
+        Optional<Protocol> defaultProtocol = MailRepositoryStoreConfiguration.computeDefaultProtocol(ImmutableList.of(
             new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(),
                 "class.fqdn",
@@ -69,6 +71,6 @@ public class MailRepositoryStoreConfigurationTest {
                 "class.fqdn",
                 new HierarchicalConfiguration())));
 
-        assertThat(configuration.defaultProtocol()).contains(new Protocol("1"));
+        assertThat(defaultProtocol).contains(new Protocol("1"));
     }
 }
\ No newline at end of file
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
index 5f0cd05..ddbd1fb 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
@@ -69,11 +69,11 @@ class ToSenderDomainRepositoryTest {
 
     private void createMailRepositoryStore() throws Exception {
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
-            ImmutableList.of(new MailRepositoryStoreConfiguration.Item(
+        MailRepositoryStoreConfiguration configuration = MailRepositoryStoreConfiguration.forItems(
+           new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(new Protocol("memory")),
                 MemoryMailRepository.class.getName(),
-                new HierarchicalConfiguration())));
+                new HierarchicalConfiguration()));
 
         mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()), configuration);
         mailRepositoryStore.init();
diff --git a/server/mailrepository/deleted-messages-vault-repository/src/test/java/org/apache/james/vault/MailRepositoryDeletedMessageVaultTest.java b/server/mailrepository/deleted-messages-vault-repository/src/test/java/org/apache/james/vault/MailRepositoryDeletedMessageVaultTest.java
index 9220f45..87c6205 100644
--- a/server/mailrepository/deleted-messages-vault-repository/src/test/java/org/apache/james/vault/MailRepositoryDeletedMessageVaultTest.java
+++ b/server/mailrepository/deleted-messages-vault-repository/src/test/java/org/apache/james/vault/MailRepositoryDeletedMessageVaultTest.java
@@ -40,11 +40,11 @@ public class MailRepositoryDeletedMessageVaultTest implements DeletedMessageVaul
 
     @BeforeEach
     void setUp() throws Exception {
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
-            ImmutableList.of(new MailRepositoryStoreConfiguration.Item(
+        MailRepositoryStoreConfiguration configuration = MailRepositoryStoreConfiguration.forItems(
+            new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(new Protocol("memory")),
                 MemoryMailRepository.class.getName(),
-                new HierarchicalConfiguration())));
+                new HierarchicalConfiguration()));
         
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
         MemoryMailRepositoryStore mailRepositoryStore = new MemoryMailRepositoryStore(urlStore,
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 8c0e472..8fddc5c 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -204,11 +204,11 @@ public class SMTPServerTest {
         fileSystem = new FileSystemImpl(configuration.directories());
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
 
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
-            ImmutableList.of(new MailRepositoryStoreConfiguration.Item(
+        MailRepositoryStoreConfiguration configuration = MailRepositoryStoreConfiguration.forItems(
+            new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(new Protocol("memory")),
                 MemoryMailRepository.class.getName(),
-                new HierarchicalConfiguration())));
+                new HierarchicalConfiguration()));
 
         mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()), configuration);
         mailRepositoryStore.init();
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 2c20f27..430e0c6 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -1754,15 +1754,15 @@ public class MailRepositoriesRoutesTest {
 
     private void createMailRepositoryStore() throws Exception {
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
-            ImmutableList.of(new MailRepositoryStoreConfiguration.Item(
-                    ImmutableList.of(new Protocol("memory")),
-                    MemoryMailRepository.class.getName(),
-                    new HierarchicalConfiguration()),
-                new MailRepositoryStoreConfiguration.Item(
-                    ImmutableList.of(new Protocol("other")),
-                    MemoryMailRepository.class.getName(),
-                    new HierarchicalConfiguration())));
+        MailRepositoryStoreConfiguration configuration = MailRepositoryStoreConfiguration.forItems(
+            new MailRepositoryStoreConfiguration.Item(
+                ImmutableList.of(new Protocol("memory")),
+                MemoryMailRepository.class.getName(),
+                new HierarchicalConfiguration()),
+            new MailRepositoryStoreConfiguration.Item(
+                ImmutableList.of(new Protocol("other")),
+                MemoryMailRepository.class.getName(),
+                new HierarchicalConfiguration()));
         mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()), configuration);
 
         mailRepositoryStore.init();
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
index 4ffbe90..09a32be 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
@@ -179,11 +179,11 @@ public class ReprocessingServiceTest {
 
     private MemoryMailRepositoryStore createMemoryMailRepositoryStore() throws Exception {
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
-            ImmutableList.of(new MailRepositoryStoreConfiguration.Item(
+        MailRepositoryStoreConfiguration configuration = MailRepositoryStoreConfiguration.forItems(
+            new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(new Protocol("memory")),
                 MemoryMailRepository.class.getName(),
-                new HierarchicalConfiguration())));
+                new HierarchicalConfiguration()));
 
         MemoryMailRepositoryStore mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()), configuration);
         mailRepositoryStore.init();


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