JAMES-2366 create MailAddressConversionPolicy to handle mapping to MailAddress 
conversion


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

Branch: refs/heads/master
Commit: ef5ff3f6fce8934410cdd469e6e2d93792ed9f32
Parents: 1ba2bfc
Author: Matthieu Baechler <matth...@apache.org>
Authored: Wed Apr 18 11:18:33 2018 +0200
Committer: Matthieu Baechler <matth...@apache.org>
Committed: Tue Apr 24 14:45:26 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/james/rrt/lib/Mapping.java  | 62 +++++++++++++++-----
 1 file changed, 48 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ef5ff3f6/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 e32dc1e..7f0e684 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
@@ -44,7 +44,8 @@ public interface Mapping {
     static Mapping of(Type type, String mapping) {
         UserRewritter.MappingUserRewriter rewriter = selectRewriter(type);
         IdentityMappingPolicy identityMappingPolicy = 
selectIdentityPolicy(type);
-        return new Impl(type, mapping, rewriter.generateUserRewriter(mapping), 
identityMappingPolicy);
+        MailAddressConversionPolicy mailAddressConversionPolicy = 
selectMailAddressConversionPolicy(type);
+        return new Impl(type, mapping, rewriter.generateUserRewriter(mapping), 
identityMappingPolicy, mailAddressConversionPolicy);
     }
 
     static UserRewritter.MappingUserRewriter selectRewriter(Type type) {
@@ -77,6 +78,40 @@ public interface Mapping {
         throw new IllegalStateException("unhandle enum type");
     }
 
+    enum MailAddressConversionPolicy {
+        ToEmpty {
+            @Override
+            Optional<MailAddress> convert(String mapping) {
+                return Optional.empty();
+            }
+        },
+        ToMailAddress {
+            @Override
+            Optional<MailAddress> convert(String mapping) {
+                try {
+                    return Optional.of(new MailAddress(mapping));
+                } catch (AddressException e) {
+                    return Optional.empty();
+                }
+            }
+        };
+
+        abstract Optional<MailAddress> convert(String mapping);
+    }
+
+    static MailAddressConversionPolicy selectMailAddressConversionPolicy(Type 
type) {
+        switch (type) {
+            case Regex:
+            case Domain:
+            case Error:
+                return MailAddressConversionPolicy.ToEmpty;
+            case Forward:
+            case Group:
+            case Address:
+                return MailAddressConversionPolicy.ToMailAddress;
+            }
+        throw new IllegalStateException("unhandle enum type");
+    }
 
     static Mapping address(String mapping) {
         return of(Type.Address, mapping);
@@ -181,14 +216,20 @@ public interface Mapping {
         private final String mapping;
         private final UserRewritter rewriter;
         private final IdentityMappingPolicy identityMappingPolicy;
+        private final MailAddressConversionPolicy mailAddressConversionPolicy;
 
-        private Impl(Type type, String mapping, UserRewritter rewriter, 
IdentityMappingPolicy identityMappingBehaviour) {
+        private Impl(Type type,
+                     String mapping,
+                     UserRewritter rewriter,
+                     IdentityMappingPolicy identityMappingBehaviour,
+                     MailAddressConversionPolicy mailAddressConversionPolicy) {
             Preconditions.checkNotNull(type);
             Preconditions.checkNotNull(mapping);
             this.type = type;
             this.mapping = mapping;
             this.rewriter = rewriter;
             this.identityMappingPolicy = identityMappingBehaviour;
+            this.mailAddressConversionPolicy = mailAddressConversionPolicy;
         }
 
         @Override
@@ -235,18 +276,6 @@ public interface Mapping {
         }
 
         @Override
-        public Optional<MailAddress> asMailAddress() {
-            if (type != Type.Address && type != Type.Forward && type != 
Type.Group) {
-                return Optional.empty();
-            }
-            try {
-                return Optional.of(new MailAddress(mapping));
-            } catch (AddressException e) {
-                return Optional.empty();
-            }
-        }
-
-        @Override
         public Optional<User> rewriteUser(User user) throws AddressException {
             return rewriter.rewrite(user);
         }
@@ -257,6 +286,11 @@ public interface Mapping {
         }
 
         @Override
+        public Optional<MailAddress> asMailAddress() {
+            return mailAddressConversionPolicy.convert(mapping);
+        }
+
+        @Override
         public final boolean equals(Object other) {
             if (other instanceof Impl) {
                 Impl otherMapping = (Impl) other;


---------------------------------------------------------------------
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