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