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