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