JAMES-2366 Mapping::getAddress should return Optional<MailAddress>

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

Branch: refs/heads/master
Commit: 53d760bb37b494f3ebfb095d0a3a1c101efd58e1
Parents: 57c417c
Author: benwa <btell...@linagora.com>
Authored: Fri Mar 30 09:57:05 2018 +0700
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Fri Apr 6 14:46:01 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/james/rrt/lib/Mapping.java  |  4 ++-
 .../org/apache/james/rrt/lib/MappingImpl.java   | 16 +++++++++--
 .../apache/james/rrt/lib/MappingImplTest.java   | 29 +++++++++++++-------
 .../mailets/RecipientRewriteTableProcessor.java | 27 +-----------------
 .../james/webadmin/routes/GroupsRoutes.java     |  5 +++-
 5 files changed, 40 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/53d760bb/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java 
b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
index bb3ec7e..95c0599 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
@@ -20,9 +20,11 @@
 
 package org.apache.james.rrt.lib;
 
+import java.util.Optional;
 import java.util.function.Supplier;
 
 import org.apache.james.core.Domain;
+import org.apache.james.core.MailAddress;
 
 import com.google.common.base.Preconditions;
 
@@ -44,7 +46,7 @@ public interface Mapping {
         return Type.Address;
     }
 
-    String getAddress();
+    Optional<MailAddress> asMailAddress();
 
     enum Type {
         Regex("regex:", 3),

http://git-wip-us.apache.org/repos/asf/james-project/blob/53d760bb/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
 
b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
index 0c663a9..48ed54b 100644
--- 
a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
+++ 
b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingImpl.java
@@ -21,9 +21,13 @@
 package org.apache.james.rrt.lib;
 
 import java.io.Serializable;
+import java.util.Optional;
 import java.util.function.Supplier;
 
+import javax.mail.internet.AddressException;
+
 import org.apache.james.core.Domain;
+import org.apache.james.core.MailAddress;
 
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
@@ -103,9 +107,15 @@ public class MappingImpl implements Mapping, Serializable {
     }
 
     @Override
-    public String getAddress() {
-        Preconditions.checkState(getType() == Type.Address);
-        return mapping;
+    public Optional<MailAddress> asMailAddress() {
+        if (type != Type.Address && type != Type.Forward) {
+            return Optional.empty();
+        }
+        try {
+            return Optional.of(new MailAddress(mapping));
+        } catch (AddressException e) {
+            return Optional.empty();
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/53d760bb/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
 
b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
index e18823f..ab1e8d3 100644
--- 
a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
+++ 
b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingImplTest.java
@@ -24,6 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.core.Domain;
+import org.apache.james.core.MailAddress;
 import org.junit.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
@@ -148,27 +149,35 @@ public class MappingImplTest {
     }
 
     @Test
-    public void getAddressShouldReturnMappingValueForAddress() {
-        
assertThat(MappingImpl.address("value").getAddress()).isEqualTo("value");
+    public void asMailAddressShouldReturnMappingValueForAddress() throws 
Exception {
+        assertThat(MappingImpl.address("value@domain").asMailAddress())
+            .contains(new MailAddress("value@domain"));
     }
 
     @Test
-    public void getAddressShouldThrowForError() {
-        assertThatThrownBy(() -> 
MappingImpl.error("value").getAddress()).isInstanceOf(IllegalStateException.class);
+    public void asMailAddressShouldReturnEmptyOnInvalidAddress() {
+        assertThat(MappingImpl.address("value").asMailAddress())
+            .isEmpty();
     }
 
     @Test
-    public void getAddressShouldThrowForRegex() {
-        assertThatThrownBy(() -> 
MappingImpl.regex("value").getAddress()).isInstanceOf(IllegalStateException.class);
+    public void asMailAddressShouldReturnEmptyForError() {
+        assertThat(MappingImpl.error("value").asMailAddress()).isEmpty();
     }
 
     @Test
-    public void getAddressShouldThrowForDomain() {
-        assertThatThrownBy(() -> 
MappingImpl.domain(Domain.of("value")).getAddress()).isInstanceOf(IllegalStateException.class);
+    public void asMailAddressShouldReturnEmptyForRegex() {
+        assertThat(MappingImpl.regex("value").asMailAddress()).isEmpty();
     }
 
     @Test
-    public void getAddressShouldThrowForForward() {
-        assertThatThrownBy(() -> 
MappingImpl.forward("value").getAddress()).isInstanceOf(IllegalStateException.class);
+    public void asMailAddressShouldReturnEmptyForDomain() {
+        
assertThat(MappingImpl.domain(Domain.of("value")).asMailAddress()).isEmpty();
+    }
+
+    @Test
+    public void asMailAddressShouldReturnMappingValueForForward() throws 
Exception {
+        assertThat(MappingImpl.forward("value@domain").asMailAddress())
+            .contains(new MailAddress("value@domain"));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/53d760bb/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 c1bc666..7a30cef 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
@@ -20,12 +20,10 @@
 package org.apache.james.transport.mailets;
 
 import java.util.List;
-import java.util.Optional;
 import java.util.function.Function;
 import java.util.function.Supplier;
 
 import javax.mail.MessagingException;
-import javax.mail.internet.AddressException;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.james.core.Domain;
@@ -35,8 +33,6 @@ import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 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.Mapping.Type;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.util.MemoizedSupplier;
 import org.apache.james.util.OptionalUtils;
@@ -105,27 +101,6 @@ public class RecipientRewriteTableProcessor {
     private final MailetContext mailetContext;
     private final Supplier<Domain> defaultDomainSupplier;
 
-    private static final Function<Mapping, Optional<MailAddress>> 
mailAddressFromMapping =
-        mapping -> {
-            Type type = mapping.getType();
-            switch (type) {
-                case Address:
-                    return parseMappingToMailAddress(mapping.asString());
-                case Forward:
-                    return 
parseMappingToMailAddress(type.withoutPrefix(mapping.asString()));
-                default:
-                    return Optional.empty();
-            }
-        };
-
-    private static Optional<MailAddress> parseMappingToMailAddress(String 
mapping) {
-        try {
-            return Optional.of(new MailAddress(mapping));
-        } catch (AddressException e) {
-            return Optional.empty();
-        }
-    }
-
     public RecipientRewriteTableProcessor(RecipientRewriteTable 
virtualTableStore, DomainList domainList, MailetContext mailetContext) {
         this.virtualTableStore = virtualTableStore;
         this.mailetContext = mailetContext;
@@ -187,7 +162,7 @@ public class RecipientRewriteTableProcessor {
     List<MailAddress> handleMappings(Mappings mappings, MailAddress sender, 
MailAddress recipient, MimeMessage message) throws MessagingException {
         ImmutableList<MailAddress> mailAddresses = mappings.asStream()
             .map(mapping -> mapping.appendDomainIfNone(defaultDomainSupplier))
-            .map(mailAddressFromMapping)
+            .map(mapping -> mapping.asMailAddress())
             .flatMap(OptionalUtils::toStream)
             .collect(Guavate.toImmutableList());
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/53d760bb/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
 
b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
index 5126804..29ec2f8 100644
--- 
a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
@@ -48,6 +48,7 @@ import org.apache.james.rrt.lib.Mapping;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.james.util.OptionalUtils;
 import org.apache.james.webadmin.Constants;
 import org.apache.james.webadmin.Routes;
 import org.apache.james.webadmin.utils.ErrorResponder;
@@ -228,7 +229,9 @@ public class GroupsRoutes implements Routes {
 
         return mappings.select(Mapping.Type.Address)
                 .asStream()
-                .map(Mapping::getAddress)
+                .map(Mapping::asMailAddress)
+                .flatMap(OptionalUtils::toStream)
+                .map(MailAddress::asString)
                 .collect(Guavate.toImmutableSortedSet());
     }
 


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

Reply via email to