JAMES-2366 Use switch/case when possible on Mapping.Type

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

Branch: refs/heads/master
Commit: 146208d753d629acad9226b6617ade0114186a69
Parents: 9b3027e
Author: Antoine Duprat <[email protected]>
Authored: Wed Mar 28 16:13:46 2018 +0200
Committer: benwa <[email protected]>
Committed: Tue Apr 3 17:00:14 2018 +0700

----------------------------------------------------------------------
 .../rrt/lib/AbstractRecipientRewriteTable.java  | 68 ++++++++++++--------
 1 file changed, 41 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/146208d7/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
 
b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
index d5651fc..346f1cf 100644
--- 
a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
+++ 
b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
@@ -119,35 +119,28 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
                 MappingsImpl.Builder mappings = MappingsImpl.builder();
 
                 for (String target : targetMappings.asStrings()) {
-                    if (Mapping.detectType(target).equals(Type.Regex)) {
-                        try {
-                            target = RecipientRewriteTableUtil.regexMap(new 
MailAddress(user, domain.asString()), target);
-                        } catch (PatternSyntaxException | ParseException e) {
-                            LOGGER.error("Exception during regexMap 
processing: ", e);
-                        }
-                    } else if (Mapping.detectType(target).equals(Type.Domain)) 
{
-                        target = user + "@" + 
Type.Domain.withoutPrefix(target);
-                    }
+                    Type type = Mapping.detectType(target);
+                    Optional<String> maybeAddressWithMappingApplied = 
applyMapping(user, domain, target, type);
 
-                    if (target == null) {
+                    if (!maybeAddressWithMappingApplied.isPresent()) {
                         continue;
                     }
-
-                    String buf = "Valid virtual user mapping " + user + "@" + 
domain.name() + " to " + target;
+                    String addressWithMappingApplied = 
maybeAddressWithMappingApplied.get();
+                    String buf = "Valid virtual user mapping " + user + "@" + 
domain.name() + " to " + maybeAddressWithMappingApplied;
                     LOGGER.debug(buf);
 
                     if (recursive) {
 
                         String userName;
                         Domain targetDomain;
-                        String[] args = target.split("@");
+                        String[] args = addressWithMappingApplied.split("@");
 
                         if (args.length > 1) {
                             userName = args[0];
                             targetDomain = Domain.of(args[1]);
                         } else {
                             // TODO Is that the right todo here?
-                            userName = target;
+                            userName = addressWithMappingApplied;
                             targetDomain = domain;
                         }
 
@@ -161,13 +154,13 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
 
                         if (childMappings == null || childMappings.isEmpty()) {
                             // add mapping
-                            mappings.add(target);
+                            mappings.add(addressWithMappingApplied);
                         } else {
                             mappings = mappings.addAll(childMappings);
                         }
 
                     } else {
-                        mappings.add(target);
+                        mappings.add(addressWithMappingApplied);
                     }
                 }
                 return mappings.build();
@@ -177,6 +170,22 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
         return null;
     }
 
+    private Optional<String> applyMapping(String user, Domain domain, String 
target, Type type) {
+        switch (type) {
+            case Regex:
+                try {
+                    return 
Optional.ofNullable(RecipientRewriteTableUtil.regexMap(new MailAddress(user, 
domain.asString()), target));
+                } catch (PatternSyntaxException | ParseException e) {
+                    LOGGER.error("Exception during regexMap processing: ", e);
+                    return Optional.ofNullable(target);
+                }
+            case Domain:
+                return Optional.of(user + "@" + 
Type.Domain.withoutPrefix(target));
+            default:
+                return Optional.ofNullable(target);
+        }
+    }
+
     @Override
     public void addRegexMapping(String user, Domain domain, String regex) 
throws RecipientRewriteTableException {
         try {
@@ -270,17 +279,22 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
         Type mappingType = Mapping.detectType(map);
         String mappingSuffix = mappingType.withoutPrefix(map);
 
-        if (mappingType.equals(Type.Error)) {
-            removeErrorMapping(user, domain, mappingSuffix);
-        } else if (mappingType.equals(Type.Regex)) {
-            removeRegexMapping(user, domain, mappingSuffix);
-        } else if (mappingType.equals(Type.Domain)) {
-            if (user != null) {
-                throw new RecipientRewriteTableException("User must be null 
for aliasDomain mappings");
-            }
-            removeAliasDomainMapping(domain, Domain.of(mappingSuffix));
-        } else {
-            removeAddressMapping(user, domain, map);
+        switch (mappingType) {
+            case Error:
+                removeErrorMapping(user, domain, mappingSuffix);
+                break;
+            case Regex:
+                removeRegexMapping(user, domain, mappingSuffix);
+                break;
+            case Domain:
+                if (user != null) {
+                    throw new RecipientRewriteTableException("User must be 
null for aliasDomain mappings");
+                }
+                removeAliasDomainMapping(domain, Domain.of(mappingSuffix));
+                break;
+            case Address:
+                removeAddressMapping(user, domain, map);
+                break;
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to