You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2016/11/23 13:50:10 UTC

[07/46] james-project git commit: JAMES-1854 SieveMailet should have static parameters

JAMES-1854 SieveMailet should have static parameters


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7d311849
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7d311849
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7d311849

Branch: refs/heads/master
Commit: 7d311849fe2a7ab2aa78ce1ce5c7c4864960578d
Parents: c5bcdf8
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu Oct 27 16:36:20 2016 +0200
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Fri Nov 18 18:46:46 2016 +0700

----------------------------------------------------------------------
 .../mailets/delivery/LocalDelivery.java         |  50 ++---
 .../transport/mailets/delivery/SieveMailet.java | 197 ++++++++++---------
 .../mailets/delivery/ToRecipientFolder.java     |  49 ++---
 .../mailets/delivery/SieveMailetTest.java       |  11 +-
 4 files changed, 143 insertions(+), 164 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7d311849/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java
index 7fafbbe..b592354 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/LocalDelivery.java
@@ -107,46 +107,24 @@ public class LocalDelivery extends GenericMailet {
     /**
      * @see org.apache.mailet.base.GenericMailet#init()
      */
-    public void init() throws MessagingException {
-        
-        super.init();
-
+    public void init(MailetConfig mailetConfig) throws MessagingException {
+        super.init(mailetConfig);
         recipientRewriteTable = new RecipientRewriteTable();
         recipientRewriteTable.setDomainList(domainList);
         recipientRewriteTable.setRecipientRewriteTable(rrt);
         recipientRewriteTable.init(getMailetConfig());
-        sieveMailet = new SieveMailet(usersRepository,
-            mailboxManager,
-            ResourceLocatorImpl.instanciate(usersRepository, sieveRepository),
-            "INBOX");
-        sieveMailet.init(new MailetConfig() {
-            public String getInitParameter(String name) {
-                if ("addDeliveryHeader".equals(name)) {
-                    return "Delivered-To";
-                } else if ("resetReturnPath".equals(name)) {
-                    return "true";
-                } else {
-                    return getMailetConfig().getInitParameter(name);
-                }
-            }
-
-            public Iterator<String> getInitParameterNames() {
-                return Iterators.concat(
-                        getMailetConfig().getInitParameterNames(), 
-                        Lists.newArrayList("addDeliveryHeader", "resetReturnPath").iterator());
-            }
-            
-            public MailetContext getMailetContext() {
-                return getMailetConfig().getMailetContext();
-            }
-
-            public String getMailetName() {
-                return getMailetConfig().getMailetName();
-            }
-
-        });
-        // Override the default value of "quiet"
-        sieveMailet.setQuiet(getInitParameter("quiet", true));
+        sieveMailet = SieveMailet.builder()
+            .mailboxManager(mailboxManager)
+            .userRepository(usersRepository)
+            .resourceLocator(ResourceLocatorImpl.instanciate(usersRepository, sieveRepository))
+            .consume(getInitParameter("consume", true))
+            .deliveryHeader("Delivered-To")
+            .resetReturnPath(true)
+            .quiet(getInitParameter("quiet", false))
+            .verbose(getInitParameter("verbose", false))
+            .folder("INBOX")
+            .build();
+        sieveMailet.init(mailetConfig);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7d311849/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
index fd74dff..2b4bdc4 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SieveMailet.java
@@ -57,116 +57,130 @@ import org.apache.jsieve.parser.generated.ParseException;
 import org.apache.jsieve.parser.generated.TokenMgrError;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
-import org.apache.mailet.MailetConfig;
 import org.apache.mailet.MailetException;
 import org.apache.mailet.base.GenericMailet;
 import org.apache.mailet.base.RFC2822Headers;
 
+import com.google.common.base.Optional;
+
 /**
  * Contains resource bindings.
  */
 public class SieveMailet  extends GenericMailet implements Poster {
-    private final UsersRepository usersRepos;
-    private final MailboxManager mailboxManager;
-    private final String folder;
-    private final ResourceLocator resourceLocator;
-    private String deliveryHeader;
-    private boolean resetReturnPath;
-    private Poster poster;
-    private ResourceLocator locator;
-    private boolean verbose = false;
-    private boolean consume = true;
-    private boolean quiet = true;
-    private SieveFactory factory;
-    private ActionDispatcher actionDispatcher;
-    private Log log;
-
-    public SieveMailet(UsersRepository usersRepos, MailboxManager mailboxManager, ResourceLocator resourceLocator, String folder) {
-        this.usersRepos = usersRepos;
-        this.resourceLocator = resourceLocator;
-        this.mailboxManager = mailboxManager;
-        this.folder = folder;
-    }
 
-    @Override
-    public void init() throws MessagingException {
+    public static Builder builder() {
+        return new Builder();
+    }
 
-        this.deliveryHeader = getInitParameter("addDeliveryHeader");
-        this.resetReturnPath = getInitParameter("resetReturnPath", true);
-        this.consume = getInitParameter("consume", true);
-        this.verbose = getInitParameter("verbose", false);
-        this.quiet = getInitParameter("quiet", false);
+    public static class Builder {
+        private UsersRepository usersRepos;
+        private MailboxManager mailboxManager;
+        private String folder;
+        private ResourceLocator resourceLocator;
+        private String deliveryHeader;
+        private boolean resetReturnPath;
+        private boolean consume;
+        private Optional<Boolean> verbose = Optional.absent();
+        private Optional<Boolean> quiet = Optional.absent();
+
+        public Builder userRepository(UsersRepository usersRepository) {
+            this.usersRepos = usersRepository;
+            return this;
+        }
 
-        actionDispatcher = new ActionDispatcher();
+        public Builder mailboxManager(MailboxManager mailboxManager) {
+            this.mailboxManager = mailboxManager;
+            return this;
+        }
 
-        setLocator(resourceLocator);
-        setPoster(this);
+        public Builder folder(String folder) {
+            this.folder = folder;
+            return this;
+        }
 
-        if (poster == null || locator == null) {
-            throw new MailetException("Not initialised. Please ensure that the mailet container supports either" +
-                " setter or constructor injection");
+        public Builder resourceLocator(ResourceLocator resourceLocator) {
+            this.resourceLocator = resourceLocator;
+            return this;
         }
 
-        try {
-            final ConfigurationManager configurationManager = new ConfigurationManager();
-            final int logLevel;
-            if (verbose) {
-                logLevel = CommonsLoggingAdapter.TRACE;
-            } else if (quiet) {
-                logLevel = CommonsLoggingAdapter.FATAL;
-            } else {
-                logLevel = CommonsLoggingAdapter.WARN;
-            }
-            log = new CommonsLoggingAdapter(this, logLevel);
-            configurationManager.setLog(log);
-            factory = configurationManager.build();
-        } catch (SieveConfigurationException e) {
-            throw new MessagingException("Failed to load standard Sieve configuration.", e);
+        public Builder deliveryHeader(String deliveryHeader) {
+            this.deliveryHeader = deliveryHeader;
+            return this;
         }
-    }
 
-    public ResourceLocator getLocator() {
-        return locator;
-    }
+        public Builder resetReturnPath(boolean resetReturnPath) {
+            this.resetReturnPath = resetReturnPath;
+            return this;
+        }
 
-    public void setLocator(ResourceLocator locator) {
-        this.locator = locator;
-    }
+        public Builder verbose(boolean verbose) {
+            this.verbose = Optional.of(verbose);
+            return this;
+        }
 
-    public Poster getPoster() {
-        return poster;
-    }
+        public Builder consume(boolean consume) {
+            this.consume = consume;
+            return this;
+        }
 
-    public void setPoster(Poster poster) {
-        this.poster = poster;
-    }
+        public Builder quiet(boolean quiet) {
+            this.quiet = Optional.of(quiet);
+            return this;
+        }
 
-    public boolean isConsume() {
-        return consume;
-    }
+        public SieveMailet build() throws MessagingException {
+            if (resourceLocator == null) {
+                throw new MailetException("Not initialised. Please ensure that the mailet container supports either setter or constructor injection");
+            }
+            return new SieveMailet(usersRepos,mailboxManager, resourceLocator, folder, deliveryHeader, resetReturnPath, consume, verbose.or(false), quiet.or(false));
+        }
 
-    public void setConsume(boolean consume) {
-        this.consume = consume;
     }
 
-    public boolean isVerbose() {
-        return verbose;
-    }
+    private final UsersRepository usersRepos;
+    private final MailboxManager mailboxManager;
+    private final String folder;
+    private final ResourceLocator resourceLocator;
+    private final String deliveryHeader;
+    private final boolean resetReturnPath;
+    private final boolean isInfo;
+    private final boolean verbose;
+    private final boolean consume;
+    private final SieveFactory factory;
+    private final ActionDispatcher actionDispatcher;
+    private final Log log;
+
+    private SieveMailet(UsersRepository usersRepos, MailboxManager mailboxManager, ResourceLocator resourceLocator, String folder, String deliveryHeader,
+                       boolean resetReturnPath, boolean consume, boolean verbose, boolean quiet) throws MessagingException {
 
-    public void setVerbose(boolean verbose) {
+        this.usersRepos = usersRepos;
+        this.resourceLocator = resourceLocator;
+        this.mailboxManager = mailboxManager;
+        this.folder = folder;
+        this.actionDispatcher = new ActionDispatcher();
+        this.deliveryHeader = deliveryHeader;
+        this.resetReturnPath = resetReturnPath;
+        this.consume = consume;
+        this.isInfo = verbose || !quiet;
         this.verbose = verbose;
+        this.log = new CommonsLoggingAdapter(this, computeLogLevel(quiet, verbose));
+        try {
+            final ConfigurationManager configurationManager = new ConfigurationManager();
+            configurationManager.setLog(log);
+            factory = configurationManager.build();
+        } catch (SieveConfigurationException e) {
+            throw new MessagingException("Failed to load standard Sieve configuration.", e);
+        }
     }
 
-    public boolean isQuiet() {
-        return quiet;
-    }
-
-    public void setQuiet(boolean quiet) {
-        this.quiet = quiet;
-    }
-
-    public boolean isInfoLoggingOn() {
-        return verbose || !quiet;
+    private int computeLogLevel(boolean quiet, boolean verbose) {
+        if (verbose) {
+            return CommonsLoggingAdapter.TRACE;
+        } else if (quiet) {
+            return CommonsLoggingAdapter.FATAL;
+        } else {
+            return CommonsLoggingAdapter.WARN;
+        }
     }
 
     protected String getUsername(MailAddress m) {
@@ -177,7 +191,7 @@ public class SieveMailet  extends GenericMailet implements Poster {
                 return m.getLocalPart() + "@localhost";
             }
         } catch (UsersRepositoryException e) {
-            log("Unable to access UsersRepository", e);
+            log.error("Unable to access UsersRepository", e);
             return m.getLocalPart() + "@localhost";
 
         }
@@ -202,7 +216,7 @@ public class SieveMailet  extends GenericMailet implements Poster {
         }
         // If no exception was thrown the message was successfully stored in the
         // mailbox
-        log("Local delivered mail " + mail.getName() + " sucessfully from " + s + " to " + recipient.toString()
+        log.info("Local delivered mail " + mail.getName() + " sucessfully from " + s + " to " + recipient.toString()
                 + " in folder " + this.folder);
     }
 
@@ -379,7 +393,7 @@ public class SieveMailet  extends GenericMailet implements Poster {
                     }
                 }
             } catch (Exception ex) {
-                log("Error while storing mail.", ex);
+                log.error("Error while storing mail.", ex);
                 errors.add(recipient);
             }
         }
@@ -404,15 +418,15 @@ public class SieveMailet  extends GenericMailet implements Poster {
     protected void sieveMessage(MailAddress recipient, Mail aMail) throws MessagingException {
         String username = getUsername(recipient);
         try {
-            final ResourceLocator.UserSieveInformation userSieveInformation = locator.get(getScriptUri(recipient));
+            final ResourceLocator.UserSieveInformation userSieveInformation = resourceLocator.get(getScriptUri(recipient));
             sieveMessageEvaluate(recipient, aMail, userSieveInformation);
         } catch (Exception ex) {
             // SIEVE is a mail filtering protocol.
             // Rejecting the mail because it cannot be filtered
             // seems very unfriendly.
             // So just log and store in INBOX
-            if (isInfoLoggingOn()) {
-                log("Cannot evaluate Sieve script. Storing mail in user INBOX.", ex);
+            if (isInfo) {
+                log.error("Cannot evaluate Sieve script. Storing mail in user INBOX.", ex);
             }
             storeMessageInbox(username, aMail.getMessage());
         }
@@ -421,12 +435,12 @@ public class SieveMailet  extends GenericMailet implements Poster {
     private void sieveMessageEvaluate(MailAddress recipient, Mail aMail, ResourceLocator.UserSieveInformation userSieveInformation) throws MessagingException, IOException {
         try {
             SieveMailAdapter aMailAdapter = new SieveMailAdapter(aMail,
-                getMailetContext(), actionDispatcher, poster, userSieveInformation.getScriptActivationDate(),
+                getMailetContext(), actionDispatcher, this, userSieveInformation.getScriptActivationDate(),
                 userSieveInformation.getScriptInterpretationDate(), recipient);
             aMailAdapter.setLog(log);
             // This logging operation is potentially costly
             if (verbose) {
-                log("Evaluating " + aMailAdapter.toString() + "against \""
+                log.error("Evaluating " + aMailAdapter.toString() + "against \""
                     + getScriptUri(recipient) + "\"");
             }
             factory.evaluate(aMailAdapter, factory.parse(userSieveInformation.getScriptContent()));
@@ -443,8 +457,7 @@ public class SieveMailet  extends GenericMailet implements Poster {
     }
 
     protected void storeMessageInbox(String username, MimeMessage message) throws MessagingException {
-        String url = "mailbox://" + username + "/";
-        poster.post(url, message);
+        post("mailbox://" + username + "/", message);
     }
 
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7d311849/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java
index e5af0cb..36744f0 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/ToRecipientFolder.java
@@ -89,41 +89,20 @@ public class ToRecipientFolder extends GenericMailet {
     }
 
     @Override
-    public void init() throws MessagingException {
-        super.init();
-        sieveMailet = new SieveMailet(usersRepository, mailboxManager, ResourceLocatorImpl.instanciate(usersRepository, sieveRepository), getInitParameter(FOLDER_PARAMETER, "INBOX"));
-        sieveMailet.init(new MailetConfig() {
-            
-            @Override
-            public String getInitParameter(String name) {
-                if ("addDeliveryHeader".equals(name)) {
-                    return "Delivered-To";
-                } else if ("resetReturnPath".equals(name)) {
-                    return "true";
-                } else {
-                    return getMailetConfig().getInitParameter(name);
-                }
-            }
-
-            @Override
-            public Iterator<String> getInitParameterNames() {
-                return Iterators.concat(getMailetConfig().getInitParameterNames(),
-                        Arrays.asList("addDeliveryHeader", "resetReturnPath").iterator());
-            }
-            
-            @Override
-            public MailetContext getMailetContext() {
-                return getMailetConfig().getMailetContext();
-            }
-
-            @Override
-            public String getMailetName() {
-                return getMailetConfig().getMailetName();
-            }
-
-        });
-        sieveMailet.setQuiet(getInitParameter("quiet", true));
-        sieveMailet.setConsume(getInitParameter(CONSUME_PARAMETER, false));
+    public void init(MailetConfig mailetConfig) throws MessagingException {
+        super.init(mailetConfig);
+        sieveMailet = SieveMailet.builder()
+            .mailboxManager(mailboxManager)
+            .userRepository(usersRepository)
+            .resourceLocator(ResourceLocatorImpl.instanciate(usersRepository, sieveRepository))
+            .deliveryHeader("Delivered-To")
+            .folder(getInitParameter(FOLDER_PARAMETER, "INBOX"))
+            .resetReturnPath(true)
+            .consume(getInitParameter(CONSUME_PARAMETER, false))
+            .verbose(getInitParameter("verbose", false))
+            .quiet(getInitParameter("quiet", true))
+            .build();
+        sieveMailet.init(mailetConfig);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7d311849/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
index 1c69378..0e29313 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveMailetTest.java
@@ -102,7 +102,16 @@ public class SieveMailetTest {
         mailboxManager = mock(MailboxManager.class);
         fakeMailContext = FakeMailContext.defaultContext();
         fakeMailetConfig = new FakeMailetConfig("sieveMailet", fakeMailContext);
-        sieveMailet = new SieveMailet(usersRepository, mailboxManager, resourceLocator, "INBOX");
+
+        sieveMailet = SieveMailet.builder()
+            .userRepository(usersRepository)
+            .mailboxManager(mailboxManager)
+            .resourceLocator(resourceLocator)
+            .folder("INBOX")
+            .deliveryHeader("DELIVERY_HEADER")
+            .resetReturnPath(true)
+            .consume(true)
+            .build();
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org