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/04 09:23:01 UTC

[james-project] 04/04: MAILBOX-381 MemoryMailRepositoryStore configuration should be final

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 961ee9b70d905bc54d53710fcaf1fd566a046353
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Feb 28 11:44:02 2019 +0700

    MAILBOX-381 MemoryMailRepositoryStore configuration should be final
    
    Also the POJO should be injected to allow easy overloads
---
 .../modules/server/MailStoreRepositoryModule.java    | 18 ++++++++++++------
 .../memory/MemoryMailRepositoryStore.java            | 17 +++++------------
 .../memory/MemoryMailRepositoryStoreTest.java        | 20 +++++++++++++-------
 .../mailets/ToSenderDomainRepositoryTest.java        |  7 ++++---
 .../vault/MailRepositoryDeletedMessageVaultTest.java | 13 ++++++++-----
 .../org/apache/james/smtpserver/SMTPServerTest.java  |  7 +++++--
 .../webadmin/routes/MailRepositoriesRoutesTest.java  |  6 ++++--
 .../webadmin/service/ReprocessingServiceTest.java    |  7 ++++---
 8 files changed, 55 insertions(+), 40 deletions(-)

diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
index d48c619..66bc204 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
@@ -21,10 +21,13 @@ package org.apache.james.modules.server;
 
 import java.util.List;
 
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailrepository.api.MailRepositoryProvider;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.file.FileMailRepositoryProvider;
+import org.apache.james.mailrepository.memory.MailRepositoryStoreConfiguration;
 import org.apache.james.mailrepository.memory.MemoryMailRepositoryStore;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.utils.ConfigurationPerformer;
@@ -34,6 +37,7 @@ import org.apache.james.utils.MailRepositoryProbeImpl;
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
+import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
@@ -51,23 +55,25 @@ public class MailStoreRepositoryModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), GuiceProbe.class).addBinding().to(MailRepositoryProbeImpl.class);
     }
 
+    @Provides
     @Singleton
-    public static class MailRepositoryStoreModuleConfigurationPerformer implements ConfigurationPerformer {
+    MailRepositoryStoreConfiguration provideConfiguration(ConfigurationProvider configurationProvider) throws ConfigurationException {
+        HierarchicalConfiguration configuration = configurationProvider.getConfiguration("mailrepositorystore");
+        return MailRepositoryStoreConfiguration.parse(configuration);
+    }
 
-        private final ConfigurationProvider configurationProvider;
+    @Singleton
+    public static class MailRepositoryStoreModuleConfigurationPerformer implements ConfigurationPerformer {
         private final MemoryMailRepositoryStore javaMailRepositoryStore;
 
         @Inject
-        public MailRepositoryStoreModuleConfigurationPerformer(ConfigurationProvider configurationProvider,
-                                                               MemoryMailRepositoryStore javaMailRepositoryStore) {
-            this.configurationProvider = configurationProvider;
+        public MailRepositoryStoreModuleConfigurationPerformer(MemoryMailRepositoryStore javaMailRepositoryStore) {
             this.javaMailRepositoryStore = javaMailRepositoryStore;
         }
 
         @Override
         public void initModule() {
             try {
-                javaMailRepositoryStore.configure(configurationProvider.getConfiguration("mailrepositorystore"));
                 javaMailRepositoryStore.init();
             } catch (Exception e) {
                 throw new RuntimeException(e);
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
index 63d8d97..80c77e8 100644
--- a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
+++ b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
@@ -34,6 +34,7 @@ import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryPath;
 import org.apache.james.mailrepository.api.MailRepositoryProvider;
@@ -47,7 +48,7 @@ import org.slf4j.LoggerFactory;
 
 import com.github.fge.lambdas.Throwing;
 
-public class MemoryMailRepositoryStore implements MailRepositoryStore, Configurable {
+public class MemoryMailRepositoryStore implements MailRepositoryStore, Startable {
     private static final Logger LOGGER = LoggerFactory.getLogger(MemoryMailRepositoryStore.class);
 
     private final MailRepositoryUrlStore urlStore;
@@ -55,26 +56,18 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Configura
     private final ConcurrentMap<MailRepositoryUrl, MailRepository> destinationToRepositoryAssociations;
     private final Map<Protocol, MailRepositoryProvider> protocolToRepositoryProvider;
     private final Map<Protocol, HierarchicalConfiguration> perProtocolMailRepositoryDefaultConfiguration;
-    private MailRepositoryStoreConfiguration configuration;
+    private final MailRepositoryStoreConfiguration configuration;
 
     @Inject
-    public MemoryMailRepositoryStore(MailRepositoryUrlStore urlStore, Set<MailRepositoryProvider> mailRepositories) {
+    public MemoryMailRepositoryStore(MailRepositoryUrlStore urlStore, Set<MailRepositoryProvider> mailRepositories, MailRepositoryStoreConfiguration configuration) {
         this.urlStore = urlStore;
         this.mailRepositories = mailRepositories;
+        this.configuration = configuration;
         this.destinationToRepositoryAssociations = new ConcurrentHashMap<>();
         this.protocolToRepositoryProvider = new HashMap<>();
         this.perProtocolMailRepositoryDefaultConfiguration = new HashMap<>();
     }
 
-    @Override
-    public void configure(HierarchicalConfiguration configuration) {
-        configure(MailRepositoryStoreConfiguration.parse(configuration));
-    }
-
-    public void configure(MailRepositoryStoreConfiguration configuration) {
-        this.configuration = configuration;
-    }
-
     public void init() throws Exception {
         LOGGER.info("JamesMailStore init... {}", this);
 
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
index f92c93e..13aa40b 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
@@ -61,11 +61,14 @@ public class MemoryMailRepositoryStoreTest {
             .build();
         fileSystem = new FileSystemImpl(configuration.directories());
         urlStore = new MemoryMailRepositoryUrlStore();
+
+        MailRepositoryStoreConfiguration storeConfiguration = MailRepositoryStoreConfiguration.parse(
+            new FileConfigurationProvider(fileSystem, configuration).getConfiguration("mailrepositorystore"));
+
         repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
                 new MemoryMailRepositoryProvider(),
-                new MemoryMailRepositoryProvider()));
-        repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration)
-            .getConfiguration("mailrepositorystore"));
+                new MemoryMailRepositoryProvider()),
+            storeConfiguration);
         repositoryStore.init();
     }
 
@@ -94,9 +97,11 @@ public class MemoryMailRepositoryStoreTest {
 
     @Test
     public void configureShouldThrowWhenNonValidClassesAreProvided() throws Exception {
+        MailRepositoryStoreConfiguration storeConfiguration = MailRepositoryStoreConfiguration.parse(
+            new FileConfigurationProvider(fileSystem, configuration).getConfiguration("fakemailrepositorystore"));
+
         repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
-            new MemoryMailRepositoryProvider()));
-        repositoryStore.configure(new FileConfigurationProvider(fileSystem, configuration).getConfiguration("fakemailrepositorystore"));
+            new MemoryMailRepositoryProvider()), storeConfiguration);
 
         assertThatThrownBy(() -> repositoryStore.init())
             .isInstanceOf(ConfigurationException.class);
@@ -104,9 +109,10 @@ public class MemoryMailRepositoryStoreTest {
 
     @Test
     public void configureShouldNotThrowOnEmptyConfiguration() throws Exception {
+        MailRepositoryStoreConfiguration configuration = MailRepositoryStoreConfiguration.parse(new HierarchicalConfiguration());
+
         repositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(
-            new MemoryMailRepositoryProvider()));
-        repositoryStore.configure(new HierarchicalConfiguration());
+            new MemoryMailRepositoryProvider()), configuration);
 
         repositoryStore.init();
     }
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 b630449..5f0cd05 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,12 +69,13 @@ class ToSenderDomainRepositoryTest {
 
     private void createMailRepositoryStore() throws Exception {
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
-        mailRepositoryStore.configure(new MailRepositoryStoreConfiguration(
+        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
             ImmutableList.of(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 1b83686..9220f45 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,14 +40,17 @@ public class MailRepositoryDeletedMessageVaultTest implements DeletedMessageVaul
 
     @BeforeEach
     void setUp() throws Exception {
-        MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        MemoryMailRepositoryStore mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
-
-        mailRepositoryStore.configure(new MailRepositoryStoreConfiguration(
+        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
             ImmutableList.of(new MailRepositoryStoreConfiguration.Item(
                 ImmutableList.of(new Protocol("memory")),
                 MemoryMailRepository.class.getName(),
-                new HierarchicalConfiguration()))));
+                new HierarchicalConfiguration())));
+        
+        MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
+        MemoryMailRepositoryStore mailRepositoryStore = new MemoryMailRepositoryStore(urlStore,
+            Sets.newHashSet(new MemoryMailRepositoryProvider()),
+            configuration);
+
         mailRepositoryStore.init();
 
         testee = new MailRepositoryDeletedMessageVault(
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 8281678..8c0e472 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
@@ -203,11 +203,14 @@ public class SMTPServerTest {
                 .build();
         fileSystem = new FileSystemImpl(configuration.directories());
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));        mailRepositoryStore.configure(new MailRepositoryStoreConfiguration(
+
+        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
             ImmutableList.of(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 cb6555f..2c20f27 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,7 +1754,7 @@ public class MailRepositoriesRoutesTest {
 
     private void createMailRepositoryStore() throws Exception {
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));        mailRepositoryStore.configure(new MailRepositoryStoreConfiguration(
+        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
             ImmutableList.of(new MailRepositoryStoreConfiguration.Item(
                     ImmutableList.of(new Protocol("memory")),
                     MemoryMailRepository.class.getName(),
@@ -1762,7 +1762,9 @@ public class MailRepositoriesRoutesTest {
                 new MailRepositoryStoreConfiguration.Item(
                     ImmutableList.of(new Protocol("other")),
                     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/service/ReprocessingServiceTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
index 5ca274a..4ffbe90 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,12 +179,13 @@ public class ReprocessingServiceTest {
 
     private MemoryMailRepositoryStore createMemoryMailRepositoryStore() throws Exception {
         MemoryMailRepositoryUrlStore urlStore = new MemoryMailRepositoryUrlStore();
-        MemoryMailRepositoryStore mailRepositoryStore = new MemoryMailRepositoryStore(urlStore, Sets.newHashSet(new MemoryMailRepositoryProvider()));
-        mailRepositoryStore.configure(new MailRepositoryStoreConfiguration(
+        MailRepositoryStoreConfiguration configuration = new MailRepositoryStoreConfiguration(
             ImmutableList.of(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();
         return mailRepositoryStore;
     }


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