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 ro...@apache.org on 2018/01/25 15:36:46 UTC
[13/14] james-project git commit: JAMES-2291 Improve slightly
MailRepository store
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 <bt...@linagora.com>
Authored: Wed Jan 24 16:11:05 2018 +0700
Committer: benwa <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org