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 rd...@apache.org on 2008/08/31 17:13:55 UTC
svn commit: r690710 - in /james/jsieve/trunk/src:
main/java/org/apache/jsieve/ main/java/org/apache/jsieve/commands/
main/java/org/apache/jsieve/commands/optional/ test/java/org/apache/jsieve/
test/java/org/apache/jsieve/junit/commands/
Author: rdonkin
Date: Sun Aug 31 08:13:54 2008
New Revision: 690710
URL: http://svn.apache.org/viewvc?rev=690710&view=rev
Log:
CommandStateManager is no longer a pseudo-singleton. JSIEVE-26
Modified:
james/jsieve/trunk/src/main/java/org/apache/jsieve/BaseSieveContext.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/CommandStateManager.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveContext.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveFactory.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractActionCommand.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractBodyCommand.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractCommand.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractPrologCommand.java
james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/optional/Reject.java
james/jsieve/trunk/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java
james/jsieve/trunk/src/test/java/org/apache/jsieve/junit/commands/ConcurrencyTest.java
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/BaseSieveContext.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/BaseSieveContext.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/BaseSieveContext.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/BaseSieveContext.java Sun Aug 31 08:13:54 2008
@@ -26,7 +26,13 @@
public class BaseSieveContext extends SieveContext {
private ScriptCoordinate coordinate;
+ private final CommandStateManager commandStateManager;
+ public BaseSieveContext()
+ {
+ this.commandStateManager = new CommandStateManager();
+ }
+
/**
* Gets the script position of the current operation.
*
@@ -45,5 +51,10 @@
public void setCoordinate(ScriptCoordinate coordinate) {
this.coordinate = coordinate;
}
+
+ public CommandStateManager getCommandStateManager()
+ {
+ return commandStateManager;
+ }
}
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/CommandStateManager.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/CommandStateManager.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/CommandStateManager.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/CommandStateManager.java Sun Aug 31 08:13:54 2008
@@ -46,14 +46,9 @@
private boolean fieldHasActions = false;
/**
- * The instance of the reciever for the current thread
- */
- static private final ThreadLocal fieldInstance = new ThreadLocal();
-
- /**
* Constructor for CommandStateManager.
*/
- private CommandStateManager() {
+ public CommandStateManager() {
super();
initialize();
}
@@ -69,70 +64,6 @@
}
/**
- * Answers a new instance of the receiver.
- *
- * @return ConditionManager
- */
- static protected CommandStateManager computeInstance() {
- return new CommandStateManager();
- }
-
- /**
- * <p>
- * Returns an instance of the receiver for the current thread, lazily
- * intialised if required.
- * </p>
- *
- * <p>
- * Note that this must be synchronized to prevent another thread detecting
- * the null state while this thread is initialising.
- * </p>
- *
- * @return ConditionManager
- */
- static synchronized public CommandStateManager getInstance() {
- CommandStateManager instance = null;
- if (null == (instance = getInstanceBasic())) {
- updateInstance();
- return getInstance();
- }
- return instance;
- }
-
- /**
- * Returns the current CommandStateManager for the current thread.
- *
- * @return CommandStateManager
- */
- static private CommandStateManager getInstanceBasic() {
- return (CommandStateManager) fieldInstance.get();
- }
-
- /**
- * Sets the CommandStateManager for the current thread.
- *
- * @param conditionManager
- * The CommandStateManager to set
- */
- static protected void setInstance(CommandStateManager conditionManager) {
- fieldInstance.set(conditionManager);
- }
-
- /**
- * resets the current CommandStateManager.
- */
- static public void resetInstance() {
- setInstance(null);
- }
-
- /**
- * Updates the current CommandStateManager.
- */
- static protected void updateInstance() {
- setInstance(computeInstance());
- }
-
- /**
* Returns the hasActions.
*
* @return boolean
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveContext.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveContext.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveContext.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveContext.java Sun Aug 31 08:13:54 2008
@@ -39,4 +39,7 @@
* <code>ScriptCoordinate</code>, not null
*/
public abstract void setCoordinate(ScriptCoordinate coordinate);
+
+ //TODO: simplify interface
+ public abstract CommandStateManager getCommandStateManager();
}
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveFactory.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveFactory.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveFactory.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveFactory.java Sun Aug 31 08:13:54 2008
@@ -127,7 +127,8 @@
*/
public void evaluate(MailAdapter mail, Node startNode)
throws SieveException {
- SieveParserVisitor visitor = new SieveParserVisitorImpl();
+ SieveContext context = new BaseSieveContext();
+ SieveParserVisitor visitor = new SieveParserVisitorImpl(context);
reset();
try {
try {
@@ -148,7 +149,7 @@
// If after evaluating all of the nodes or stopping, implicitKeep is
// still
// in effect, add a Keep to the list of Actions.
- if (CommandStateManager.getInstance().isImplicitKeep())
+ if (context.getCommandStateManager().isImplicitKeep())
mail.addAction(new ActionKeep());
// Execute the List of Actions
@@ -170,7 +171,6 @@
private void reset() {
ConditionManager.resetInstance();
- CommandStateManager.resetInstance();
}
/**
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java Sun Aug 31 08:13:54 2008
@@ -52,13 +52,14 @@
* </p>
*/
public class SieveParserVisitorImpl implements SieveParserVisitor {
- private BaseSieveContext context = new BaseSieveContext();
+ private final SieveContext context;
/**
* Constructor for NodeVisitor.
*/
- public SieveParserVisitorImpl() {
+ public SieveParserVisitorImpl(final SieveContext context) {
super();
+ this.context = context;
}
/**
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractActionCommand.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractActionCommand.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractActionCommand.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractActionCommand.java Sun Aug 31 08:13:54 2008
@@ -19,15 +19,14 @@
package org.apache.jsieve.commands;
+import java.util.List;
+
import org.apache.jsieve.Arguments;
-import org.apache.jsieve.CommandStateManager;
import org.apache.jsieve.SieveContext;
import org.apache.jsieve.StringListArgument;
import org.apache.jsieve.exception.CommandException;
import org.apache.jsieve.exception.SieveException;
-import java.util.List;
-
/**
* Abstract class AbstractActionCommand defines the common state validation and
* state update behavior for Action Commands as per RFC 3028, section 8.
@@ -48,12 +47,12 @@
* </p>
*
* <p>And also</p>
- * @see org.apache.jsieve.commands.AbstractCommand#updateState()
+ * @see org.apache.jsieve.commands.AbstractCommand#updateState(SieveContext)
*/
- protected void updateState() {
- super.updateState();
- CommandStateManager.getInstance().setHasActions(true);
- CommandStateManager.getInstance().setImplicitKeep(false);
+ protected void updateState(SieveContext context) {
+ super.updateState(context);
+ context.getCommandStateManager().setHasActions(true);
+ context.getCommandStateManager().setImplicitKeep(false);
}
/**
@@ -66,7 +65,7 @@
* @see org.apache.jsieve.commands.AbstractCommand#validateState(SieveContext)
*/
protected void validateState(SieveContext context) throws CommandException {
- if (CommandStateManager.getInstance().isRejected())
+ if (context.getCommandStateManager().isRejected())
throw context.getCoordinate().commandException(
"Cannot perform Actions on a rejected message.");
}
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractBodyCommand.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractBodyCommand.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractBodyCommand.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractBodyCommand.java Sun Aug 31 08:13:54 2008
@@ -19,7 +19,7 @@
package org.apache.jsieve.commands;
-import org.apache.jsieve.CommandStateManager;
+import org.apache.jsieve.SieveContext;
/**
* Abstract class AbstractBodyCommand defines the common state update behavior
@@ -44,10 +44,10 @@
* <p>
* Also,
*
- * @see org.apache.jsieve.commands.AbstractCommand#updateState()
+ * @see org.apache.jsieve.commands.AbstractCommand#updateState(SieveContext)
*/
- protected void updateState() {
- CommandStateManager.getInstance().setInProlog(false);
+ protected void updateState(final SieveContext context) {
+ context.getCommandStateManager().setInProlog(false);
}
}
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractCommand.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractCommand.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractCommand.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractCommand.java Sun Aug 31 08:13:54 2008
@@ -57,8 +57,9 @@
* Framework method updateState is invoked after a Sieve Command has
* executed to update the Sieve state. Subclass methods are expected to
* override or extend this method to update state as appropriate.
+ * @param context TODO
*/
- protected void updateState() {
+ protected void updateState(SieveContext context) {
}
/**
@@ -116,7 +117,7 @@
validateArguments(arguments, context);
validateBlock(block, context);
Object result = executeBasic(mail, arguments, block, context);
- updateState();
+ updateState(context);
return result;
}
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractPrologCommand.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractPrologCommand.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractPrologCommand.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/AbstractPrologCommand.java Sun Aug 31 08:13:54 2008
@@ -19,7 +19,6 @@
package org.apache.jsieve.commands;
-import org.apache.jsieve.CommandStateManager;
import org.apache.jsieve.SieveContext;
import org.apache.jsieve.exception.CommandException;
@@ -53,7 +52,7 @@
protected void validateState(SieveContext context) throws CommandException {
super.validateState(context);
- if (!(CommandStateManager.getInstance().isInProlog()))
+ if (!(context.getCommandStateManager().isInProlog()))
throw context.getCoordinate().commandException(
"Invalid state for a prolog command.");
}
Modified: james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/optional/Reject.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/optional/Reject.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/optional/Reject.java (original)
+++ james/jsieve/trunk/src/main/java/org/apache/jsieve/commands/optional/Reject.java Sun Aug 31 08:13:54 2008
@@ -21,7 +21,6 @@
import org.apache.jsieve.Arguments;
import org.apache.jsieve.Block;
-import org.apache.jsieve.CommandStateManager;
import org.apache.jsieve.SieveContext;
import org.apache.jsieve.StringListArgument;
import org.apache.jsieve.commands.AbstractActionCommand;
@@ -75,10 +74,10 @@
/**
* @see org.apache.jsieve.commands.AbstractCommand#validateState(SieveContext)
*/
- protected void validateState(SieveContext context) throws CommandException {
+ protected void validateState(final SieveContext context) throws CommandException {
super.validateState(context);
- if (CommandStateManager.getInstance().isHasActions())
+ if (context.getCommandStateManager().isHasActions())
throw context
.getCoordinate()
.commandException(
@@ -86,11 +85,11 @@
}
/**
- * @see org.apache.jsieve.commands.AbstractCommand#updateState()
+ * @see org.apache.jsieve.commands.AbstractCommand#updateState(SieveContext)
*/
- protected void updateState() {
- super.updateState();
- CommandStateManager.getInstance().setRejected(true);
+ protected void updateState(SieveContext context) {
+ super.updateState(context);
+ context.getCommandStateManager().setRejected(true);
}
/**
Modified: james/jsieve/trunk/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java (original)
+++ james/jsieve/trunk/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java Sun Aug 31 08:13:54 2008
@@ -34,7 +34,7 @@
protected void setUp() throws Exception {
super.setUp();
- visitor = new SieveParserVisitorImpl();
+ visitor = new SieveParserVisitorImpl(new BaseSieveContext());
data = new ArrayList();
node = new ASTstring(100);
}
Modified: james/jsieve/trunk/src/test/java/org/apache/jsieve/junit/commands/ConcurrencyTest.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/src/test/java/org/apache/jsieve/junit/commands/ConcurrencyTest.java?rev=690710&r1=690709&r2=690710&view=diff
==============================================================================
--- james/jsieve/trunk/src/test/java/org/apache/jsieve/junit/commands/ConcurrencyTest.java (original)
+++ james/jsieve/trunk/src/test/java/org/apache/jsieve/junit/commands/ConcurrencyTest.java Sun Aug 31 08:13:54 2008
@@ -49,29 +49,4 @@
assertFalse(otherThread.one.equals(otherThread.two));
assertEquals(instance, ConditionManager.getInstance());
}
-
- public void testCommandStateManagerReset() throws Exception {
- CommandStateManager instance = CommandStateManager.getInstance();
- assertNotNull(instance);
-
- class ConcurrentThread extends Thread {
- CommandStateManager one = null;
- CommandStateManager two = null;
- public void run() {
- one = CommandStateManager.getInstance();
- CommandStateManager.resetInstance();
- two = CommandStateManager.getInstance();
- }
- }
-
- ConcurrentThread otherThread = new ConcurrentThread();
- otherThread.start();
- otherThread.join();
-
- assertNotNull(otherThread.one);
- assertNotNull(otherThread.two);
- assertFalse(otherThread.one.equals(otherThread.two));
-
- assertEquals(instance, CommandStateManager.getInstance());
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org