JAMES-2291 Improve slightly MailRepository store

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dda770a7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dda770a7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dda770a7

Branch: refs/heads/master
Commit: dda770a771a7350471243b2f7b91a1530e9f3700
Parents: d281a05
Author: benwa <[email protected]>
Authored: Wed Jan 24 16:11:05 2018 +0700
Committer: benwa <[email protected]>
Committed: Thu Jan 25 16:28:45 2018 +0700

----------------------------------------------------------------------
 .../server/MailStoreRepositoryModule.java       |  2 +-
 .../utils/InMemoryMailRepositoryStore.java      | 59 ++++++++++++--------
 .../james/utils/MailRepositoryProvider.java     |  6 +-
 3 files changed, 41 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/dda770a7/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
----------------------------------------------------------------------
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 6a8e3b2..0c3aa5a 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
@@ -70,7 +70,7 @@ public class MailStoreRepositoryModule extends AbstractModule 
{
         }
 
         @Override
-        public MailRepository get() {
+        public MailRepository provide(String url) {
             FileMailRepository fileMailRepository = new FileMailRepository();
             fileMailRepository.setFileSystem(fileSystem);
             return fileMailRepository;

http://git-wip-us.apache.org/repos/asf/james-project/blob/dda770a7/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
index abf63a6..2cca7c0 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/InMemoryMailRepositoryStore.java
@@ -43,6 +43,29 @@ import com.google.inject.Inject;
 
 public class InMemoryMailRepositoryStore implements MailRepositoryStore, 
Configurable {
 
+    public static class Destination {
+
+        public static Destination fromUrl(String destinationUrl) throws 
MailRepositoryStoreException {
+            return new Destination(destinationUrl, 
retrieveProtocol(destinationUrl));
+        }
+
+        private static String retrieveProtocol(String destination) throws 
MailRepositoryStoreException {
+            int protocolSeparatorPosition = destination.indexOf(':');
+            if (protocolSeparatorPosition == -1) {
+                throw new MailRepositoryStoreException("Destination is 
malformed. Must be a valid URL: " + destination);
+            }
+            return destination.substring(0, protocolSeparatorPosition);
+        }
+
+        private final String url;
+        private final String protocol;
+
+        public Destination(String url, String protocol) {
+            this.url = url;
+            this.protocol = protocol;
+        }
+    }
+
     private static final Logger LOGGER = 
LoggerFactory.getLogger(InMemoryMailRepositoryStore.class);
 
     private final Set<MailRepositoryProvider> mailRepositories;
@@ -92,15 +115,15 @@ public class InMemoryMailRepositoryStore implements 
MailRepositoryStore, Configu
     }
 
     @Override
-    public MailRepository select(String destination) throws 
MailRepositoryStoreException {
-        MailRepository mailRepository = 
destinationToRepositoryAssociations.get(destination);
+    public MailRepository select(String destinationUrl) throws 
MailRepositoryStoreException {
+        Destination destination = Destination.fromUrl(destinationUrl);
+        MailRepository mailRepository = 
destinationToRepositoryAssociations.get(destination.url);
         if (mailRepository != null) {
             return mailRepository;
         }
-        String protocol = retrieveProtocol(destination);
-        mailRepository = retrieveMailRepository(protocol);
-        mailRepository = initialiseNewRepository(mailRepository, 
createRepositoryCombinedConfig(destination, protocol));
-        destinationToRepositoryAssociations.putIfAbsent(destination, 
mailRepository);
+        mailRepository = retrieveMailRepository(destination);
+        mailRepository = initialiseNewRepository(mailRepository, 
createRepositoryCombinedConfig(destination));
+        destinationToRepositoryAssociations.putIfAbsent(destination.url, 
mailRepository);
         return mailRepository;
     }
 
@@ -126,14 +149,14 @@ public class InMemoryMailRepositoryStore implements 
MailRepositoryStore, Configu
         }
     }
 
-    private CombinedConfiguration createRepositoryCombinedConfig(String 
destination, String protocol) {
-        final CombinedConfiguration config = new CombinedConfiguration();
-        HierarchicalConfiguration defaultProtocolConfig = 
perProtocolMailRepositoryDefaultConfiguration.get(protocol);
+    private CombinedConfiguration createRepositoryCombinedConfig(Destination 
destination) throws MailRepositoryStoreException {
+        CombinedConfiguration config = new CombinedConfiguration();
+        HierarchicalConfiguration defaultProtocolConfig = 
perProtocolMailRepositoryDefaultConfiguration.get(destination.protocol);
         if (defaultProtocolConfig != null) {
             config.addConfiguration(defaultProtocolConfig);
         }
         DefaultConfigurationBuilder builder = new 
DefaultConfigurationBuilder();
-        builder.addProperty("[@destinationURL]", destination);
+        builder.addProperty("[@destinationURL]", destination.url);
         config.addConfiguration(builder);
         return config;
     }
@@ -152,20 +175,12 @@ public class InMemoryMailRepositoryStore implements 
MailRepositoryStore, Configu
         }
     }
 
-    private MailRepository retrieveMailRepository(String protocol) throws 
MailRepositoryStoreException {
-        MailRepositoryProvider repositoryProvider = 
protocolToRepositoryProvider.get(protocol);
+    private MailRepository retrieveMailRepository(Destination destination) 
throws MailRepositoryStoreException {
+        MailRepositoryProvider repositoryProvider = 
protocolToRepositoryProvider.get(destination.protocol);
         if (repositoryProvider == null) {
-            throw new MailRepositoryStoreException("No Mail Repository 
associated with " + protocol);
-        }
-        return repositoryProvider.get();
-    }
-
-    private String retrieveProtocol(String destination) throws 
MailRepositoryStoreException {
-        int protocolSeparatorPosition = destination.indexOf(':');
-        if (protocolSeparatorPosition == -1) {
-            throw new MailRepositoryStoreException("Destination is malformed. 
Must be a valid URL: " + destination);
+            throw new MailRepositoryStoreException("No Mail Repository 
associated with " + destination.protocol);
         }
-        return destination.substring(0, protocolSeparatorPosition);
+        return repositoryProvider.provide(destination.url);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/dda770a7/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
index 035f574..e14bb5e 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/MailRepositoryProvider.java
@@ -19,11 +19,11 @@
 
 package org.apache.james.utils;
 
-import javax.inject.Provider;
-
 import org.apache.james.mailrepository.api.MailRepository;
 
-public interface MailRepositoryProvider extends Provider<MailRepository> {
+public interface MailRepositoryProvider {
 
     String canonicalName();
+
+    MailRepository provide(String url);
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to