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 2018/04/03 10:02:54 UTC

[08/24] james-project git commit: JAMES-2366 Improve style in RecipientRewriteTableProcessor

JAMES-2366 Improve style in RecipientRewriteTableProcessor

 - Avoid confusions between mailAddress and mapping
 - New mappings means "sanitized" (a sanitized mapping being one with a domain)
 - Rely on 'memoization'
 - Avoid intermediary collects
 - Review and rework method encapsulation (it lead to bad reading and understanding)
 - Use plural when needed


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

Branch: refs/heads/master
Commit: 9d13366ab4810dafdef8ef7e8fe7131c8f2a7c14
Parents: fc278a8
Author: benwa <bt...@linagora.com>
Authored: Wed Mar 28 13:46:34 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Apr 3 16:59:44 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/util/GuavaUtils.java  |  4 ++
 .../mailets/RecipientRewriteTableProcessor.java | 62 +++++++++-----------
 2 files changed, 31 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9d13366a/server/container/util-java8/src/main/java/org/apache/james/util/GuavaUtils.java
----------------------------------------------------------------------
diff --git a/server/container/util-java8/src/main/java/org/apache/james/util/GuavaUtils.java b/server/container/util-java8/src/main/java/org/apache/james/util/GuavaUtils.java
index 518ead1..f5493c9 100644
--- a/server/container/util-java8/src/main/java/org/apache/james/util/GuavaUtils.java
+++ b/server/container/util-java8/src/main/java/org/apache/james/util/GuavaUtils.java
@@ -34,4 +34,8 @@ public class GuavaUtils {
             .flatMap(e -> e.getValue().stream().map(right -> Pair.of(e.getKey(), right)))
             .collect(Guavate.toImmutableListMultimap(Pair::getKey, Pair::getValue));
     }
+
+    public static <T> com.google.common.base.Supplier<T> toGuava(java.util.function.Supplier<T> javaSupplier) {
+        return javaSupplier::get;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9d13366a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
index f48e132..2ca1e40 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
@@ -39,15 +39,19 @@ import org.apache.james.rrt.api.RecipientRewriteTable.ErrorMappingException;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.lib.Mapping;
 import org.apache.james.rrt.lib.Mappings;
+import org.apache.james.util.GuavaUtils;
 import org.apache.james.util.OptionalUtils;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
@@ -135,24 +139,23 @@ public class RecipientRewriteTableProcessor {
     }
 
     @VisibleForTesting
-    List<MailAddress> handleMappings(Mappings mappings, MailAddress sender, MailAddress recipient, MimeMessage message) 
-            throws MessagingException {
-        ImmutableList<Mapping> addressMappingWithoutDomains = getAddressWithNoDomain(mappings, domainList);
-
-        ImmutableList<Mapping> newAddressMappings = convertToNewMappings(mappings, addressMappingWithoutDomains);
-
-        ImmutableList<MailAddress> mailAddresses = buildMailAddressFromMappingAddress(newAddressMappings);
+    List<MailAddress> handleMappings(Mappings mappings, MailAddress sender, MailAddress recipient, MimeMessage message) throws MessagingException {
+        ImmutableList<MailAddress> mailAddresses = sanitizedMappings(mappings)
+            .map(mailAddressFromMapping)
+            .flatMap(OptionalUtils::toStream)
+            .collect(Guavate.toImmutableList());
 
         forwardToRemoteAddress(sender, recipient, message, mailAddresses);
 
         return getLocalAddresses(mailAddresses);
     }
 
-    private ImmutableList<Mapping> convertToNewMappings(Mappings mappings, ImmutableList<Mapping> addressWithoutDomains) {
+    private Stream<Mapping> sanitizedMappings(Mappings mappings) throws MessagingException {
+        ImmutableList<Mapping> sanitizedMappings = sanitizeMappingsWithNoDomain(mappings, domainList);
+
         return Stream.concat(
-                mappings.asStream().filter(Mapping::hasDomain),
-                addressWithoutDomains.stream())
-            .collect(Guavate.toImmutableList());
+            mappings.asStream().filter(Mapping::hasDomain),
+            sanitizedMappings.stream());
     }
 
     private ImmutableList<MailAddress> getLocalAddresses(ImmutableList<MailAddress> mailAddresses) {
@@ -161,40 +164,29 @@ public class RecipientRewriteTableProcessor {
             .collect(Guavate.toImmutableList());
     }
 
-    private ImmutableList<MailAddress> buildMailAddressFromMappingAddress(ImmutableList<Mapping> newMappings) {
-        return newMappings.stream()
-            .map(mailAddressFromMapping)
-            .filter(Optional::isPresent)
-            .map(Optional::get)
-            .collect(Guavate.toImmutableList());
-    }
+    private ImmutableList<Mapping> sanitizeMappingsWithNoDomain(Mappings mappings, DomainList domainList) throws MessagingException {
+        Supplier<Domain> defaultDomainSupplier = Suppliers.memoize(
+            GuavaUtils.toGuava(
+            Throwing.supplier(() -> getDefaultDomain(domainList))
+                .sneakyThrow()));
 
-    private ImmutableList<Mapping> getAddressWithNoDomain(Mappings mappings, DomainList domainList) throws MessagingException {
-        ImmutableList<Mapping> addressWithoutDomains = mappings.asStream()
-            .filter(address -> !address.hasDomain())
+        return mappings.asStream()
+            .filter(mapping -> !mapping.hasDomain())
+            .map(mapping -> mapping.appendDomain(defaultDomainSupplier.get()))
             .collect(Guavate.toImmutableList());
-        
-        if (!addressWithoutDomains.isEmpty()) {
-            Domain defaultDomain = getDefaultDomain(domainList);
-
-            return addressWithoutDomains.stream()
-                .map(address -> address.appendDomain(defaultDomain))
-                .collect(Guavate.toImmutableList());
-        }
-        return ImmutableList.of();
     }
 
     private void forwardToRemoteAddress(MailAddress sender, MailAddress recipient, MimeMessage message, ImmutableList<MailAddress> mailAddresses) {
-        ImmutableList<MailAddress> remoteAddress = mailAddresses.stream()
+        ImmutableList<MailAddress> remoteAddresses = mailAddresses.stream()
             .filter(mailAddress -> !mailetContext.isLocalServer(mailAddress.getDomain()))
             .collect(Guavate.toImmutableList());
 
-        if (!remoteAddress.isEmpty()) {
+        if (!remoteAddresses.isEmpty()) {
             try {
-                mailetContext.sendMail(sender, remoteAddress, message);
-                LOGGER.info("Mail for {} forwarded to {}", recipient, remoteAddress);
+                mailetContext.sendMail(sender, remoteAddresses, message);
+                LOGGER.info("Mail for {} forwarded to {}", recipient, remoteAddresses);
             } catch (MessagingException ex) {
-                LOGGER.warn("Error forwarding mail to {}", remoteAddress);
+                LOGGER.warn("Error forwarding mail to {}", remoteAddresses);
             }
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org