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:00 UTC

[james-project] 03/04: MAILBOX-381 Improve MemoryMailRepositoryStore code style

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 <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org