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