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 0c02cc50b70b6ba517868810ec73fd80135d64f5 Author: Benoit Tellier <[email protected]> AuthorDate: Thu Feb 28 11:30:54 2019 +0700 MAILBOX-381 Improve MemoryMailRepositoryStore code style - Use Map::computeIfAbsent - Use more functional programming style - Avoid variable re-allocation - Group public methods together --- .../memory/MemoryMailRepositoryStore.java | 69 ++++++++++------------ 1 file changed, 31 insertions(+), 38 deletions(-) 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 a7b39bd..63d8d97 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 @@ -67,13 +67,8 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Configura } @Override - public Stream<MailRepositoryUrl> getUrls() { - return urlStore.listDistinct(); - } - - @Override public void configure(HierarchicalConfiguration configuration) { - this.configuration = MailRepositoryStoreConfiguration.parse(configuration); + configure(MailRepositoryStoreConfiguration.parse(configuration)); } public void configure(MailRepositoryStoreConfiguration configuration) { @@ -88,13 +83,30 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Configura } } + private void initEntry(MailRepositoryStoreConfiguration.Item item) throws ConfigurationException { + String className = item.getClassFqdn(); + + MailRepositoryProvider usedMailRepository = mailRepositories.stream() + .filter(mailRepositoryProvider -> mailRepositoryProvider.canonicalName().equals(className)) + .findAny() + .orElseThrow(() -> new ConfigurationException("MailRepository " + className + " has not been registered")); + + for (Protocol protocol : item.getProtocols()) { + protocolToRepositoryProvider.put(protocol, usedMailRepository); + perProtocolMailRepositoryDefaultConfiguration.put(protocol, item.getConfiguration()); + } + } + + @Override + public Stream<MailRepositoryUrl> getUrls() { + return urlStore.listDistinct(); + } @Override public Optional<MailRepository> get(MailRepositoryUrl url) { - if (urlStore.contains(url)) { - return Optional.of(select(url)); - } - return Optional.empty(); + return Optional.of(url) + .filter(urlStore::contains) + .map(this::select); } @Override @@ -106,48 +118,31 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Configura @Override public MailRepository select(MailRepositoryUrl mailRepositoryUrl) { - return Optional.ofNullable(destinationToRepositoryAssociations.get(mailRepositoryUrl)) - .orElseGet(Throwing.supplier( - () -> createNewMailRepository(mailRepositoryUrl)) - .sneakyThrow()); + return destinationToRepositoryAssociations.computeIfAbsent(mailRepositoryUrl, + Throwing.function(this::createNewMailRepository).sneakyThrow()); } private MailRepository createNewMailRepository(MailRepositoryUrl mailRepositoryUrl) throws MailRepositoryStoreException { MailRepository newMailRepository = retrieveMailRepository(mailRepositoryUrl); + initializeNewRepository(newMailRepository, createRepositoryCombinedConfig(mailRepositoryUrl)); urlStore.add(mailRepositoryUrl); - newMailRepository = initializeNewRepository(newMailRepository, createRepositoryCombinedConfig(mailRepositoryUrl)); - MailRepository previousRepository = destinationToRepositoryAssociations.putIfAbsent(mailRepositoryUrl, newMailRepository); - return Optional.ofNullable(previousRepository) - .orElse(newMailRepository); - } - private void initEntry(MailRepositoryStoreConfiguration.Item item) throws ConfigurationException { - String className = item.getClassFqdn(); - - MailRepositoryProvider usedMailRepository = mailRepositories.stream() - .filter(mailRepositoryProvider -> mailRepositoryProvider.canonicalName().equals(className)) - .findAny() - .orElseThrow(() -> new ConfigurationException("MailRepository " + className + " has not been registered")); - - for (Protocol protocol : item.getProtocols()) { - protocolToRepositoryProvider.put(protocol, usedMailRepository); - perProtocolMailRepositoryDefaultConfiguration.put(protocol, item.getConfiguration()); - } + return newMailRepository; } private CombinedConfiguration createRepositoryCombinedConfig(MailRepositoryUrl mailRepositoryUrl) { CombinedConfiguration config = new CombinedConfiguration(); - HierarchicalConfiguration defaultProtocolConfig = perProtocolMailRepositoryDefaultConfiguration.get(mailRepositoryUrl.getProtocol()); - if (defaultProtocolConfig != null) { - config.addConfiguration(defaultProtocolConfig); - } + + Optional.ofNullable(perProtocolMailRepositoryDefaultConfiguration.get(mailRepositoryUrl.getProtocol())) + .ifPresent(config::addConfiguration); + DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder(); builder.addProperty("[@destinationURL]", mailRepositoryUrl.asString()); config.addConfiguration(builder); return config; } - private MailRepository initializeNewRepository(MailRepository mailRepository, CombinedConfiguration config) throws MailRepositoryStoreException { + private void initializeNewRepository(MailRepository mailRepository, CombinedConfiguration config) throws MailRepositoryStoreException { try { if (mailRepository instanceof Configurable) { ((Configurable) mailRepository).configure(config); @@ -155,7 +150,6 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Configura if (mailRepository instanceof Initializable) { ((Initializable) mailRepository).init(); } - return mailRepository; } catch (Exception e) { throw new MailRepositoryStoreException("Cannot init mail repository", e); } @@ -167,5 +161,4 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Configura .orElseThrow(() -> new MailRepositoryStoreException("No Mail Repository associated with " + protocol.getValue())) .provide(mailRepositoryUrl); } - } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
