Author: rdonkin
Date: Fri Jul 24 06:38:40 2009
New Revision: 797335
URL: http://svn.apache.org/viewvc?rev=797335&view=rev
Log:
JSIEVE-56 Add setter for context, to allow MailAdapter implementations to
access the environment of the current script execution
https://issues.apache.org/jira/browse/JSIEVE-56
Modified:
james/jsieve/trunk/mailet/src/main/java/org/apache/jsieve/mailet/SieveMailAdapter.java
james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveFactory.java
james/jsieve/trunk/main/src/main/java/org/apache/jsieve/mail/MailAdapter.java
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
Modified:
james/jsieve/trunk/mailet/src/main/java/org/apache/jsieve/mailet/SieveMailAdapter.java
URL:
http://svn.apache.org/viewvc/james/jsieve/trunk/mailet/src/main/java/org/apache/jsieve/mailet/SieveMailAdapter.java?rev=797335&r1=797334&r2=797335&view=diff
==============================================================================
---
james/jsieve/trunk/mailet/src/main/java/org/apache/jsieve/mailet/SieveMailAdapter.java
(original)
+++
james/jsieve/trunk/mailet/src/main/java/org/apache/jsieve/mailet/SieveMailAdapter.java
Fri Jul 24 06:38:40 2009
@@ -19,7 +19,6 @@
package org.apache.jsieve.mailet;
import java.io.IOException;
-import java.lang.ref.PhantomReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -42,6 +41,7 @@
import org.apache.james.mime4j.field.address.Mailbox;
import org.apache.james.mime4j.field.address.MailboxList;
import org.apache.james.mime4j.field.address.parser.ParseException;
+import org.apache.jsieve.SieveContext;
import org.apache.jsieve.exception.InternetAddressException;
import org.apache.jsieve.exception.SieveException;
import org.apache.jsieve.mail.Action;
@@ -464,6 +464,6 @@
throw new SieveMailException(e);
}
}
-
-
+
+ public void setContext(SieveContext context) {}
}
Modified:
james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveFactory.java
URL:
http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveFactory.java?rev=797335&r1=797334&r2=797335&view=diff
==============================================================================
--- james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveFactory.java
(original)
+++ james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveFactory.java
Fri Jul 24 06:38:40 2009
@@ -136,38 +136,47 @@
*/
public void evaluate(MailAdapter mail, Node startNode)
throws SieveException {
- SieveContext context = new BaseSieveContext(commandManager,
+ final SieveContext context = new BaseSieveContext(commandManager,
comparatorManager, testManager, log);
- SieveParserVisitor visitor = new SieveParserVisitorImpl(context);
try {
- // Evaluate the Nodes
- startNode.jjtAccept(visitor, mail);
-
- } catch (StopException ex) {
- // Stop is OK
- } catch (SieveException ex) {
- if (log.isErrorEnabled())
- log.error("Evaluation failed. Reason: " + ex.getMessage());
- if (log.isDebugEnabled())
- log.debug("Evaluation failed.", ex);
- throw ex;
- }
-
- // If after evaluating all of the nodes or stopping, implicitKeep is
- // still
- // in effect, add a Keep to the list of Actions.
- if (context.getCommandStateManager().isImplicitKeep())
- mail.addAction(new ActionKeep());
-
- // Execute the List of Actions
- try {
- mail.executeActions();
- } catch (SieveException ex) {
- if (log.isErrorEnabled())
- log.error("Evaluation failed. Reason: " + ex.getMessage());
- if (log.isDebugEnabled())
- log.debug("Evaluation failed.", ex);
- throw ex;
+ // Ensure that the context is set on the mail
+ mail.setContext(context);
+
+ SieveParserVisitor visitor = new SieveParserVisitorImpl(context);
+ try {
+ // Evaluate the Nodes
+ startNode.jjtAccept(visitor, mail);
+
+ } catch (StopException ex) {
+ // Stop is OK
+ } catch (SieveException ex) {
+ if (log.isErrorEnabled())
+ log.error("Evaluation failed. Reason: " + ex.getMessage());
+ if (log.isDebugEnabled())
+ log.debug("Evaluation failed.", ex);
+ throw ex;
+ }
+
+ // If after evaluating all of the nodes or stopping, implicitKeep
is
+ // still
+ // in effect, add a Keep to the list of Actions.
+ if (context.getCommandStateManager().isImplicitKeep())
+ mail.addAction(new ActionKeep());
+
+ // Execute the List of Actions
+ try {
+ mail.executeActions();
+ } catch (SieveException ex) {
+ if (log.isErrorEnabled())
+ log.error("Evaluation failed. Reason: " + ex.getMessage());
+ if (log.isDebugEnabled())
+ log.debug("Evaluation failed.", ex);
+ throw ex;
+ }
+ } finally {
+ // Tidy up by ensuring that a reference to the context is not held
by the adapter.
+ // This prevents leaks when the adapter stores the context in a
thread local variable.
+ mail.setContext(null);
}
}
Modified:
james/jsieve/trunk/main/src/main/java/org/apache/jsieve/mail/MailAdapter.java
URL:
http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/main/java/org/apache/jsieve/mail/MailAdapter.java?rev=797335&r1=797334&r2=797335&view=diff
==============================================================================
---
james/jsieve/trunk/main/src/main/java/org/apache/jsieve/mail/MailAdapter.java
(original)
+++
james/jsieve/trunk/main/src/main/java/org/apache/jsieve/mail/MailAdapter.java
Fri Jul 24 06:38:40 2009
@@ -22,6 +22,7 @@
import java.util.List;
import java.util.ListIterator;
+import org.apache.jsieve.SieveContext;
import org.apache.jsieve.exception.InternetAddressException;
import org.apache.jsieve.exception.SieveException;
@@ -70,6 +71,21 @@
* </pre></code>
*/
public interface MailAdapter {
+
+ /**
+ * <p>Sets the context for the current sieve script execution.</p>
+ * <p>Sieve engines <code>MUST</code> set this property before any calls
+ * related to the execution of a script are made.</p>
+ * <p>Implementations intended to be shared between separate threads of
+ * execution <code>MUST</code> ensure that they manage concurrency
contexts,
+ * for example by storage in a thread local variable. Engines
<code>MUST</code>
+ * - for a script execution - ensure that all calls are made within the
+ * same thread of execution.</p>
+ * @param context the current context,
+ * or null to clear the contest once the execution of a script has
completed.
+ */
+ public void setContext(SieveContext context);
+
/**
* Method getActions answers the List of Actions accumulated by the
* receiver. Implementations may elect to supply an unmodifiable
collection.
Modified:
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
URL:
http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java?rev=797335&r1=797334&r2=797335&view=diff
==============================================================================
---
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
(original)
+++
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
Fri Jul 24 06:38:40 2009
@@ -31,6 +31,7 @@
import javax.mail.Message;
import javax.mail.MessagingException;
+import org.apache.jsieve.SieveContext;
import org.apache.jsieve.exception.SieveException;
import org.apache.jsieve.mail.Action;
import org.apache.jsieve.mail.MailAdapter;
@@ -311,4 +312,6 @@
}
}
+ public void setContext(SieveContext context) {}
+
}
Modified:
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java
URL:
http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java?rev=797335&r1=797334&r2=797335&view=diff
==============================================================================
---
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java
(original)
+++
james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/SieveMailAdapter.java
Fri Jul 24 06:38:40 2009
@@ -35,6 +35,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.jsieve.SieveContext;
import org.apache.jsieve.exception.SieveException;
import org.apache.jsieve.mail.Action;
import org.apache.jsieve.mail.MailAdapter;
@@ -296,4 +297,5 @@
return contentAsLowerCaseString;
}
+ public void setContext(SieveContext context) {}
}
Modified:
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
URL:
http://svn.apache.org/viewvc/james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java?rev=797335&r1=797334&r2=797335&view=diff
==============================================================================
---
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
(original)
+++
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/check/ScriptCheckMailAdapter.java
Fri Jul 24 06:38:40 2009
@@ -32,6 +32,7 @@
import javax.mail.Message;
import javax.mail.MessagingException;
+import org.apache.jsieve.SieveContext;
import org.apache.jsieve.exception.SieveException;
import org.apache.jsieve.mail.Action;
import org.apache.jsieve.mail.MailAdapter;
@@ -313,4 +314,6 @@
return result;
}
+ public void setContext(SieveContext context) {}
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]