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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to