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]

Reply via email to