JAMES-2529 Factorize code for Transport checks
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8382d619 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8382d619 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8382d619 Branch: refs/heads/master Commit: 8382d61981e89c6d2387734aacd18aa57a456670 Parents: 472bf31 Author: Benoit Tellier <[email protected]> Authored: Wed Aug 29 12:20:32 2018 +0700 Committer: Antoine Duprat <[email protected]> Committed: Thu Aug 30 15:11:54 2018 +0200 ---------------------------------------------------------------------- .../server/CamelMailetContainerModule.java | 56 +++++++++++++++----- .../java/org/apache/james/jmap/JMAPModule.java | 19 ++----- .../james/jmap/MailetPreconditionTest.java | 22 ++++---- 3 files changed, 59 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/8382d619/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java index 0d41d59..92fd1a5 100644 --- a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java +++ b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java @@ -22,6 +22,7 @@ package org.apache.james.modules.server; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.SimpleRegistry; @@ -50,7 +51,9 @@ import org.apache.james.utils.GuiceMatcherLoader; import org.apache.james.utils.GuiceProbe; import org.apache.james.utils.MailetConfigurationOverride; import org.apache.james.utils.SpoolerProbe; +import org.apache.mailet.Mailet; import org.apache.mailet.MailetContext; +import org.apache.mailet.Matcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,6 +70,12 @@ public class CamelMailetContainerModule extends AbstractModule { private static final Logger LOGGER = LoggerFactory.getLogger(CamelMailetContainerModule.class); + public static final TransportProcessorCheck.Impl BCC_Check = new TransportProcessorCheck.Impl( + All.class, + RemoveMimeHeader.class, + pair -> pair.getMailet().getMailetConfig().getInitParameter("name").equals("bcc"), + "Should be configured to remove Bcc header"); + @Override protected void configure() { bind(CamelCompositeProcessor.class).in(Scopes.SINGLETON); @@ -85,7 +94,7 @@ public class CamelMailetContainerModule extends AbstractModule { Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(MailetModuleConfigurationPerformer.class); Multibinder<CamelMailetContainerModule.TransportProcessorCheck> transportProcessorChecks = Multibinder.newSetBinder(binder(), CamelMailetContainerModule.TransportProcessorCheck.class); - transportProcessorChecks.addBinding().to(BccMailetCheck.class); + transportProcessorChecks.addBinding().toInstance(BCC_Check); } @Provides @@ -215,18 +224,39 @@ public class CamelMailetContainerModule extends AbstractModule { @FunctionalInterface public interface TransportProcessorCheck { void check(List<MatcherMailetPair> pairs) throws ConfigurationException; - } - - public static class BccMailetCheck implements CamelMailetContainerModule.TransportProcessorCheck { - @Override - public void check(List<MatcherMailetPair> pairs) throws ConfigurationException { - Preconditions.checkNotNull(pairs); - pairs.stream() - .filter(pair -> pair.getMailet().getClass().equals(RemoveMimeHeader.class)) - .filter(pair -> pair.getMatcher().getClass().equals(All.class)) - .filter(pair -> pair.getMailet().getMailetConfig().getInitParameter("name").equals("bcc")) - .findAny() - .orElseThrow(() -> new ConfigurationException("Missing RemoveMimeHeader in mailets configuration (mailetcontainer -> processors -> transport). Should be configured to remove Bcc header")); + + class Impl implements TransportProcessorCheck { + private final Class<? extends Matcher> matcherClass; + private final Class<? extends Mailet> mailetClass; + private final Optional<Predicate<? super MatcherMailetPair>> additionalFilter; + private final Optional<String> additionalErrorMessage; + + public Impl(Class<? extends Matcher> matcherClass, Class<? extends Mailet> mailetClass) { + this(matcherClass, mailetClass, Optional.empty(), Optional.empty()); + } + + public Impl(Class<? extends Matcher> matcherClass, Class<? extends Mailet> mailetClass, Predicate<? super MatcherMailetPair> additionalFilter, String additionalErrorMessage) { + this(matcherClass, mailetClass, Optional.of(additionalFilter), Optional.of(additionalErrorMessage)); + } + + private Impl(Class<? extends Matcher> matcherClass, Class<? extends Mailet> mailetClass, Optional<Predicate<? super MatcherMailetPair>> additionalFilter, Optional<String> additionalErrorMessage) { + this.matcherClass = matcherClass; + this.mailetClass = mailetClass; + this.additionalFilter = additionalFilter; + this.additionalErrorMessage = additionalErrorMessage; + } + + @Override + public void check(List<MatcherMailetPair> pairs) throws ConfigurationException { + Preconditions.checkNotNull(pairs); + pairs.stream() + .filter(pair -> pair.getMailet().getClass().equals(mailetClass)) + .filter(pair -> pair.getMatcher().getClass().equals(matcherClass)) + .filter(additionalFilter.orElse(any -> true)) + .findAny() + .orElseThrow(() -> new ConfigurationException("Missing " + mailetClass.getName() + " in mailets configuration (mailetcontainer -> processors -> transport). " + + additionalErrorMessage.orElse(""))); + } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/8382d619/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java index b70c953..5158d2f 100644 --- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java +++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java @@ -42,7 +42,6 @@ import org.apache.james.lifecycle.api.Configurable; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxManager.SearchCapabilities; -import org.apache.james.mailetcontainer.impl.MatcherMailetPair; import org.apache.james.modules.server.CamelMailetContainerModule; import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.server.core.configuration.FileConfigurationProvider; @@ -73,6 +72,10 @@ public class JMAPModule extends AbstractModule { throw new RuntimeException(e); } }; + public static final CamelMailetContainerModule.TransportProcessorCheck VACATION_MAILET_CHECK = + new CamelMailetContainerModule.TransportProcessorCheck.Impl( + RecipientIsLocal.class, + VacationMailet.class); @Override protected void configure() { @@ -92,7 +95,7 @@ public class JMAPModule extends AbstractModule { Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(RequiredCapabilitiesPrecondition.class); Multibinder<CamelMailetContainerModule.TransportProcessorCheck> transportProcessorChecks = Multibinder.newSetBinder(binder(), CamelMailetContainerModule.TransportProcessorCheck.class); - transportProcessorChecks.addBinding().to(VacationMailetCheck.class); + transportProcessorChecks.addBinding().toInstance(VACATION_MAILET_CHECK); bind(SystemMailboxesProvider.class).to(SystemMailboxesProviderImpl.class); bind(MailQueueItemDecoratorFactory.class).to(PostDequeueDecoratorFactory.class).in(Scopes.SINGLETON); @@ -166,16 +169,4 @@ public class JMAPModule extends AbstractModule { } } - public static class VacationMailetCheck implements CamelMailetContainerModule.TransportProcessorCheck { - @Override - public void check(List<MatcherMailetPair> pairs) throws ConfigurationException { - Preconditions.checkNotNull(pairs); - pairs.stream() - .filter(pair -> pair.getMailet().getClass().equals(VacationMailet.class)) - .filter(pair -> pair.getMatcher().getClass().equals(RecipientIsLocal.class)) - .findAny() - .orElseThrow(() -> new ConfigurationException("Missing " + VacationMailet.class.getName() + " in mailets configuration (mailetcontainer -> processors -> transport)")); - } - } - } http://git-wip-us.apache.org/repos/asf/james-project/blob/8382d619/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/MailetPreconditionTest.java ---------------------------------------------------------------------- diff --git a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/MailetPreconditionTest.java b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/MailetPreconditionTest.java index 0e1af99..72d74f2 100644 --- a/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/MailetPreconditionTest.java +++ b/server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/MailetPreconditionTest.java @@ -44,52 +44,52 @@ public class MailetPreconditionTest { @Test(expected = ConfigurationException.class) public void vacationMailetCheckShouldThrowOnEmptyList() throws Exception { - new JMAPModule.VacationMailetCheck().check(Lists.newArrayList()); + JMAPModule.VACATION_MAILET_CHECK.check(Lists.newArrayList()); } @Test(expected = NullPointerException.class) public void vacationMailetCheckShouldThrowOnNullList() throws Exception { - new JMAPModule.VacationMailetCheck().check(null); + JMAPModule.VACATION_MAILET_CHECK.check(null); } @Test(expected = ConfigurationException.class) public void vacationMailetCheckShouldThrowOnWrongMatcher() throws Exception { List<MatcherMailetPair> pairs = Lists.newArrayList(new MatcherMailetPair(new All(), new VacationMailet(null, null, null, null, null))); - new JMAPModule.VacationMailetCheck().check(pairs); + JMAPModule.VACATION_MAILET_CHECK.check(pairs); } @Test(expected = ConfigurationException.class) public void vacationMailetCheckShouldThrowOnWrongMailet() throws Exception { List<MatcherMailetPair> pairs = Lists.newArrayList(new MatcherMailetPair(new RecipientIsLocal(), new Null())); - new JMAPModule.VacationMailetCheck().check(pairs); + JMAPModule.VACATION_MAILET_CHECK.check(pairs); } @Test public void vacationMailetCheckShouldNotThrowIfValidPairPresent() throws Exception { List<MatcherMailetPair> pairs = Lists.newArrayList(new MatcherMailetPair(new RecipientIsLocal(), new VacationMailet(null, null, null, null, null))); - new JMAPModule.VacationMailetCheck().check(pairs); + JMAPModule.VACATION_MAILET_CHECK.check(pairs); } @Test(expected = ConfigurationException.class) public void bccMailetCheckShouldThrowOnEmptyList() throws Exception { - new CamelMailetContainerModule.BccMailetCheck().check(Lists.newArrayList()); + CamelMailetContainerModule.BCC_Check.check(Lists.newArrayList()); } @Test(expected = NullPointerException.class) public void bccMailetCheckShouldThrowOnNullList() throws Exception { - new CamelMailetContainerModule.BccMailetCheck().check(null); + CamelMailetContainerModule.BCC_Check.check(null); } @Test(expected = ConfigurationException.class) public void bccMailetCheckShouldThrowOnWrongMatcher() throws Exception { List<MatcherMailetPair> pairs = Lists.newArrayList(new MatcherMailetPair(new RecipientIsLocal(), new RemoveMimeHeader())); - new JMAPModule.VacationMailetCheck().check(pairs); + JMAPModule.VACATION_MAILET_CHECK.check(pairs); } @Test(expected = ConfigurationException.class) public void bccMailetCheckShouldThrowOnWrongMailet() throws Exception { List<MatcherMailetPair> pairs = Lists.newArrayList(new MatcherMailetPair(new All(), new Null())); - new JMAPModule.VacationMailetCheck().check(pairs); + JMAPModule.VACATION_MAILET_CHECK.check(pairs); } @Test(expected = ConfigurationException.class) @@ -104,7 +104,7 @@ public class MailetPreconditionTest { .build()); List<MatcherMailetPair> pairs = Lists.newArrayList(new MatcherMailetPair(new All(), removeMimeHeader)); - new JMAPModule.VacationMailetCheck().check(pairs); + JMAPModule.VACATION_MAILET_CHECK.check(pairs); } @Test(expected = ConfigurationException.class) @@ -117,6 +117,6 @@ public class MailetPreconditionTest { .build()); List<MatcherMailetPair> pairs = Lists.newArrayList(new MatcherMailetPair(new All(), removeMimeHeader)); - new JMAPModule.VacationMailetCheck().check(pairs); + JMAPModule.VACATION_MAILET_CHECK.check(pairs); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
