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]
