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]
