JAMES-2366 Adding a group 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/43a6882f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/43a6882f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/43a6882f

Branch: refs/heads/master
Commit: 43a6882f0cbc2a40a5e366b57cc25bee844124e8
Parents: ff231f9
Author: benwa <btell...@linagora.com>
Authored: Fri Apr 6 09:29:35 2018 +0700
Committer: Matthieu Baechler <matth...@apache.org>
Committed: Tue Apr 24 14:45:26 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/james/rrt/lib/Mapping.java  | 15 ++++++++++-----
 .../rrt/lib/AbstractRecipientRewriteTable.java  | 20 +++++++++++++++++---
 .../org/apache/james/rrt/lib/MappingImpl.java   |  7 +++++--
 .../apache/james/rrt/lib/MappingImplTest.java   | 12 +++++++++++-
 .../apache/james/rrt/lib/MappingsImplTest.java  | 15 +++++++++++++++
 5 files changed, 58 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/43a6882f/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 1c7d3a6..39be80d 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,17 +44,21 @@ public interface Mapping {
         if (input.startsWith(Type.Forward.asPrefix())) {
             return Type.Forward;
         }
+        if (input.startsWith(Type.Group.asPrefix())) {
+            return Type.Group;
+        }
         return Type.Address;
     }
 
     Optional<MailAddress> asMailAddress();
 
     enum Type {
-        Regex("regex:", 3),
+        Regex("regex:", 4),
         Domain("domain:", 1),
-        Error("error:", 3),
-        Forward("forward:", 2),
-        Address("", 3);
+        Error("error:", 4),
+        Forward("forward:", 3),
+        Group("group:", 2),
+        Address("", 4);
 
         private final String asPrefix;
         private final int order;
@@ -77,7 +81,8 @@ public interface Mapping {
             return mapping.startsWith(Regex.asPrefix())
                 || mapping.startsWith(Domain.asPrefix())
                 || mapping.startsWith(Error.asPrefix())
-                || mapping.startsWith(Forward.asPrefix());
+                || mapping.startsWith(Forward.asPrefix())
+                || mapping.startsWith(Group.asPrefix());
         }
 
         public int getOrder() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/43a6882f/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 cc64297..2586f37 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
@@ -149,13 +149,13 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
 
                         if (childMappings.isEmpty()) {
                             // add mapping
-                            mappings.add(addressWithMappingApplied);
+                            mappings.add(toMapping(addressWithMappingApplied, 
type));
                         } else {
                             mappings = mappings.addAll(childMappings);
                         }
 
                     } else {
-                        mappings.add(addressWithMappingApplied);
+                        mappings.add(toMapping(addressWithMappingApplied, 
type));
                     }
                 }
                 return mappings.build();
@@ -165,6 +165,20 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
         return MappingsImpl.empty();
     }
 
+    private Mapping toMapping(String mappedAddress, Type type) {
+        switch (type) {
+            case Forward:
+            case Group:
+                return MappingImpl.of(type, mappedAddress);
+            case Regex:
+            case Domain:
+            case Error:
+            case Address:
+                return MappingImpl.address(mappedAddress);
+        }
+        throw new IllegalArgumentException("unhandled enum type");
+    }
+
     private Optional<String> applyMapping(String user, Domain domain, String 
target, Type type) {
         switch (type) {
             case Regex:
@@ -177,7 +191,7 @@ public abstract class AbstractRecipientRewriteTable 
implements RecipientRewriteT
             case Domain:
                 return Optional.of(user + "@" + 
Type.Domain.withoutPrefix(target));
             default:
-                return Optional.ofNullable(target);
+                return Optional.of(type.withoutPrefix(target));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/43a6882f/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 04ca426..c16d60c 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
@@ -33,7 +33,6 @@ import 
org.apache.james.rrt.api.RecipientRewriteTableException;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 
-
 public class MappingImpl implements Mapping, Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -66,6 +65,10 @@ public class MappingImpl implements Mapping, Serializable {
     public static MappingImpl forward(String mapping) {
         return new MappingImpl(Type.Forward, mapping);
     }
+
+    public static MappingImpl group(String mapping) {
+        return new MappingImpl(Type.Group, mapping);
+    }
     
     private final Type type;
     private final String mapping;
@@ -122,7 +125,7 @@ public class MappingImpl implements Mapping, Serializable {
 
     @Override
     public Optional<MailAddress> asMailAddress() {
-        if (type != Type.Address && type != Type.Forward) {
+        if (type != Type.Address && type != Type.Forward && type != 
Type.Group) {
             return Optional.empty();
         }
         try {

http://git-wip-us.apache.org/repos/asf/james-project/blob/43a6882f/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 72c6439..8b16443 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
@@ -67,6 +67,12 @@ public class MappingImplTest {
         assertThatThrownBy(() -> MappingImpl.forward(null))
             .isInstanceOf(NullPointerException.class);
     }
+
+    @Test
+    public void groupFactoryMethodShouldThrowOnNull() {
+        assertThatThrownBy(() -> MappingImpl.group(null))
+            .isInstanceOf(NullPointerException.class);
+    }
     
     @Test
     public void hasDomainShouldReturnTrueWhenMappingContainAtMark() {
@@ -159,6 +165,11 @@ public class MappingImplTest {
     public void getTypeShouldReturnForwardWhenForwardPrefix() {
         
assertThat(MappingImpl.forward("abc").getType()).isEqualTo(Mapping.Type.Forward);
     }
+
+    @Test
+    public void getTypeShouldReturnGroupWhenGroupPrefix() {
+        
assertThat(MappingImpl.group("abc").getType()).isEqualTo(Mapping.Type.Group);
+    }
     
     @Test(expected = IllegalStateException.class)
     public void getErrorMessageShouldThrowWhenMappingIsNotAnError() {
@@ -169,7 +180,6 @@ public class MappingImplTest {
     public void getErrorMessageShouldReturnMessageWhenErrorWithMessage() {
         
assertThat(MappingImpl.error("toto").getErrorMessage()).isEqualTo("toto");
     }
-    
 
     @Test
     public void getErrorMessageShouldReturnWhenErrorWithoutMessage() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/43a6882f/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
 
b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
index 1f8dcd9..213c3d1 100644
--- 
a/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
+++ 
b/server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
@@ -339,4 +339,19 @@ public class MappingsImplTest {
                 .build();
         assertThat(mappingsImpl).containsExactly(domainMapping, 
forwardMapping, regexMapping);
     }
+
+    @Test
+    public void builderShouldPutGroupsBetweenDomainAndForward() {
+        MappingImpl regexMapping = MappingImpl.regex("regex");
+        MappingImpl forwardMapping = MappingImpl.forward("forward");
+        MappingImpl domainMapping = MappingImpl.domain(Domain.of("domain"));
+        MappingImpl groupMapping = MappingImpl.group("group");
+        MappingsImpl mappingsImpl = MappingsImpl.builder()
+                .add(regexMapping)
+                .add(forwardMapping)
+                .add(domainMapping)
+                .add(groupMapping)
+                .build();
+        assertThat(mappingsImpl).containsExactly(domainMapping, groupMapping, 
forwardMapping, regexMapping);
+    }
 }


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