You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by br...@apache.org on 2013/07/03 22:45:38 UTC

svn commit: r1499551 - in /commons/proper/chain/trunk: api/src/main/java/org/apache/commons/chain2/ apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/ apps/cookbook-examples/src/main/java/org/apache/commons/chain2/coo...

Author: britter
Date: Wed Jul  3 20:45:37 2013
New Revision: 1499551

URL: http://svn.apache.org/r1499551
Log:
CHAIN-98 - Refactor command interface and base Implementations to enumeration to represent states. Patch provided by Jonas Sprenger

Added:
    commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java   (with props)
    commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java   (with props)
Modified:
    commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
    commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
    commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
    commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
    commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
    commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
    commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
    commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
    commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
    commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
    commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
    commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
    commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
    commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
    commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
    commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
    commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
    commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
    commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
    commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
    commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
    commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
    commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
    commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
    commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
    commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
    commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
    commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
    commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
    commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
    commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
    commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
    commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
    commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
    commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
    commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
    commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
    commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
    commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java

Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java (original)
+++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java Wed Jul  3 20:45:37 2013
@@ -22,7 +22,7 @@ import java.util.Map;
  * <p>A {@link Chain} represents a configured list of
  * {@link Command}s that will be executed in order to perform processing
  * on a specified {@link Context}.  Each included {@link Command} will be
- * executed in turn, until either one of them returns <code>true</code>,
+ * executed in turn, until either one of them returns <code>FINISHED</code>,
  * one of the executed {@link Command}s throws an exception,
  * or the end of the chain has been reached.  The {@link Chain} itself will
  * return the return value of the last {@link Command} that was executed
@@ -78,12 +78,12 @@ public interface Chain<K, V, C extends M
      * to the following algorithm.</p>
      * <ul>
      * <li>If there are no configured {@link Command}s in the {@link Chain},
-     *     return <code>false</code>.</li>
+     *     return <code>CONTINUE</code>.</li>
      * <li>Call the <code>execute()</code> method of each {@link Command}
      *     configured on this chain, in the order they were added via calls
      *     to the <code>addCommand()</code> method, until the end of the
      *     configured {@link Command}s is encountered, or until one of
-     *     the executed {@link Command}s returns <code>true</code>
+     *     the executed {@link Command}s returns <code>FINISHED</code>
      *     or throws an exception.</li>
      * <li>Walk backwards through the {@link Command}s whose
      *     <code>execute()</code> methods, starting with the last one that
@@ -94,10 +94,10 @@ public interface Chain<K, V, C extends M
      *     was called threw an exception, rethrow that exception.</li>
      * <li>Otherwise, return the value returned by the <code>execute()</code>
      *     method of the last {@link Command} that was executed.  This will be
-     *     <code>true</code> if the last {@link Command} indicated that
+     *     <code>FINISHED</code> if the last {@link Command} indicated that
      *     processing of this {@link Context} has been completed, or
-     *     <code>false</code> if none of the called {@link Command}s
-     *     returned <code>true</code>.</li>
+     *     <code>CONTINUE</code> if none of the called {@link Command}s
+     *     returned <code>FINISHED</code>.</li>
      * </ul>
      *
      * @param context The {@link Context} to be processed by this
@@ -106,11 +106,11 @@ public interface Chain<K, V, C extends M
      * @exception IllegalArgumentException if <code>context</code>
      *  is <code>null</code>
      *
-     * @return <code>true</code> if the processing of this {@link Context}
-     *  has been completed, or <code>false</code> if the processing
-     *  of this {@link Context} should be delegated to a subsequent
-     *  {@link Command} in an enclosing {@link Chain}
+     * @return {@link Processing#FINISHED} if the processing of this context
+     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
+     *  of this context should be delegated to a subsequent command in an 
+     *  enclosing chain.
      */
-    boolean execute(C context);
+    Processing execute(C context);
 
 }

Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java (original)
+++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,8 @@ package org.apache.commons.chain2;
 
 import java.util.Map;
 
+import org.apache.commons.chain2.Processing;
+
 /**
  * Builder that allows continue adding a command in the target chain and execute it.
  *
@@ -33,10 +35,13 @@ public interface ChainExecutor<K, V, C e
      * Execute the processing represented by the target chain.
      *
      * @param context the context processed by the target chain
-     * @return true, if the processing of the target chain has been completed,
-     *         false otherwise
+     * @return {@link Processing#FINISHED} if the processing of this context
+     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
+     *  of this context should be delegated to a subsequent command in an
+     *  enclosing chain.
+     *  
      * @see Chain#execute(Map)
      */
-    boolean execute(C context);
+    Processing execute(C context);
 
 }

Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java (original)
+++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java Wed Jul  3 20:45:37 2013
@@ -91,7 +91,7 @@ public final class Chains {
             return this;
         }
 
-        public boolean execute(C context) {
+        public Processing execute(C context) {
             return chain.execute(checkNotNullArgument(context, "Chain cannot be applied to a null context."));
         }
 

Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java (original)
+++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,8 @@ package org.apache.commons.chain2;
 
 import java.util.Map;
 
+import org.apache.commons.chain2.Processing;
+
 /**
  * <p>A {@link Command} encapsulates a unit of processing work to be
  * performed, whose purpose is to examine and/or modify the state of a
@@ -83,29 +85,11 @@ import java.util.Map;
 public interface Command<K, V, C extends Map<K, V>> {
 
     /**
-     * <p>Commands should return <code>CONTINUE_PROCESSING</code> if the processing
-     *  of the given {@link Context} should be delegated to a subsequent
-     *  {@link Command} in an enclosing {@link Chain}.</p>
-     *
-     * @since Chain 1.1
-     */
-    public static final boolean CONTINUE_PROCESSING = false;
-
-    /**
-     * <p>Commands should return <code>PROCESSING_COMPLETE</code>
-     * if the processing of the given {@link Context}
-     *  has been completed.</p>
-     *
-     * @since Chain 1.1
-     */
-    public static final boolean PROCESSING_COMPLETE = true;
-
-    /**
-     * <p>Execute a unit of processing work to be performed.  This
-     * {@link Command} may either complete the required processing
-     * and return <code>true</code>, or delegate remaining processing
-     * to the next {@link Command} in a {@link Chain} containing this
-     * {@link Command} by returning <code>false</code>
+     * Execute a unit of processing work to be performed. 
+     * <p>
+     * A command may either complete the required processing and return 
+     * finished, or delegate remaining processing to the subsequent command 
+     * in the enclosing {@link Chain} by returning continue.
      *
      * @param context The {@link Context} to be processed by this
      *  {@link Command}
@@ -115,11 +99,11 @@ public interface Command<K, V, C extends
      * @exception IllegalArgumentException if <code>context</code>
      *  is <code>null</code>
      *
-     * @return <code>true</code> if the processing of this {@link Context}
-     *  has been completed, or <code>false</code> if the processing
-     *  of this {@link Context} should be delegated to a subsequent
-     *  {@link Command} in an enclosing {@link Chain}
+     * @return {@link Processing#FINISHED} if the processing of this contex
+     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
+     *  of this context should be delegated to a subsequent command in an 
+     *  enclosing chain.
      */
-    boolean execute(C context);
+    Processing execute(C context);
 
 }

Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java (original)
+++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java Wed Jul  3 20:45:37 2013
@@ -34,7 +34,7 @@ import java.util.Map;
  * {@link Command}, is where potentially expensive resources must be acquired
  * and held until the processing of a particular request has been completed,
  * even if execution is delegated to a subsequent {@link Command} via the
- * <code>execute()</code> returning <code>false</code>.  A {@link Filter}
+ * <code>execute()</code> returning <code>CONTINUE</code>.  A {@link Filter}
  * can reliably release such resources in the <code>postprocess()</code>
  * method, which is guaranteed to be called by the owning {@link Chain}.</p>
  *
@@ -61,8 +61,8 @@ public interface Filter<K, V, C extends 
      *  is <code>null</code>
      *
      * @return If a non-null <code>exception</code> was "handled" by this
-     *  method (and therefore need not be rethrown), return <code>true</code>;
-     *  otherwise return <code>false</code>
+     *  method (and therefore need not be rethrown), return <code>FINISHED</code>;
+     *  otherwise return <code>CONTINUE</code>
      */
    boolean postprocess(C context, Exception exception);
 

Added: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java?rev=1499551&view=auto
==============================================================================
--- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java (added)
+++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java Wed Jul  3 20:45:37 2013
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.chain2;
+
+/**
+ * A <code>Processing</code> encapsulates states that can be returned by
+ * commands. 
+ * <p>
+ * {@link Command}s should either return <code>FINISHED</code> if the
+ * processing of the given context has been completed, or return
+ * <code>CONTINUE</code> if the processing of the given {@link Context} should
+ * be delegated to a subsequent command in an enclosing {@link Chain}.
+ *
+ * @version $Id $
+ */
+public enum Processing {
+
+    /**
+     * Commands should return continue if the processing of the given 
+     * context should be delegated to a subsequent command in an enclosing chain.
+     *
+     * @since Chain 2.0
+     */
+    CONTINUE,
+
+    /**
+     * Commands should return finished if the processing of the given context
+     * has been completed.
+     *
+     * @since Chain 2.0
+     */
+    FINISHED;
+
+}

Propchange: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java (original)
+++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java Wed Jul  3 20:45:37 2013
@@ -17,6 +17,7 @@
 package org.apache.commons.chain2.cookbook.agility.impl;
 
 import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.cookbook.agility.ProcessException;
 import org.apache.commons.chain2.cookbook.agility.Request;
 import org.apache.commons.chain2.cookbook.agility.RequestHandler;
@@ -48,10 +49,10 @@ public class HandlerCommand implements C
         }
     }
 
-    public boolean execute(RequestContext requestContext) {
+    public Processing execute(RequestContext requestContext) {
         handle(requestContext);
 
-        return CONTINUE_PROCESSING;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java (original)
+++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java Wed Jul  3 20:45:37 2013
@@ -17,6 +17,7 @@
 package org.apache.commons.chain2.cookbook.mailreader.commands;
 
 import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.cookbook.mailreader.MailReader;
 
 import java.io.IOException;
@@ -30,7 +31,7 @@ public class LocaleChange implements Com
     public LocaleChange() {
     }
 
-    public boolean execute(MailReader mailReader) {
+    public Processing execute(MailReader mailReader) {
         try {
             Writer logger = mailReader.getLogger();
             logger.write("LocaleChange.execute ");
@@ -39,7 +40,7 @@ public class LocaleChange implements Com
             throw new RuntimeException(ioe);
         }
 
-        return CONTINUE_PROCESSING;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java (original)
+++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java Wed Jul  3 20:45:37 2013
@@ -17,6 +17,7 @@
 package org.apache.commons.chain2.cookbook.mailreader.commands;
 
 import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.cookbook.mailreader.MailReader;
 
 import java.io.IOException;
@@ -29,14 +30,14 @@ public class LogonUser implements Comman
     public LogonUser() {
     }
 
-    public boolean execute(MailReader mailReader) {
+    public Processing execute(MailReader mailReader) {
         try {
             mailReader.getLogger().write("LogonUser.execute");
         } catch (IOException ioe) {
             throw new RuntimeException(ioe);
         }
 
-        return CONTINUE_PROCESSING;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java (original)
+++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java Wed Jul  3 20:45:37 2013
@@ -17,6 +17,7 @@
 package org.apache.commons.chain2.cookbook.mailreader.commands;
 
 import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.cookbook.mailreader.MailReader;
 
 import java.io.IOException;
@@ -29,14 +30,14 @@ public class ProfileCheck implements Com
     public ProfileCheck() {
     }
 
-    public boolean execute(MailReader mailReader) {
+    public Processing execute(MailReader mailReader) {
         try {
             mailReader.getLogger().write("ProfileCheck.execute\n");
         } catch (IOException ioe) {
             throw new RuntimeException(ioe);
         }
 
-        return CONTINUE_PROCESSING;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java (original)
+++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java Wed Jul  3 20:45:37 2013
@@ -17,6 +17,7 @@
 package org.apache.commons.chain2.cookbook.profile;
 
 import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Processing;
 
 /**
  * @version $Id$
@@ -25,13 +26,13 @@ public class ProfileCheck implements Com
 
     public Profile newProfile(ProfileContext context) { return new Profile(); }
 
-    public boolean execute(ProfileContext context) {
+    public Processing execute(ProfileContext context) {
         Profile profile = context.getProfile();
 
         if (null == profile) {
             context.setProfile(newProfile(context));
         }
-        return false;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java (original)
+++ commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.cookbo
 
 import org.apache.commons.chain2.Catalog;
 import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Processing;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -28,6 +29,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpSession;
 import java.util.Locale;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.verify;
@@ -51,8 +53,8 @@ public class CatalogTest {
         when(request.getSession()).thenReturn(session);
     }
 
-    private boolean executeCatalogCommand(MailReader context,
-            String name, HttpServletRequest request) {
+    private Processing executeCatalogCommand(MailReader context,
+                                             String name, HttpServletRequest request) {
 
         ServletContext servletContext =
                 request.getSession().getServletContext();
@@ -73,9 +75,9 @@ public class CatalogTest {
         MailReader context = new MailReader();
         context.setLocale(Locale.CANADA);
 
-        when(testCommand.execute(context)).thenReturn(true);
+        when(testCommand.execute(context)).thenReturn(Processing.FINISHED);
 
-        assertTrue("Catalog execution did not complete as expected",
+        assertEquals("Catalog execution did not complete as expected", Processing.FINISHED,
                 executeCatalogCommand(context, "aCommand", request));
 
         verify(testCommand).execute(context);

Modified: commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java (original)
+++ commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.web.WebContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -58,15 +59,15 @@ public class CountCommand implements Com
      * <p>Execute the command.</p>
      *
      * @param context The {@link Context} we are operating on
-     * @return <code>false</code> so that processng will continue
+     * @return {@link Processing#CONTINUE} so that processing will continue.
      */
-    public boolean execute(WebContext<String, Object> context) {
+    public Processing execute(WebContext<String, Object> context) {
         count++;
         log.info("Executing: " + attribute + "=" + count);
 
         context.getSessionScope().put(attribute, new Integer(count));
 
-        return false;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java (original)
+++ commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.web.servlet.ServletWebContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -59,9 +60,9 @@ public class ForwardCommand implements C
      * <p>Execute the command.</p>
      *
      * @param context The {@link Context} we are operating on
-     * @return <code>false</code> so that processng will continue
+     * @return {@link Processing#CONTINUE} so that processing will continue.
      */
-    public boolean execute(ServletWebContext<String, Object> context) {
+    public Processing execute(ServletWebContext<String, Object> context) {
         try {
             String uri = getForward(context);
             if (uri != null) {
@@ -70,12 +71,12 @@ public class ForwardCommand implements C
                 }
                 RequestDispatcher rd = context.getContext().getRequestDispatcher(uri);
                 rd.forward(context.getRequest(), context.getResponse());
-                return true;
+                return Processing.FINISHED;
             } else {
                 if (log.isDebugEnabled()) {
                     log.debug("No forward found");
                 }
-                return false;
+                return Processing.CONTINUE;
             }
         } catch (ServletException e) {
             throw new RuntimeException(e);

Modified: commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java (original)
+++ commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.web.WebContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -57,16 +58,17 @@ public class CountCommand implements Com
     /**
      * <p>Execute the command.</p>
      *
-     * @param context The {@link Context} we are operating on
-     * @return <code>false</code> so that processng will continue
+     *
+     * @param context The {@link org.apache.commons.chain2.Context} we are operating on
+     * @return {@link Processing#CONTINUE} so that processing will continue.
      */
-    public boolean execute(WebContext<String, Object> context) {
+    public Processing execute(WebContext<String, Object> context) {
         count++;
         log.info("Executing: " + attribute + "=" + count);
 
         context.getSessionScope().put(attribute, new Integer(count));
 
-        return false;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java (original)
+++ commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.web.servlet.ServletWebContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -57,10 +58,11 @@ public class ForwardCommand implements C
     /**
      * <p>Execute the command.</p>
      *
-     * @param context The {@link Context} we are operating on
-     * @return <code>false</code> so that processng will continue
+     *
+     * @param context The {@link org.apache.commons.chain2.Context} we are operating on
+     * @return {@link Processing#CONTINUE} so that processnig will continue.
      */
-    public boolean execute(ServletWebContext<String, Object> context) {
+    public Processing execute(ServletWebContext<String, Object> context) {
         try {
             String uri = getForward(context);
             if (uri != null) {
@@ -69,12 +71,12 @@ public class ForwardCommand implements C
                 }
                 RequestDispatcher rd = context.getContext().getRequestDispatcher(uri);
                 rd.forward(context.getRequest(), context.getResponse());
-                return true;
+                return Processing.FINISHED;
             } else {
                 if (log.isDebugEnabled()) {
                     log.debug("No forward found");
                 }
-                return false;
+                return Processing.CONTINUE;
             }
         } catch (IOException e) {
             throw new RuntimeException(e);

Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java (original)
+++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java Wed Jul  3 20:45:37 2013
@@ -19,6 +19,7 @@ package org.apache.commons.chain2.base;
 import java.util.Map;
 
 import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Processing;
 
 /**
  * <p>Copy a specified literal value, or a context attribute stored under
@@ -78,17 +79,17 @@ public class CopyCommand<K, V, C extends
      * <p>Copy a specified literal value, or a context attribute stored under
      * the <code>fromKey</code> (if any), to the <code>toKey</code>.</p>
      *
-     * @param context {@link org.apache.commons.chain2.Context Context} in which we are operating
+     * @param context {@link org.apache.commons.chain2.Context Context} in which we are operating.
      *
-     * @return <code>false</code> so that processing will continue
+     * @return {@link Processing#CONTINUE} so that processing will continue.
      * @throws org.apache.commons.chain2.ChainException in the if an error occurs during execution.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         if (containsKeys(context)) {
             V value = context.get(getFromKey());
             context.put(getToKey(), value);
         }
-        return false;
+        return Processing.CONTINUE;
     }
 
     private boolean containsKeys(C context) {

Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java (original)
+++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.base;
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -55,7 +56,7 @@ public abstract class DispatchCommand<K,
 
     /**
      * Look up the method specified by either "method" or "methodKey" and invoke it,
-     * returning a boolean value as interpreted by <code>evaluateResult</code>.
+     * returning a {@link Processing} value as interpreted by <code>evaluateResult</code>.
      * @param context The Context to be processed by this Command.
      * @return the result of method being dispatched to.
      * @throws IllegalStateException if neither 'method' nor 'methodKey' properties are defined
@@ -64,7 +65,7 @@ public abstract class DispatchCommand<K,
      * the exception itself, unless the cause is an <code>Error</code> or other <code>Throwable</code>
      * which is not an <code>Exception</code>.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         if (this.getMethod() == null && this.getMethodKey() == null) {
             throw new IllegalStateException("Neither 'method' nor 'methodKey' properties are defined ");
         }
@@ -120,15 +121,19 @@ public abstract class DispatchCommand<K,
     }
 
     /**
-     * Evaluate the result of the method invocation as a boolean value.  Base implementation
-     * expects that the invoked method returns boolean true/false, but subclasses might
+     * Evaluate the result of the method invocation as a processing value. Base implementation
+     * expects that the invoked method returns processing, but subclasses might
      * implement other interpretations.
-     * @param o The result of the methid execution
+     * @param obj The result of the method execution
      * @return The evaluated result/
      */
-    protected boolean evaluateResult(Object o) {
-        Boolean result = (Boolean) o;
-        return result != null && result.booleanValue();
+    protected Processing evaluateResult(Object obj) {
+        if(obj instanceof Processing) {
+            Processing result = (Processing) obj;
+            return result;
+        } else {
+            return Processing.CONTINUE;
+        }
     }
 
     /**

Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java (original)
+++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java Wed Jul  3 20:45:37 2013
@@ -20,6 +20,7 @@ import org.apache.commons.chain2.Catalog
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
 import org.apache.commons.chain2.Filter;
+import org.apache.commons.chain2.Processing;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -133,13 +134,13 @@ public class DispatchLookupCommand<K, V,
      *
      * @param context The context for this request
      * @return the result of executing the looked-up command's method, or
-     * <code>false</code> if no command is found.
+     * {@link Processing#CONTINUE} if no command is found.
      *
      * @throws DispatchException if no such {@link Command} can be found and the
      *  <code>optional</code> property is set to <code>false</code>
      */
     @Override
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         if (this.getMethod() == null && this.getMethodKey() == null) {
             throw new IllegalStateException("Neither 'method' nor 'methodKey' properties are defined");
         }
@@ -150,9 +151,13 @@ public class DispatchLookupCommand<K, V,
             try {
                 Method methodObject = extractMethod(command, context);
                 Object obj = methodObject.invoke(command, getArguments(context));
-
-                Boolean result = (Boolean) obj;
-                return result != null && result.booleanValue(); // might cause NPE (obj could be null)
+                
+                if(obj instanceof Processing) {
+                    Processing result = (Processing) obj;
+                    return result;
+                } else {
+                    return Processing.CONTINUE;
+                }
             } catch (NoSuchMethodException e) {
                 throw new DispatchException("Error extracting method from context", e, context, this);
             } catch (IllegalAccessException e) {
@@ -162,7 +167,7 @@ public class DispatchLookupCommand<K, V,
                 throw new DispatchException("Error in reflected dispatched command", cause, context, this);
             }
         }
-        return false;
+        return Processing.CONTINUE;
     }
 
     // ------------------------------------------------------ Protected Methods

Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java (original)
+++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java Wed Jul  3 20:45:37 2013
@@ -21,6 +21,7 @@ import org.apache.commons.chain2.Catalog
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
 import org.apache.commons.chain2.Filter;
+import org.apache.commons.chain2.Processing;
 
 import java.util.Map;
 
@@ -254,7 +255,7 @@ public class LookupCommand<K, V, C exten
      * <p>Look up the specified command, and (if found) execute it.
      * Unless <code>ignoreExecuteResult</code> is set to <code>true</code>,
      * return the result of executing the found command.  If no command
-     * is found, return <code>false</code>, unless the <code>optional</code>
+     * is found, return {@link Processing#CONTINUE}, unless the <code>optional</code>
      * property is <code>false</code>, in which case an <code>IllegalArgumentException</code>
      * will be thrown.
      * </p>
@@ -265,21 +266,21 @@ public class LookupCommand<K, V, C exten
      *  can be found and the <code>optional</code> property is set
      *  to <code>false</code>
      * @return the result of executing the looked-up command, or
-     * <code>false</code> if no command is found or if the command
+     * <code>CONTINUE</code> if no command is found or if the command
      * is found but the <code>ignoreExecuteResult</code> property of this
      * instance is <code>true</code>
      * @throws org.apache.commons.chain2.ChainException if and error occurs in the looked-up Command.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         Command<K, V, C> command = getCommand(context);
         if (command != null) {
-            boolean result = command.execute(context);
+            Processing result = command.execute(context);
             if (isIgnoreExecuteResult()) {
-                return false;
+                return Processing.CONTINUE;
             }
             return result;
         }
-        return false;
+        return Processing.CONTINUE;
     }
 
 

Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java (original)
+++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java Wed Jul  3 20:45:37 2013
@@ -21,6 +21,7 @@ import java.util.Map;
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 /**
  * <p>Override any context attribute stored under the <code>key</code> with <code>value</code>.</p>
@@ -79,14 +80,14 @@ public class OverrideCommand<K, V, C ext
      *
      * @param context {@link org.apache.commons.chain2.Context} in which we are operating
      *
-     * @return <code>false</code> so that processing will continue
+     * @return {@link Processing#CONTINUE} so that {@link Processing} will continue.
      * @throws org.apache.commons.chain2.ChainException if and error occurs.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         if (context.containsKey(getKey())) {
             context.put(getKey(), getValue());
         }
-        return false;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java (original)
+++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.base;
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 /**
  * <p>Remove any context attribute stored under the <code>fromKey</code>.</p>
@@ -59,12 +60,12 @@ public class RemoveCommand<K, V, C exten
      *
      * @param context {@link Context} in which we are operating
      *
-     * @return <code>false</code> so that processing will continue
+     * @return {@link Processing#CONTINUE} so that processing will continue.
      * @throws org.apache.commons.chain2.ChainException if and error occurs.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         context.remove(getFromKey());
-        return false;
+        return Processing.CONTINUE;
     }
 
 }

Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java (original)
+++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java Wed Jul  3 20:45:37 2013
@@ -21,6 +21,7 @@ import org.apache.commons.chain2.Command
 import org.apache.commons.chain2.Context;
 import org.apache.commons.chain2.Filter;
 import org.apache.commons.chain2.ChainException;
+import org.apache.commons.chain2.Processing;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -145,12 +146,12 @@ public class ChainBase<K, V, C extends M
      * @throws IllegalArgumentException if <code>context</code>
      *  is <code>null</code>
      *
-     * @return <code>true</code> if the processing of this {@link Context}
-     *  has been completed, or <code>false</code> if the processing
-     *  of this {@link Context} should be delegated to a subsequent
-     *  {@link Command} in an enclosing {@link Chain}
+     * @return {@link Processing#FINISHED} if the processing of this contex
+     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
+     *  of this context should be delegated to a subsequent command in an 
+     *  enclosing chain.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         // Verify our parameters
         if (context == null) {
             throw new IllegalArgumentException("Can't execute a null context");
@@ -159,9 +160,9 @@ public class ChainBase<K, V, C extends M
         // Freeze the configuration of the command list
         frozen = true;
 
-        // Execute the commands in this list until one returns true
-        // or throws an exception
-        boolean saveResult = false;
+        // Execute the commands in this list until one returns something else 
+        // than Processing.CONTINUE or throws an exception
+        Processing saveResult = Processing.CONTINUE;
         Exception saveException = null;
         int i = 0;
         int n = commands.size();
@@ -170,7 +171,11 @@ public class ChainBase<K, V, C extends M
             try {
                 lastCommand = commands.get(i);
                 saveResult = lastCommand.execute(context);
-                if (saveResult) {
+                if(saveResult == null) {
+                    String format = String.format("The command '%s' returned an invalid processing value: '%s'",
+                            lastCommand.getClass().getName(), saveResult);
+                    throw new ChainException(format);
+                } else if (saveResult != Processing.CONTINUE) {
                     break;
                 }
             } catch (Exception e) {

Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java (original)
+++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -27,6 +27,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.commons.chain2.Processing;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -94,8 +95,8 @@ public class CopyCommandTestCase {
     }
 
     private void execute() {
-        // make sure execute always returns false
-        assertFalse(command.execute(context));
+        // make sure execute always returns continue
+        assertEquals(Processing.CONTINUE, command.execute(context));
     }
 
 }

Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java (original)
+++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -17,6 +17,7 @@
 package org.apache.commons.chain2.base;
 
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.impl.ContextBase;
 import org.junit.Test;
 
@@ -32,8 +33,8 @@ public class DispatchCommandTestCase {
         test.setMethod("testMethod");
         Context<String, Object> context = new ContextBase();
         assertNull(context.get("foo"));
-        boolean result = test.execute(context);
-        assertTrue(result);
+        Processing result = test.execute(context);
+        assertEquals(Processing.FINISHED, result);
         assertNotNull(context.get("foo"));
         assertEquals("foo", context.get("foo"));
 
@@ -49,8 +50,8 @@ public class DispatchCommandTestCase {
         Context<String, Object> context = new ContextBase();
         context.put("foo", "testMethodKey");
         assertNull(context.get("bar"));
-        boolean result = test.execute(context);
-        assertFalse(result);
+        Processing result = test.execute(context);
+        assertEquals(Processing.CONTINUE, result);
         assertNotNull(context.get("bar"));
         assertEquals("bar", context.get("bar"));
 
@@ -64,8 +65,8 @@ public class DispatchCommandTestCase {
         test.setMethod("foo");
         Context<String, Object> context = new ContextBase();
         assertNull(context.get("elephant"));
-        boolean result = test.execute(context);
-        assertTrue(result);
+        Processing result = test.execute(context);
+        assertEquals(Processing.FINISHED, result);
         assertNotNull(context.get("elephant"));
         assertEquals("elephant", context.get("elephant"));
 
@@ -76,15 +77,15 @@ public class DispatchCommandTestCase {
     class TestCommand extends DispatchCommand<String, Object, Context<String, Object>> {
 
 
-        public boolean testMethod(Context<String, Object> context) {
+        public Processing testMethod(Context<String, Object> context) {
             context.put("foo", "foo");
-            return true;
+            return Processing.FINISHED;
         }
 
-        public boolean testMethodKey(Context<String, Object> context) {
+        public Processing testMethodKey(Context<String, Object> context) {
 
             context.put("bar", "bar");
-            return false;
+            return Processing.CONTINUE;
         }
 
     }
@@ -106,9 +107,9 @@ public class DispatchCommandTestCase {
             return new Object[] { new TestAlternateContext(context) };
         }
 
-        public boolean foo(TestAlternateContext context) {
+        public Processing foo(TestAlternateContext context) {
             context.put("elephant", "elephant");
-            return true;
+            return Processing.FINISHED;
         }
 
     }

Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java (original)
+++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -17,6 +17,7 @@
 package org.apache.commons.chain2.base;
 
 import static org.apache.commons.chain2.testutils.HasLog.hasLog;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -24,6 +25,7 @@ import static org.junit.Assert.fail;
 import org.apache.commons.chain2.Catalog;
 import org.apache.commons.chain2.CatalogFactory;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.impl.CatalogBase;
 import org.apache.commons.chain2.impl.CatalogFactoryBase;
 import org.apache.commons.chain2.impl.ContextBase;
@@ -102,8 +104,8 @@ public class DispatchLookupCommandTestCa
         command.setMethod("fooMethod");
 
         try {
-            assertTrue("Command should return true",
-                       command.execute(context));
+            assertEquals("Command should return finished",
+                    Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
 
             fail("Threw exception: " + e);
@@ -113,8 +115,8 @@ public class DispatchLookupCommandTestCa
         command.setMethod("barMethod");
 
         try {
-            assertTrue("Command should return true",
-                       command.execute(context));
+            assertEquals("Command should return finished",
+                    Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -160,8 +162,8 @@ public class DispatchLookupCommandTestCa
         context.put("methodKey", "fooMethod");
 
         try {
-            assertTrue("Command should return true",
-                       command.execute(context));
+            assertEquals("Command should return finished",
+                    Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -172,8 +174,8 @@ public class DispatchLookupCommandTestCa
 
 
         try {
-            assertTrue("Command should return true",
-                       command.execute(context));
+            assertEquals("Command should return finished",
+                    Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -193,14 +195,14 @@ public class DispatchLookupCommandTestCa
             super(id);
         }
 
-        public boolean fooMethod(C context) {
+        public Processing fooMethod(C context) {
             log(context, id);
-            return true;
+            return Processing.FINISHED;
         }
 
-        public boolean barMethod(C context) {
+        public Processing barMethod(C context) {
             log(context, id);
-            return true;
+            return Processing.FINISHED;
         }
 
     }

Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java (original)
+++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -28,6 +28,7 @@ import org.apache.commons.chain2.Catalog
 import org.apache.commons.chain2.CatalogFactory;
 import org.apache.commons.chain2.Chain;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.impl.CatalogBase;
 import org.apache.commons.chain2.impl.CatalogFactoryBase;
 import org.apache.commons.chain2.impl.ChainBase;
@@ -104,8 +105,8 @@ public class LookupCommandTestCase {
         command.setName("foo");
 
         try {
-            assertTrue("Command should return true",
-                       command.execute(context));
+            assertEquals("Command should return finished",
+        	    Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -127,8 +128,8 @@ public class LookupCommandTestCase {
         command.setName("foo");
 
         try {
-            assertTrue("Command should return true",
-                    command.execute(context));
+            assertEquals("Command should return finished",
+        	    Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -146,8 +147,8 @@ public class LookupCommandTestCase {
         context.put("nameKey", "foo");
 
         try {
-            assertTrue("Command should return true",
-                    command.execute(context));
+            assertEquals("Command should return finished",
+                Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -170,8 +171,8 @@ public class LookupCommandTestCase {
         context.put("nameKey", "foo");
 
         try {
-            assertTrue("Command should return true",
-                       command.execute(context));
+            assertEquals("Command should return finished",
+                Processing.FINISHED, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -189,8 +190,8 @@ public class LookupCommandTestCase {
         command.setName("foo");
 
         try {
-            assertFalse("Command should return false",
-                       command.execute(context));
+            assertEquals("Command should return continue",
+                Processing.CONTINUE, command.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }

Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java (original)
+++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java Wed Jul  3 20:45:37 2013
@@ -28,8 +28,10 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.commons.chain2.Chain;
+import org.apache.commons.chain2.ChainException;
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.testutils.AddingCommand;
 import org.apache.commons.chain2.testutils.DelegatingCommand;
 import org.apache.commons.chain2.testutils.DelegatingFilter;
@@ -37,6 +39,7 @@ import org.apache.commons.chain2.testuti
 import org.apache.commons.chain2.testutils.ExceptionFilter;
 import org.apache.commons.chain2.testutils.NonDelegatingCommand;
 import org.apache.commons.chain2.testutils.NonDelegatingFilter;
+import org.apache.commons.chain2.testutils.NullReturningCommand;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -91,6 +94,15 @@ public class ChainBaseTestCase {
     // ------------------------------------------------ Individual Test Methods
 
 
+    @Test (expected = ChainException.class)
+    public void nullReturningCommandForcesException() {
+        chain.addCommand(new DelegatingCommand("BeforeNullReturningCommand"));
+        chain.addCommand(new NullReturningCommand());
+        chain.addCommand(new NonDelegatingCommand("AfterNullReturningCommand"));
+        
+        chain.execute(context);
+    }
+    
     // Test the ability to add commands
     @Test
     public void testCommands() {
@@ -117,8 +129,7 @@ public class ChainBaseTestCase {
     public void testExecute1a() {
         chain.addCommand(new NonDelegatingCommand("1"));
         try {
-            assertTrue("Chain returned true",
-                       chain.execute(context));
+            assertEquals(Processing.FINISHED, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -131,8 +142,7 @@ public class ChainBaseTestCase {
     public void testExecute1b() {
         chain.addCommand(new DelegatingCommand("1"));
         try {
-            assertTrue("Chain returned false",
-                       !chain.execute(context));
+            assertEquals(Processing.CONTINUE, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -177,8 +187,7 @@ public class ChainBaseTestCase {
         chain.addCommand(new DelegatingCommand("2"));
         chain.addCommand(new NonDelegatingCommand("3"));
         try {
-            assertTrue("Chain returned true",
-                       chain.execute(context));
+            assertEquals(Processing.FINISHED, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -193,8 +202,7 @@ public class ChainBaseTestCase {
         chain.addCommand(new DelegatingCommand("2"));
         chain.addCommand(new DelegatingCommand("3"));
         try {
-            assertTrue("Chain returned false",
-                       !chain.execute(context));
+            assertEquals(Processing.CONTINUE, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -241,8 +249,7 @@ public class ChainBaseTestCase {
     public void testExecute3a() {
         chain.addCommand(new NonDelegatingFilter("1", "a"));
         try {
-            assertTrue("Chain returned true",
-                       chain.execute(context));
+            assertEquals(Processing.FINISHED, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -255,8 +262,7 @@ public class ChainBaseTestCase {
     public void testExecute3b() {
         chain.addCommand(new DelegatingFilter("1", "a"));
         try {
-            assertTrue("Chain returned false",
-                       !chain.execute(context));
+            assertEquals(Processing.CONTINUE, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -286,8 +292,7 @@ public class ChainBaseTestCase {
         chain.addCommand(new DelegatingCommand("2"));
         chain.addCommand(new NonDelegatingFilter("3", "c"));
         try {
-            assertTrue("Chain returned true",
-                       chain.execute(context));
+            assertEquals(Processing.FINISHED, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }
@@ -302,8 +307,7 @@ public class ChainBaseTestCase {
         chain.addCommand(new DelegatingFilter("2", "b"));
         chain.addCommand(new DelegatingCommand("3"));
         try {
-            assertTrue("Chain returned false",
-                       !chain.execute(context));
+            assertEquals(Processing.CONTINUE, chain.execute(context));
         } catch (Exception e) {
             fail("Threw exception: " + e);
         }

Modified: commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java (original)
+++ commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java Wed Jul  3 20:45:37 2013
@@ -19,6 +19,7 @@ package org.apache.commons.chain2.config
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 
 /**
@@ -47,8 +48,8 @@ public class TestCommand implements Comm
     }
 
 
-    public boolean execute(Context<String, Object> context) {
-    return (false);
+    public Processing execute(Context<String, Object> context) {
+        return Processing.CONTINUE;
     }
 
 

Modified: commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java (original)
+++ commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java Wed Jul  3 20:45:37 2013
@@ -33,6 +33,7 @@ import java.util.List;
 import org.apache.commons.chain2.Catalog;
 import org.apache.commons.chain2.CatalogFactory;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.apache.commons.chain2.testutils.AddingCommand;
 import org.apache.commons.chain2.impl.CatalogBase;
 import org.apache.commons.chain2.impl.ChainBase;
@@ -160,8 +161,7 @@ public class XmlConfigParserTestCase {
     @Test
     public void testExecute2a() throws Exception {
 
-        assertTrue("Chain returned true",
-                catalog.getCommand("Execute2a").execute(context));
+        assertEquals(Processing.FINISHED, catalog.getCommand("Execute2a").execute(context));
         assertThat(context, hasLog("1/2/3"));
 
     }
@@ -171,8 +171,7 @@ public class XmlConfigParserTestCase {
     @Test
     public void testExecute2b() throws Exception {
 
-        assertFalse("Chain returned false",
-                catalog.getCommand("Execute2b").execute(context));
+        assertEquals(Processing.CONTINUE, catalog.getCommand("Execute2b").execute(context));
         assertThat(context, hasLog("1/2/3"));
 
     }
@@ -212,8 +211,7 @@ public class XmlConfigParserTestCase {
     @Test
     public void testExecute4a() throws Exception {
 
-        assertTrue("Chain returned true",
-                catalog.getCommand("Execute4a").execute(context));
+        assertEquals(Processing.FINISHED, catalog.getCommand("Execute4a").execute(context));
         assertThat(context, hasLog("1/2/3/c/a"));
 
     }
@@ -223,8 +221,7 @@ public class XmlConfigParserTestCase {
     @Test
     public void testExecute4b() throws Exception {
 
-        assertFalse("Chain returned false",
-                catalog.getCommand("Execute4b").execute(context));
+        assertEquals(Processing.CONTINUE, catalog.getCommand("Execute4b").execute(context));
         assertThat(context, hasLog("1/2/3/b"));
 
     }

Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java (original)
+++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java Wed Jul  3 20:45:37 2013
@@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 
 /**
@@ -50,10 +51,10 @@ public class DelegatingCommand extends N
 
     // Execution method for this Command
     @Override
-    public boolean execute(Context<String, Object> context) {
+    public Processing execute(Context<String, Object> context) {
 
         super.execute(context);
-        return (false);
+        return Processing.CONTINUE;
 
     }
 

Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java (original)
+++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java Wed Jul  3 20:45:37 2013
@@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
 
 import org.apache.commons.chain2.Context;
 import org.apache.commons.chain2.Filter;
+import org.apache.commons.chain2.Processing;
 
 
 /**
@@ -50,10 +51,10 @@ public class DelegatingFilter extends No
 
     // Execution method for this Command
     @Override
-    public boolean execute(Context<String, Object> context) {
+    public Processing execute(Context<String, Object> context) {
 
         super.execute(context);
-        return (false);
+        return Processing.CONTINUE;
 
     }
 

Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java (original)
+++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java Wed Jul  3 20:45:37 2013
@@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 
 /**
@@ -64,13 +65,13 @@ public class NonDelegatingCommand implem
 
 
     // Execution method for this Command
-    public boolean execute(Context<String, Object> context) {
+    public Processing execute(Context<String, Object> context) {
 
         if (context == null) {
             throw new IllegalArgumentException();
         }
         log(context, id);
-        return (true);
+        return Processing.FINISHED;
 
     }
 

Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java (original)
+++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java Wed Jul  3 20:45:37 2013
@@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
 
 import org.apache.commons.chain2.Context;
 import org.apache.commons.chain2.Filter;
+import org.apache.commons.chain2.Processing;
 
 
 /**
@@ -64,10 +65,10 @@ public class NonDelegatingFilter
 
     // Execution method for this Command
     @Override
-    public boolean execute(Context<String, Object> context) {
+    public Processing execute(Context<String, Object> context) {
 
         super.execute(context);
-        return (true);
+        return Processing.FINISHED;
 
     }
 

Added: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java?rev=1499551&view=auto
==============================================================================
--- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java (added)
+++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java Wed Jul  3 20:45:37 2013
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.chain2.testutils;
+
+
+import org.apache.commons.chain2.Chain;
+import org.apache.commons.chain2.Command;
+import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
+
+
+/**
+ * Implementation of {@link Command} that always returns null if it's executed.
+ * 
+ * @version $Id $
+ */
+public class NullReturningCommand extends DelegatingCommand {
+
+
+    // ------------------------------------------------------------ Constructor
+
+
+    public NullReturningCommand() {
+        this("");
+    }
+
+
+    // Construct an instance that will log the specified identifier
+    public NullReturningCommand(String id) {
+        super(id);
+    }
+
+
+    // -------------------------------------------------------- Command Methods
+    
+    @Override
+    public Processing execute(Context<String, Object> context) {
+        return null;
+    }
+    
+    
+    public Processing execute(Context<String, Object> context, Chain<String, Object, Context<String, Object>> chain) {
+        return null;
+    }
+
+
+}

Propchange: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java (original)
+++ commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -18,14 +18,15 @@
 package org.apache.commons.chain2.testutils;
 
 import static org.apache.commons.chain2.testutils.HasLog.hasLog;
-import static org.hamcrest.Matchers.is;
 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
 import static org.hamcrest.collection.IsMapContaining.hasKey;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertEquals;
 
 import java.util.UUID;
 
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -68,6 +69,6 @@ public class NonDelegatingCommandTestCas
     }
 
     private void execute() {
-        assertThat(command.execute(context), is(true));
+        assertEquals(Processing.FINISHED, command.execute(context));
     }
 }

Modified: commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.web;
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 import java.util.Locale;
 
@@ -68,12 +69,12 @@ public abstract class AbstractGetLocaleC
      *
      * @param context The {@link Context} we are operating on
      *
-     * @return <code>false</code> so that processng will continue
+     * @return {@link Processing#CONTINUE} so that the processing will continue.
      * @throws org.apache.commons.chain2.ChainException If an error occurs during execution.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         context.put(getLocaleKey(), getLocale(context));
-        return (false);
+        return Processing.CONTINUE;
     }
 
     // ------------------------------------------------------- Protected Methods

Modified: commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java (original)
+++ commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java Wed Jul  3 20:45:37 2013
@@ -18,6 +18,7 @@ package org.apache.commons.chain2.web;
 
 import org.apache.commons.chain2.Command;
 import org.apache.commons.chain2.Context;
+import org.apache.commons.chain2.Processing;
 
 import java.util.Locale;
 
@@ -69,12 +70,12 @@ public abstract class AbstractSetLocaleC
      *
      * @param context The {@link Context} we are operating on
      *
-     * @return <code>false</code> so that processing will continue
+     * @return {@link Processing#CONTINUE} so that the processing will continue.
      * @throws org.apache.commons.chain2.ChainException If an error occurs during execution.
      */
-    public boolean execute(C context) {
+    public Processing execute(C context) {
         setLocale(context, (Locale) context.get(getLocaleKey()));
-        return (false);
+        return Processing.CONTINUE;
     }
 
     // ------------------------------------------------------- Protected Methods

Modified: commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java (original)
+++ commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.chain2.web.portlet;
 
+import org.apache.commons.chain2.Processing;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -125,8 +126,8 @@ public class PortletGetLocaleCommandTest
         assertNotNull(localeKey);
         Object value = context.get(localeKey);
         assertNull(value);
-        boolean result = command.execute(context);
-        assertFalse(result);
+        Processing result = command.execute(context);
+        assertEquals(Processing.CONTINUE, result);
         value = context.get(localeKey);
         assertNotNull(value);
         assertTrue(value instanceof Locale);

Modified: commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java (original)
+++ commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.chain2.web.servlet;
 
+import org.apache.commons.chain2.Processing;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -128,8 +129,8 @@ public class ServletGetLocaleCommandTest
     assertNotNull(localeKey);
     Object value = context.get(localeKey);
     assertNull(value);
-    boolean result = command.execute(context);
-    assertFalse(result);
+    Processing result = command.execute(context);
+    assertEquals(Processing.CONTINUE, result);
     value = context.get(localeKey);
     assertNotNull(value);
     assertTrue(value instanceof Locale);

Modified: commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
==============================================================================
--- commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java (original)
+++ commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java Wed Jul  3 20:45:37 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.chain2.web.servlet;
 
+import org.apache.commons.chain2.Processing;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -130,8 +131,8 @@ public class ServletSetLocaleCommandTest
         context.put(localeKey, locale);
         assertNotNull(context.get(localeKey));
         assertNull(response.getLocale());
-        boolean result = command.execute(context);
-        assertFalse(result);
+        Processing result = command.execute(context);
+        assertEquals(Processing.CONTINUE, result);
         assertNotNull(response.getLocale());
         assertEquals(locale, response.getLocale());
     }



Re: svn commit: r1499551 - in /commons/proper/chain/trunk: api/src/main/java/org/apache/commons/chain2/ apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/ apps/cookbook-examples/src/main/java/org/apache/commons/chain2/coo...

Posted by Benedikt Ritter <br...@apache.org>.
2013/7/4 Simone Tripodi <si...@apache.org>

> nice! thanks for reviewing! :)
>

There is still work to do for CHAIN-98 [1]. Would be nice if you could
share your thoughts in JIRA :)

TIA!
Benedikt

[1] https://issues.apache.org/jira/browse/CHAIN-98


>
> http://people.apache.org/~simonetripodi/
> http://twitter.com/simonetripodi
>
>
> On Wed, Jul 3, 2013 at 10:45 PM,  <br...@apache.org> wrote:
> > Author: britter
> > Date: Wed Jul  3 20:45:37 2013
> > New Revision: 1499551
> >
> > URL: http://svn.apache.org/r1499551
> > Log:
> > CHAIN-98 - Refactor command interface and base Implementations to
> enumeration to represent states. Patch provided by Jonas Sprenger
> >
> > Added:
> >
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
>   (with props)
> >
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
>   (with props)
> > Modified:
> >
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
> >
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
> >
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
> >
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
> >
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
> >
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
> >
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
> >
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
> >
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
> >
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
> >
> commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
> >
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> >
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> >
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> >
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> >
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
> >
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
> >
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
> >
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
> >
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
> >
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
> >
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
> >
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
> >
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
> >
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
> >
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
> >
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
> >
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
> >
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
> >
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
> >
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
> >
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
> >
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
> >
> commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
> >
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
> >
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
> >
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
> >
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
> >
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java
> >
> > Modified:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
> (original)
> > +++
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
> Wed Jul  3 20:45:37 2013
> > @@ -22,7 +22,7 @@ import java.util.Map;
> >   * <p>A {@link Chain} represents a configured list of
> >   * {@link Command}s that will be executed in order to perform processing
> >   * on a specified {@link Context}.  Each included {@link Command} will
> be
> > - * executed in turn, until either one of them returns <code>true</code>,
> > + * executed in turn, until either one of them returns
> <code>FINISHED</code>,
> >   * one of the executed {@link Command}s throws an exception,
> >   * or the end of the chain has been reached.  The {@link Chain} itself
> will
> >   * return the return value of the last {@link Command} that was executed
> > @@ -78,12 +78,12 @@ public interface Chain<K, V, C extends M
> >       * to the following algorithm.</p>
> >       * <ul>
> >       * <li>If there are no configured {@link Command}s in the {@link
> Chain},
> > -     *     return <code>false</code>.</li>
> > +     *     return <code>CONTINUE</code>.</li>
> >       * <li>Call the <code>execute()</code> method of each {@link
> Command}
> >       *     configured on this chain, in the order they were added via
> calls
> >       *     to the <code>addCommand()</code> method, until the end of the
> >       *     configured {@link Command}s is encountered, or until one of
> > -     *     the executed {@link Command}s returns <code>true</code>
> > +     *     the executed {@link Command}s returns <code>FINISHED</code>
> >       *     or throws an exception.</li>
> >       * <li>Walk backwards through the {@link Command}s whose
> >       *     <code>execute()</code> methods, starting with the last one
> that
> > @@ -94,10 +94,10 @@ public interface Chain<K, V, C extends M
> >       *     was called threw an exception, rethrow that exception.</li>
> >       * <li>Otherwise, return the value returned by the
> <code>execute()</code>
> >       *     method of the last {@link Command} that was executed.  This
> will be
> > -     *     <code>true</code> if the last {@link Command} indicated that
> > +     *     <code>FINISHED</code> if the last {@link Command} indicated
> that
> >       *     processing of this {@link Context} has been completed, or
> > -     *     <code>false</code> if none of the called {@link Command}s
> > -     *     returned <code>true</code>.</li>
> > +     *     <code>CONTINUE</code> if none of the called {@link Command}s
> > +     *     returned <code>FINISHED</code>.</li>
> >       * </ul>
> >       *
> >       * @param context The {@link Context} to be processed by this
> > @@ -106,11 +106,11 @@ public interface Chain<K, V, C extends M
> >       * @exception IllegalArgumentException if <code>context</code>
> >       *  is <code>null</code>
> >       *
> > -     * @return <code>true</code> if the processing of this {@link
> Context}
> > -     *  has been completed, or <code>false</code> if the processing
> > -     *  of this {@link Context} should be delegated to a subsequent
> > -     *  {@link Command} in an enclosing {@link Chain}
> > +     * @return {@link Processing#FINISHED} if the processing of this
> context
> > +     *  has been completed. Returns {@link Processing#CONTINUE} if the
> processing
> > +     *  of this context should be delegated to a subsequent command in
> an
> > +     *  enclosing chain.
> >       */
> > -    boolean execute(C context);
> > +    Processing execute(C context);
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
> (original)
> > +++
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,8 @@ package org.apache.commons.chain2;
> >
> >  import java.util.Map;
> >
> > +import org.apache.commons.chain2.Processing;
> > +
> >  /**
> >   * Builder that allows continue adding a command in the target chain
> and execute it.
> >   *
> > @@ -33,10 +35,13 @@ public interface ChainExecutor<K, V, C e
> >       * Execute the processing represented by the target chain.
> >       *
> >       * @param context the context processed by the target chain
> > -     * @return true, if the processing of the target chain has been
> completed,
> > -     *         false otherwise
> > +     * @return {@link Processing#FINISHED} if the processing of this
> context
> > +     *  has been completed. Returns {@link Processing#CONTINUE} if the
> processing
> > +     *  of this context should be delegated to a subsequent command in
> an
> > +     *  enclosing chain.
> > +     *
> >       * @see Chain#execute(Map)
> >       */
> > -    boolean execute(C context);
> > +    Processing execute(C context);
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
> (original)
> > +++
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
> Wed Jul  3 20:45:37 2013
> > @@ -91,7 +91,7 @@ public final class Chains {
> >              return this;
> >          }
> >
> > -        public boolean execute(C context) {
> > +        public Processing execute(C context) {
> >              return chain.execute(checkNotNullArgument(context, "Chain
> cannot be applied to a null context."));
> >          }
> >
> >
> > Modified:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
> (original)
> > +++
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,8 @@ package org.apache.commons.chain2;
> >
> >  import java.util.Map;
> >
> > +import org.apache.commons.chain2.Processing;
> > +
> >  /**
> >   * <p>A {@link Command} encapsulates a unit of processing work to be
> >   * performed, whose purpose is to examine and/or modify the state of a
> > @@ -83,29 +85,11 @@ import java.util.Map;
> >  public interface Command<K, V, C extends Map<K, V>> {
> >
> >      /**
> > -     * <p>Commands should return <code>CONTINUE_PROCESSING</code> if
> the processing
> > -     *  of the given {@link Context} should be delegated to a subsequent
> > -     *  {@link Command} in an enclosing {@link Chain}.</p>
> > -     *
> > -     * @since Chain 1.1
> > -     */
> > -    public static final boolean CONTINUE_PROCESSING = false;
> > -
> > -    /**
> > -     * <p>Commands should return <code>PROCESSING_COMPLETE</code>
> > -     * if the processing of the given {@link Context}
> > -     *  has been completed.</p>
> > -     *
> > -     * @since Chain 1.1
> > -     */
> > -    public static final boolean PROCESSING_COMPLETE = true;
> > -
> > -    /**
> > -     * <p>Execute a unit of processing work to be performed.  This
> > -     * {@link Command} may either complete the required processing
> > -     * and return <code>true</code>, or delegate remaining processing
> > -     * to the next {@link Command} in a {@link Chain} containing this
> > -     * {@link Command} by returning <code>false</code>
> > +     * Execute a unit of processing work to be performed.
> > +     * <p>
> > +     * A command may either complete the required processing and return
> > +     * finished, or delegate remaining processing to the subsequent
> command
> > +     * in the enclosing {@link Chain} by returning continue.
> >       *
> >       * @param context The {@link Context} to be processed by this
> >       *  {@link Command}
> > @@ -115,11 +99,11 @@ public interface Command<K, V, C extends
> >       * @exception IllegalArgumentException if <code>context</code>
> >       *  is <code>null</code>
> >       *
> > -     * @return <code>true</code> if the processing of this {@link
> Context}
> > -     *  has been completed, or <code>false</code> if the processing
> > -     *  of this {@link Context} should be delegated to a subsequent
> > -     *  {@link Command} in an enclosing {@link Chain}
> > +     * @return {@link Processing#FINISHED} if the processing of this
> contex
> > +     *  has been completed. Returns {@link Processing#CONTINUE} if the
> processing
> > +     *  of this context should be delegated to a subsequent command in
> an
> > +     *  enclosing chain.
> >       */
> > -    boolean execute(C context);
> > +    Processing execute(C context);
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
> (original)
> > +++
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
> Wed Jul  3 20:45:37 2013
> > @@ -34,7 +34,7 @@ import java.util.Map;
> >   * {@link Command}, is where potentially expensive resources must be
> acquired
> >   * and held until the processing of a particular request has been
> completed,
> >   * even if execution is delegated to a subsequent {@link Command} via
> the
> > - * <code>execute()</code> returning <code>false</code>.  A {@link
> Filter}
> > + * <code>execute()</code> returning <code>CONTINUE</code>.  A {@link
> Filter}
> >   * can reliably release such resources in the <code>postprocess()</code>
> >   * method, which is guaranteed to be called by the owning {@link
> Chain}.</p>
> >   *
> > @@ -61,8 +61,8 @@ public interface Filter<K, V, C extends
> >       *  is <code>null</code>
> >       *
> >       * @return If a non-null <code>exception</code> was "handled" by
> this
> > -     *  method (and therefore need not be rethrown), return
> <code>true</code>;
> > -     *  otherwise return <code>false</code>
> > +     *  method (and therefore need not be rethrown), return
> <code>FINISHED</code>;
> > +     *  otherwise return <code>CONTINUE</code>
> >       */
> >     boolean postprocess(C context, Exception exception);
> >
> >
> > Added:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java?rev=1499551&view=auto
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> (added)
> > +++
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> Wed Jul  3 20:45:37 2013
> > @@ -0,0 +1,48 @@
> > +/*
> > + * Licensed to the Apache Software Foundation (ASF) under one or more
> > + * contributor license agreements.  See the NOTICE file distributed with
> > + * this work for additional information regarding copyright ownership.
> > + * The ASF licenses this file to You under the Apache License, Version
> 2.0
> > + * (the "License"); you may not use this file except in compliance with
> > + * the License.  You may obtain a copy of the License at
> > + *
> > + *     http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.commons.chain2;
> > +
> > +/**
> > + * A <code>Processing</code> encapsulates states that can be returned by
> > + * commands.
> > + * <p>
> > + * {@link Command}s should either return <code>FINISHED</code> if the
> > + * processing of the given context has been completed, or return
> > + * <code>CONTINUE</code> if the processing of the given {@link Context}
> should
> > + * be delegated to a subsequent command in an enclosing {@link Chain}.
> > + *
> > + * @version $Id $
> > + */
> > +public enum Processing {
> > +
> > +    /**
> > +     * Commands should return continue if the processing of the given
> > +     * context should be delegated to a subsequent command in an
> enclosing chain.
> > +     *
> > +     * @since Chain 2.0
> > +     */
> > +    CONTINUE,
> > +
> > +    /**
> > +     * Commands should return finished if the processing of the given
> context
> > +     * has been completed.
> > +     *
> > +     * @since Chain 2.0
> > +     */
> > +    FINISHED;
> > +
> > +}
> >
> > Propchange:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> >
> ------------------------------------------------------------------------------
> >     svn:eol-style = native
> >
> > Propchange:
> commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> >
> ------------------------------------------------------------------------------
> >     svn:keywords = Date Author Id Revision HeadURL
> >
> > Modified:
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -17,6 +17,7 @@
> >  package org.apache.commons.chain2.cookbook.agility.impl;
> >
> >  import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.cookbook.agility.ProcessException;
> >  import org.apache.commons.chain2.cookbook.agility.Request;
> >  import org.apache.commons.chain2.cookbook.agility.RequestHandler;
> > @@ -48,10 +49,10 @@ public class HandlerCommand implements C
> >          }
> >      }
> >
> > -    public boolean execute(RequestContext requestContext) {
> > +    public Processing execute(RequestContext requestContext) {
> >          handle(requestContext);
> >
> > -        return CONTINUE_PROCESSING;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
> Wed Jul  3 20:45:37 2013
> > @@ -17,6 +17,7 @@
> >  package org.apache.commons.chain2.cookbook.mailreader.commands;
> >
> >  import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.cookbook.mailreader.MailReader;
> >
> >  import java.io.IOException;
> > @@ -30,7 +31,7 @@ public class LocaleChange implements Com
> >      public LocaleChange() {
> >      }
> >
> > -    public boolean execute(MailReader mailReader) {
> > +    public Processing execute(MailReader mailReader) {
> >          try {
> >              Writer logger = mailReader.getLogger();
> >              logger.write("LocaleChange.execute ");
> > @@ -39,7 +40,7 @@ public class LocaleChange implements Com
> >              throw new RuntimeException(ioe);
> >          }
> >
> > -        return CONTINUE_PROCESSING;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
> Wed Jul  3 20:45:37 2013
> > @@ -17,6 +17,7 @@
> >  package org.apache.commons.chain2.cookbook.mailreader.commands;
> >
> >  import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.cookbook.mailreader.MailReader;
> >
> >  import java.io.IOException;
> > @@ -29,14 +30,14 @@ public class LogonUser implements Comman
> >      public LogonUser() {
> >      }
> >
> > -    public boolean execute(MailReader mailReader) {
> > +    public Processing execute(MailReader mailReader) {
> >          try {
> >              mailReader.getLogger().write("LogonUser.execute");
> >          } catch (IOException ioe) {
> >              throw new RuntimeException(ioe);
> >          }
> >
> > -        return CONTINUE_PROCESSING;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
> Wed Jul  3 20:45:37 2013
> > @@ -17,6 +17,7 @@
> >  package org.apache.commons.chain2.cookbook.mailreader.commands;
> >
> >  import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.cookbook.mailreader.MailReader;
> >
> >  import java.io.IOException;
> > @@ -29,14 +30,14 @@ public class ProfileCheck implements Com
> >      public ProfileCheck() {
> >      }
> >
> > -    public boolean execute(MailReader mailReader) {
> > +    public Processing execute(MailReader mailReader) {
> >          try {
> >              mailReader.getLogger().write("ProfileCheck.execute\n");
> >          } catch (IOException ioe) {
> >              throw new RuntimeException(ioe);
> >          }
> >
> > -        return CONTINUE_PROCESSING;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
> Wed Jul  3 20:45:37 2013
> > @@ -17,6 +17,7 @@
> >  package org.apache.commons.chain2.cookbook.profile;
> >
> >  import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Processing;
> >
> >  /**
> >   * @version $Id$
> > @@ -25,13 +26,13 @@ public class ProfileCheck implements Com
> >
> >      public Profile newProfile(ProfileContext context) { return new
> Profile(); }
> >
> > -    public boolean execute(ProfileContext context) {
> > +    public Processing execute(ProfileContext context) {
> >          Profile profile = context.getProfile();
> >
> >          if (null == profile) {
> >              context.setProfile(newProfile(context));
> >          }
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.cookbo
> >
> >  import org.apache.commons.chain2.Catalog;
> >  import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Processing;
> >  import org.junit.Before;
> >  import org.junit.Test;
> >  import org.mockito.Mock;
> > @@ -28,6 +29,7 @@ import javax.servlet.http.HttpServletReq
> >  import javax.servlet.http.HttpSession;
> >  import java.util.Locale;
> >
> > +import static org.junit.Assert.assertEquals;
> >  import static org.junit.Assert.assertTrue;
> >  import static org.mockito.Matchers.anyString;
> >  import static org.mockito.Mockito.verify;
> > @@ -51,8 +53,8 @@ public class CatalogTest {
> >          when(request.getSession()).thenReturn(session);
> >      }
> >
> > -    private boolean executeCatalogCommand(MailReader context,
> > -            String name, HttpServletRequest request) {
> > +    private Processing executeCatalogCommand(MailReader context,
> > +                                             String name,
> HttpServletRequest request) {
> >
> >          ServletContext servletContext =
> >                  request.getSession().getServletContext();
> > @@ -73,9 +75,9 @@ public class CatalogTest {
> >          MailReader context = new MailReader();
> >          context.setLocale(Locale.CANADA);
> >
> > -        when(testCommand.execute(context)).thenReturn(true);
> > +
>  when(testCommand.execute(context)).thenReturn(Processing.FINISHED);
> >
> > -        assertTrue("Catalog execution did not complete as expected",
> > +        assertEquals("Catalog execution did not complete as expected",
> Processing.FINISHED,
> >                  executeCatalogCommand(context, "aCommand", request));
> >
> >          verify(testCommand).execute(context);
> >
> > Modified:
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.web.WebContext;
> >  import org.apache.commons.logging.Log;
> >  import org.apache.commons.logging.LogFactory;
> > @@ -58,15 +59,15 @@ public class CountCommand implements Com
> >       * <p>Execute the command.</p>
> >       *
> >       * @param context The {@link Context} we are operating on
> > -     * @return <code>false</code> so that processng will continue
> > +     * @return {@link Processing#CONTINUE} so that processing will
> continue.
> >       */
> > -    public boolean execute(WebContext<String, Object> context) {
> > +    public Processing execute(WebContext<String, Object> context) {
> >          count++;
> >          log.info("Executing: " + attribute + "=" + count);
> >
> >          context.getSessionScope().put(attribute, new Integer(count));
> >
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.web.servlet.ServletWebContext;
> >  import org.apache.commons.logging.Log;
> >  import org.apache.commons.logging.LogFactory;
> > @@ -59,9 +60,9 @@ public class ForwardCommand implements C
> >       * <p>Execute the command.</p>
> >       *
> >       * @param context The {@link Context} we are operating on
> > -     * @return <code>false</code> so that processng will continue
> > +     * @return {@link Processing#CONTINUE} so that processing will
> continue.
> >       */
> > -    public boolean execute(ServletWebContext<String, Object> context) {
> > +    public Processing execute(ServletWebContext<String, Object>
> context) {
> >          try {
> >              String uri = getForward(context);
> >              if (uri != null) {
> > @@ -70,12 +71,12 @@ public class ForwardCommand implements C
> >                  }
> >                  RequestDispatcher rd =
> context.getContext().getRequestDispatcher(uri);
> >                  rd.forward(context.getRequest(), context.getResponse());
> > -                return true;
> > +                return Processing.FINISHED;
> >              } else {
> >                  if (log.isDebugEnabled()) {
> >                      log.debug("No forward found");
> >                  }
> > -                return false;
> > +                return Processing.CONTINUE;
> >              }
> >          } catch (ServletException e) {
> >              throw new RuntimeException(e);
> >
> > Modified:
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.web.WebContext;
> >  import org.apache.commons.logging.Log;
> >  import org.apache.commons.logging.LogFactory;
> > @@ -57,16 +58,17 @@ public class CountCommand implements Com
> >      /**
> >       * <p>Execute the command.</p>
> >       *
> > -     * @param context The {@link Context} we are operating on
> > -     * @return <code>false</code> so that processng will continue
> > +     *
> > +     * @param context The {@link org.apache.commons.chain2.Context} we
> are operating on
> > +     * @return {@link Processing#CONTINUE} so that processing will
> continue.
> >       */
> > -    public boolean execute(WebContext<String, Object> context) {
> > +    public Processing execute(WebContext<String, Object> context) {
> >          count++;
> >          log.info("Executing: " + attribute + "=" + count);
> >
> >          context.getSessionScope().put(attribute, new Integer(count));
> >
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.web.servlet.ServletWebContext;
> >  import org.apache.commons.logging.Log;
> >  import org.apache.commons.logging.LogFactory;
> > @@ -57,10 +58,11 @@ public class ForwardCommand implements C
> >      /**
> >       * <p>Execute the command.</p>
> >       *
> > -     * @param context The {@link Context} we are operating on
> > -     * @return <code>false</code> so that processng will continue
> > +     *
> > +     * @param context The {@link org.apache.commons.chain2.Context} we
> are operating on
> > +     * @return {@link Processing#CONTINUE} so that processnig will
> continue.
> >       */
> > -    public boolean execute(ServletWebContext<String, Object> context) {
> > +    public Processing execute(ServletWebContext<String, Object>
> context) {
> >          try {
> >              String uri = getForward(context);
> >              if (uri != null) {
> > @@ -69,12 +71,12 @@ public class ForwardCommand implements C
> >                  }
> >                  RequestDispatcher rd =
> context.getContext().getRequestDispatcher(uri);
> >                  rd.forward(context.getRequest(), context.getResponse());
> > -                return true;
> > +                return Processing.FINISHED;
> >              } else {
> >                  if (log.isDebugEnabled()) {
> >                      log.debug("No forward found");
> >                  }
> > -                return false;
> > +                return Processing.CONTINUE;
> >              }
> >          } catch (IOException e) {
> >              throw new RuntimeException(e);
> >
> > Modified:
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -19,6 +19,7 @@ package org.apache.commons.chain2.base;
> >  import java.util.Map;
> >
> >  import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Processing;
> >
> >  /**
> >   * <p>Copy a specified literal value, or a context attribute stored
> under
> > @@ -78,17 +79,17 @@ public class CopyCommand<K, V, C extends
> >       * <p>Copy a specified literal value, or a context attribute stored
> under
> >       * the <code>fromKey</code> (if any), to the <code>toKey</code>.</p>
> >       *
> > -     * @param context {@link org.apache.commons.chain2.Context Context}
> in which we are operating
> > +     * @param context {@link org.apache.commons.chain2.Context Context}
> in which we are operating.
> >       *
> > -     * @return <code>false</code> so that processing will continue
> > +     * @return {@link Processing#CONTINUE} so that processing will
> continue.
> >       * @throws org.apache.commons.chain2.ChainException in the if an
> error occurs during execution.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          if (containsKeys(context)) {
> >              V value = context.get(getFromKey());
> >              context.put(getToKey(), value);
> >          }
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >      private boolean containsKeys(C context) {
> >
> > Modified:
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.base;
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >  import java.lang.reflect.InvocationTargetException;
> >  import java.lang.reflect.Method;
> > @@ -55,7 +56,7 @@ public abstract class DispatchCommand<K,
> >
> >      /**
> >       * Look up the method specified by either "method" or "methodKey"
> and invoke it,
> > -     * returning a boolean value as interpreted by
> <code>evaluateResult</code>.
> > +     * returning a {@link Processing} value as interpreted by
> <code>evaluateResult</code>.
> >       * @param context The Context to be processed by this Command.
> >       * @return the result of method being dispatched to.
> >       * @throws IllegalStateException if neither 'method' nor
> 'methodKey' properties are defined
> > @@ -64,7 +65,7 @@ public abstract class DispatchCommand<K,
> >       * the exception itself, unless the cause is an <code>Error</code>
> or other <code>Throwable</code>
> >       * which is not an <code>Exception</code>.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          if (this.getMethod() == null && this.getMethodKey() == null) {
> >              throw new IllegalStateException("Neither 'method' nor
> 'methodKey' properties are defined ");
> >          }
> > @@ -120,15 +121,19 @@ public abstract class DispatchCommand<K,
> >      }
> >
> >      /**
> > -     * Evaluate the result of the method invocation as a boolean value.
>  Base implementation
> > -     * expects that the invoked method returns boolean true/false, but
> subclasses might
> > +     * Evaluate the result of the method invocation as a processing
> value. Base implementation
> > +     * expects that the invoked method returns processing, but
> subclasses might
> >       * implement other interpretations.
> > -     * @param o The result of the methid execution
> > +     * @param obj The result of the method execution
> >       * @return The evaluated result/
> >       */
> > -    protected boolean evaluateResult(Object o) {
> > -        Boolean result = (Boolean) o;
> > -        return result != null && result.booleanValue();
> > +    protected Processing evaluateResult(Object obj) {
> > +        if(obj instanceof Processing) {
> > +            Processing result = (Processing) obj;
> > +            return result;
> > +        } else {
> > +            return Processing.CONTINUE;
> > +        }
> >      }
> >
> >      /**
> >
> > Modified:
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -20,6 +20,7 @@ import org.apache.commons.chain2.Catalog
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> >  import org.apache.commons.chain2.Filter;
> > +import org.apache.commons.chain2.Processing;
> >
> >  import java.lang.reflect.InvocationTargetException;
> >  import java.lang.reflect.Method;
> > @@ -133,13 +134,13 @@ public class DispatchLookupCommand<K, V,
> >       *
> >       * @param context The context for this request
> >       * @return the result of executing the looked-up command's method,
> or
> > -     * <code>false</code> if no command is found.
> > +     * {@link Processing#CONTINUE} if no command is found.
> >       *
> >       * @throws DispatchException if no such {@link Command} can be
> found and the
> >       *  <code>optional</code> property is set to <code>false</code>
> >       */
> >      @Override
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          if (this.getMethod() == null && this.getMethodKey() == null) {
> >              throw new IllegalStateException("Neither 'method' nor
> 'methodKey' properties are defined");
> >          }
> > @@ -150,9 +151,13 @@ public class DispatchLookupCommand<K, V,
> >              try {
> >                  Method methodObject = extractMethod(command, context);
> >                  Object obj = methodObject.invoke(command,
> getArguments(context));
> > -
> > -                Boolean result = (Boolean) obj;
> > -                return result != null && result.booleanValue(); //
> might cause NPE (obj could be null)
> > +
> > +                if(obj instanceof Processing) {
> > +                    Processing result = (Processing) obj;
> > +                    return result;
> > +                } else {
> > +                    return Processing.CONTINUE;
> > +                }
> >              } catch (NoSuchMethodException e) {
> >                  throw new DispatchException("Error extracting method
> from context", e, context, this);
> >              } catch (IllegalAccessException e) {
> > @@ -162,7 +167,7 @@ public class DispatchLookupCommand<K, V,
> >                  throw new DispatchException("Error in reflected
> dispatched command", cause, context, this);
> >              }
> >          }
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >      // ------------------------------------------------------ Protected
> Methods
> >
> > Modified:
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -21,6 +21,7 @@ import org.apache.commons.chain2.Catalog
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> >  import org.apache.commons.chain2.Filter;
> > +import org.apache.commons.chain2.Processing;
> >
> >  import java.util.Map;
> >
> > @@ -254,7 +255,7 @@ public class LookupCommand<K, V, C exten
> >       * <p>Look up the specified command, and (if found) execute it.
> >       * Unless <code>ignoreExecuteResult</code> is set to
> <code>true</code>,
> >       * return the result of executing the found command.  If no command
> > -     * is found, return <code>false</code>, unless the
> <code>optional</code>
> > +     * is found, return {@link Processing#CONTINUE}, unless the
> <code>optional</code>
> >       * property is <code>false</code>, in which case an
> <code>IllegalArgumentException</code>
> >       * will be thrown.
> >       * </p>
> > @@ -265,21 +266,21 @@ public class LookupCommand<K, V, C exten
> >       *  can be found and the <code>optional</code> property is set
> >       *  to <code>false</code>
> >       * @return the result of executing the looked-up command, or
> > -     * <code>false</code> if no command is found or if the command
> > +     * <code>CONTINUE</code> if no command is found or if the command
> >       * is found but the <code>ignoreExecuteResult</code> property of
> this
> >       * instance is <code>true</code>
> >       * @throws org.apache.commons.chain2.ChainException if and error
> occurs in the looked-up Command.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          Command<K, V, C> command = getCommand(context);
> >          if (command != null) {
> > -            boolean result = command.execute(context);
> > +            Processing result = command.execute(context);
> >              if (isIgnoreExecuteResult()) {
> > -                return false;
> > +                return Processing.CONTINUE;
> >              }
> >              return result;
> >          }
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >
> >
> > Modified:
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -21,6 +21,7 @@ import java.util.Map;
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >  /**
> >   * <p>Override any context attribute stored under the <code>key</code>
> with <code>value</code>.</p>
> > @@ -79,14 +80,14 @@ public class OverrideCommand<K, V, C ext
> >       *
> >       * @param context {@link org.apache.commons.chain2.Context} in
> which we are operating
> >       *
> > -     * @return <code>false</code> so that processing will continue
> > +     * @return {@link Processing#CONTINUE} so that {@link Processing}
> will continue.
> >       * @throws org.apache.commons.chain2.ChainException if and error
> occurs.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          if (context.containsKey(getKey())) {
> >              context.put(getKey(), getValue());
> >          }
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.base;
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >  /**
> >   * <p>Remove any context attribute stored under the
> <code>fromKey</code>.</p>
> > @@ -59,12 +60,12 @@ public class RemoveCommand<K, V, C exten
> >       *
> >       * @param context {@link Context} in which we are operating
> >       *
> > -     * @return <code>false</code> so that processing will continue
> > +     * @return {@link Processing#CONTINUE} so that processing will
> continue.
> >       * @throws org.apache.commons.chain2.ChainException if and error
> occurs.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          context.remove(getFromKey());
> > -        return false;
> > +        return Processing.CONTINUE;
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
> Wed Jul  3 20:45:37 2013
> > @@ -21,6 +21,7 @@ import org.apache.commons.chain2.Command
> >  import org.apache.commons.chain2.Context;
> >  import org.apache.commons.chain2.Filter;
> >  import org.apache.commons.chain2.ChainException;
> > +import org.apache.commons.chain2.Processing;
> >
> >  import java.util.ArrayList;
> >  import java.util.Collection;
> > @@ -145,12 +146,12 @@ public class ChainBase<K, V, C extends M
> >       * @throws IllegalArgumentException if <code>context</code>
> >       *  is <code>null</code>
> >       *
> > -     * @return <code>true</code> if the processing of this {@link
> Context}
> > -     *  has been completed, or <code>false</code> if the processing
> > -     *  of this {@link Context} should be delegated to a subsequent
> > -     *  {@link Command} in an enclosing {@link Chain}
> > +     * @return {@link Processing#FINISHED} if the processing of this
> contex
> > +     *  has been completed. Returns {@link Processing#CONTINUE} if the
> processing
> > +     *  of this context should be delegated to a subsequent command in
> an
> > +     *  enclosing chain.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          // Verify our parameters
> >          if (context == null) {
> >              throw new IllegalArgumentException("Can't execute a null
> context");
> > @@ -159,9 +160,9 @@ public class ChainBase<K, V, C extends M
> >          // Freeze the configuration of the command list
> >          frozen = true;
> >
> > -        // Execute the commands in this list until one returns true
> > -        // or throws an exception
> > -        boolean saveResult = false;
> > +        // Execute the commands in this list until one returns
> something else
> > +        // than Processing.CONTINUE or throws an exception
> > +        Processing saveResult = Processing.CONTINUE;
> >          Exception saveException = null;
> >          int i = 0;
> >          int n = commands.size();
> > @@ -170,7 +171,11 @@ public class ChainBase<K, V, C extends M
> >              try {
> >                  lastCommand = commands.get(i);
> >                  saveResult = lastCommand.execute(context);
> > -                if (saveResult) {
> > +                if(saveResult == null) {
> > +                    String format = String.format("The command '%s'
> returned an invalid processing value: '%s'",
> > +                            lastCommand.getClass().getName(),
> saveResult);
> > +                    throw new ChainException(format);
> > +                } else if (saveResult != Processing.CONTINUE) {
> >                      break;
> >                  }
> >              } catch (Exception e) {
> >
> > Modified:
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -27,6 +27,7 @@ import java.util.Collections;
> >  import java.util.HashMap;
> >  import java.util.Map;
> >
> > +import org.apache.commons.chain2.Processing;
> >  import org.junit.After;
> >  import org.junit.Before;
> >  import org.junit.Test;
> > @@ -94,8 +95,8 @@ public class CopyCommandTestCase {
> >      }
> >
> >      private void execute() {
> > -        // make sure execute always returns false
> > -        assertFalse(command.execute(context));
> > +        // make sure execute always returns continue
> > +        assertEquals(Processing.CONTINUE, command.execute(context));
> >      }
> >
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -17,6 +17,7 @@
> >  package org.apache.commons.chain2.base;
> >
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.impl.ContextBase;
> >  import org.junit.Test;
> >
> > @@ -32,8 +33,8 @@ public class DispatchCommandTestCase {
> >          test.setMethod("testMethod");
> >          Context<String, Object> context = new ContextBase();
> >          assertNull(context.get("foo"));
> > -        boolean result = test.execute(context);
> > -        assertTrue(result);
> > +        Processing result = test.execute(context);
> > +        assertEquals(Processing.FINISHED, result);
> >          assertNotNull(context.get("foo"));
> >          assertEquals("foo", context.get("foo"));
> >
> > @@ -49,8 +50,8 @@ public class DispatchCommandTestCase {
> >          Context<String, Object> context = new ContextBase();
> >          context.put("foo", "testMethodKey");
> >          assertNull(context.get("bar"));
> > -        boolean result = test.execute(context);
> > -        assertFalse(result);
> > +        Processing result = test.execute(context);
> > +        assertEquals(Processing.CONTINUE, result);
> >          assertNotNull(context.get("bar"));
> >          assertEquals("bar", context.get("bar"));
> >
> > @@ -64,8 +65,8 @@ public class DispatchCommandTestCase {
> >          test.setMethod("foo");
> >          Context<String, Object> context = new ContextBase();
> >          assertNull(context.get("elephant"));
> > -        boolean result = test.execute(context);
> > -        assertTrue(result);
> > +        Processing result = test.execute(context);
> > +        assertEquals(Processing.FINISHED, result);
> >          assertNotNull(context.get("elephant"));
> >          assertEquals("elephant", context.get("elephant"));
> >
> > @@ -76,15 +77,15 @@ public class DispatchCommandTestCase {
> >      class TestCommand extends DispatchCommand<String, Object,
> Context<String, Object>> {
> >
> >
> > -        public boolean testMethod(Context<String, Object> context) {
> > +        public Processing testMethod(Context<String, Object> context) {
> >              context.put("foo", "foo");
> > -            return true;
> > +            return Processing.FINISHED;
> >          }
> >
> > -        public boolean testMethodKey(Context<String, Object> context) {
> > +        public Processing testMethodKey(Context<String, Object>
> context) {
> >
> >              context.put("bar", "bar");
> > -            return false;
> > +            return Processing.CONTINUE;
> >          }
> >
> >      }
> > @@ -106,9 +107,9 @@ public class DispatchCommandTestCase {
> >              return new Object[] { new TestAlternateContext(context) };
> >          }
> >
> > -        public boolean foo(TestAlternateContext context) {
> > +        public Processing foo(TestAlternateContext context) {
> >              context.put("elephant", "elephant");
> > -            return true;
> > +            return Processing.FINISHED;
> >          }
> >
> >      }
> >
> > Modified:
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -17,6 +17,7 @@
> >  package org.apache.commons.chain2.base;
> >
> >  import static org.apache.commons.chain2.testutils.HasLog.hasLog;
> > +import static org.junit.Assert.assertEquals;
> >  import static org.junit.Assert.assertThat;
> >  import static org.junit.Assert.assertTrue;
> >  import static org.junit.Assert.fail;
> > @@ -24,6 +25,7 @@ import static org.junit.Assert.fail;
> >  import org.apache.commons.chain2.Catalog;
> >  import org.apache.commons.chain2.CatalogFactory;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.impl.CatalogBase;
> >  import org.apache.commons.chain2.impl.CatalogFactoryBase;
> >  import org.apache.commons.chain2.impl.ContextBase;
> > @@ -102,8 +104,8 @@ public class DispatchLookupCommandTestCa
> >          command.setMethod("fooMethod");
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                       command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                    Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >
> >              fail("Threw exception: " + e);
> > @@ -113,8 +115,8 @@ public class DispatchLookupCommandTestCa
> >          command.setMethod("barMethod");
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                       command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                    Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -160,8 +162,8 @@ public class DispatchLookupCommandTestCa
> >          context.put("methodKey", "fooMethod");
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                       command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                    Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -172,8 +174,8 @@ public class DispatchLookupCommandTestCa
> >
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                       command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                    Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -193,14 +195,14 @@ public class DispatchLookupCommandTestCa
> >              super(id);
> >          }
> >
> > -        public boolean fooMethod(C context) {
> > +        public Processing fooMethod(C context) {
> >              log(context, id);
> > -            return true;
> > +            return Processing.FINISHED;
> >          }
> >
> > -        public boolean barMethod(C context) {
> > +        public Processing barMethod(C context) {
> >              log(context, id);
> > -            return true;
> > +            return Processing.FINISHED;
> >          }
> >
> >      }
> >
> > Modified:
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -28,6 +28,7 @@ import org.apache.commons.chain2.Catalog
> >  import org.apache.commons.chain2.CatalogFactory;
> >  import org.apache.commons.chain2.Chain;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.impl.CatalogBase;
> >  import org.apache.commons.chain2.impl.CatalogFactoryBase;
> >  import org.apache.commons.chain2.impl.ChainBase;
> > @@ -104,8 +105,8 @@ public class LookupCommandTestCase {
> >          command.setName("foo");
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                       command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                   Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -127,8 +128,8 @@ public class LookupCommandTestCase {
> >          command.setName("foo");
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                    command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                   Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -146,8 +147,8 @@ public class LookupCommandTestCase {
> >          context.put("nameKey", "foo");
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                    command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -170,8 +171,8 @@ public class LookupCommandTestCase {
> >          context.put("nameKey", "foo");
> >
> >          try {
> > -            assertTrue("Command should return true",
> > -                       command.execute(context));
> > +            assertEquals("Command should return finished",
> > +                Processing.FINISHED, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -189,8 +190,8 @@ public class LookupCommandTestCase {
> >          command.setName("foo");
> >
> >          try {
> > -            assertFalse("Command should return false",
> > -                       command.execute(context));
> > +            assertEquals("Command should return continue",
> > +                Processing.CONTINUE, command.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> >
> > Modified:
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -28,8 +28,10 @@ import java.util.Collection;
> >  import java.util.List;
> >
> >  import org.apache.commons.chain2.Chain;
> > +import org.apache.commons.chain2.ChainException;
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.testutils.AddingCommand;
> >  import org.apache.commons.chain2.testutils.DelegatingCommand;
> >  import org.apache.commons.chain2.testutils.DelegatingFilter;
> > @@ -37,6 +39,7 @@ import org.apache.commons.chain2.testuti
> >  import org.apache.commons.chain2.testutils.ExceptionFilter;
> >  import org.apache.commons.chain2.testutils.NonDelegatingCommand;
> >  import org.apache.commons.chain2.testutils.NonDelegatingFilter;
> > +import org.apache.commons.chain2.testutils.NullReturningCommand;
> >  import org.junit.After;
> >  import org.junit.Before;
> >  import org.junit.Test;
> > @@ -91,6 +94,15 @@ public class ChainBaseTestCase {
> >      // ------------------------------------------------ Individual Test
> Methods
> >
> >
> > +    @Test (expected = ChainException.class)
> > +    public void nullReturningCommandForcesException() {
> > +        chain.addCommand(new
> DelegatingCommand("BeforeNullReturningCommand"));
> > +        chain.addCommand(new NullReturningCommand());
> > +        chain.addCommand(new
> NonDelegatingCommand("AfterNullReturningCommand"));
> > +
> > +        chain.execute(context);
> > +    }
> > +
> >      // Test the ability to add commands
> >      @Test
> >      public void testCommands() {
> > @@ -117,8 +129,7 @@ public class ChainBaseTestCase {
> >      public void testExecute1a() {
> >          chain.addCommand(new NonDelegatingCommand("1"));
> >          try {
> > -            assertTrue("Chain returned true",
> > -                       chain.execute(context));
> > +            assertEquals(Processing.FINISHED, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -131,8 +142,7 @@ public class ChainBaseTestCase {
> >      public void testExecute1b() {
> >          chain.addCommand(new DelegatingCommand("1"));
> >          try {
> > -            assertTrue("Chain returned false",
> > -                       !chain.execute(context));
> > +            assertEquals(Processing.CONTINUE, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -177,8 +187,7 @@ public class ChainBaseTestCase {
> >          chain.addCommand(new DelegatingCommand("2"));
> >          chain.addCommand(new NonDelegatingCommand("3"));
> >          try {
> > -            assertTrue("Chain returned true",
> > -                       chain.execute(context));
> > +            assertEquals(Processing.FINISHED, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -193,8 +202,7 @@ public class ChainBaseTestCase {
> >          chain.addCommand(new DelegatingCommand("2"));
> >          chain.addCommand(new DelegatingCommand("3"));
> >          try {
> > -            assertTrue("Chain returned false",
> > -                       !chain.execute(context));
> > +            assertEquals(Processing.CONTINUE, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -241,8 +249,7 @@ public class ChainBaseTestCase {
> >      public void testExecute3a() {
> >          chain.addCommand(new NonDelegatingFilter("1", "a"));
> >          try {
> > -            assertTrue("Chain returned true",
> > -                       chain.execute(context));
> > +            assertEquals(Processing.FINISHED, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -255,8 +262,7 @@ public class ChainBaseTestCase {
> >      public void testExecute3b() {
> >          chain.addCommand(new DelegatingFilter("1", "a"));
> >          try {
> > -            assertTrue("Chain returned false",
> > -                       !chain.execute(context));
> > +            assertEquals(Processing.CONTINUE, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -286,8 +292,7 @@ public class ChainBaseTestCase {
> >          chain.addCommand(new DelegatingCommand("2"));
> >          chain.addCommand(new NonDelegatingFilter("3", "c"));
> >          try {
> > -            assertTrue("Chain returned true",
> > -                       chain.execute(context));
> > +            assertEquals(Processing.FINISHED, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> > @@ -302,8 +307,7 @@ public class ChainBaseTestCase {
> >          chain.addCommand(new DelegatingFilter("2", "b"));
> >          chain.addCommand(new DelegatingCommand("3"));
> >          try {
> > -            assertTrue("Chain returned false",
> > -                       !chain.execute(context));
> > +            assertEquals(Processing.CONTINUE, chain.execute(context));
> >          } catch (Exception e) {
> >              fail("Threw exception: " + e);
> >          }
> >
> > Modified:
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -19,6 +19,7 @@ package org.apache.commons.chain2.config
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >
> >  /**
> > @@ -47,8 +48,8 @@ public class TestCommand implements Comm
> >      }
> >
> >
> > -    public boolean execute(Context<String, Object> context) {
> > -    return (false);
> > +    public Processing execute(Context<String, Object> context) {
> > +        return Processing.CONTINUE;
> >      }
> >
> >
> >
> > Modified:
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -33,6 +33,7 @@ import java.util.List;
> >  import org.apache.commons.chain2.Catalog;
> >  import org.apache.commons.chain2.CatalogFactory;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.apache.commons.chain2.testutils.AddingCommand;
> >  import org.apache.commons.chain2.impl.CatalogBase;
> >  import org.apache.commons.chain2.impl.ChainBase;
> > @@ -160,8 +161,7 @@ public class XmlConfigParserTestCase {
> >      @Test
> >      public void testExecute2a() throws Exception {
> >
> > -        assertTrue("Chain returned true",
> > -                catalog.getCommand("Execute2a").execute(context));
> > +        assertEquals(Processing.FINISHED,
> catalog.getCommand("Execute2a").execute(context));
> >          assertThat(context, hasLog("1/2/3"));
> >
> >      }
> > @@ -171,8 +171,7 @@ public class XmlConfigParserTestCase {
> >      @Test
> >      public void testExecute2b() throws Exception {
> >
> > -        assertFalse("Chain returned false",
> > -                catalog.getCommand("Execute2b").execute(context));
> > +        assertEquals(Processing.CONTINUE,
> catalog.getCommand("Execute2b").execute(context));
> >          assertThat(context, hasLog("1/2/3"));
> >
> >      }
> > @@ -212,8 +211,7 @@ public class XmlConfigParserTestCase {
> >      @Test
> >      public void testExecute4a() throws Exception {
> >
> > -        assertTrue("Chain returned true",
> > -                catalog.getCommand("Execute4a").execute(context));
> > +        assertEquals(Processing.FINISHED,
> catalog.getCommand("Execute4a").execute(context));
> >          assertThat(context, hasLog("1/2/3/c/a"));
> >
> >      }
> > @@ -223,8 +221,7 @@ public class XmlConfigParserTestCase {
> >      @Test
> >      public void testExecute4b() throws Exception {
> >
> > -        assertFalse("Chain returned false",
> > -                catalog.getCommand("Execute4b").execute(context));
> > +        assertEquals(Processing.CONTINUE,
> catalog.getCommand("Execute4b").execute(context));
> >          assertThat(context, hasLog("1/2/3/b"));
> >
> >      }
> >
> > Modified:
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >
> >  /**
> > @@ -50,10 +51,10 @@ public class DelegatingCommand extends N
> >
> >      // Execution method for this Command
> >      @Override
> > -    public boolean execute(Context<String, Object> context) {
> > +    public Processing execute(Context<String, Object> context) {
> >
> >          super.execute(context);
> > -        return (false);
> > +        return Processing.CONTINUE;
> >
> >      }
> >
> >
> > Modified:
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
> (original)
> > +++
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
> Wed Jul  3 20:45:37 2013
> > @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
> >
> >  import org.apache.commons.chain2.Context;
> >  import org.apache.commons.chain2.Filter;
> > +import org.apache.commons.chain2.Processing;
> >
> >
> >  /**
> > @@ -50,10 +51,10 @@ public class DelegatingFilter extends No
> >
> >      // Execution method for this Command
> >      @Override
> > -    public boolean execute(Context<String, Object> context) {
> > +    public Processing execute(Context<String, Object> context) {
> >
> >          super.execute(context);
> > -        return (false);
> > +        return Processing.CONTINUE;
> >
> >      }
> >
> >
> > Modified:
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >
> >  /**
> > @@ -64,13 +65,13 @@ public class NonDelegatingCommand implem
> >
> >
> >      // Execution method for this Command
> > -    public boolean execute(Context<String, Object> context) {
> > +    public Processing execute(Context<String, Object> context) {
> >
> >          if (context == null) {
> >              throw new IllegalArgumentException();
> >          }
> >          log(context, id);
> > -        return (true);
> > +        return Processing.FINISHED;
> >
> >      }
> >
> >
> > Modified:
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
> (original)
> > +++
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
> Wed Jul  3 20:45:37 2013
> > @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
> >
> >  import org.apache.commons.chain2.Context;
> >  import org.apache.commons.chain2.Filter;
> > +import org.apache.commons.chain2.Processing;
> >
> >
> >  /**
> > @@ -64,10 +65,10 @@ public class NonDelegatingFilter
> >
> >      // Execution method for this Command
> >      @Override
> > -    public boolean execute(Context<String, Object> context) {
> > +    public Processing execute(Context<String, Object> context) {
> >
> >          super.execute(context);
> > -        return (true);
> > +        return Processing.FINISHED;
> >
> >      }
> >
> >
> > Added:
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java?rev=1499551&view=auto
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> (added)
> > +++
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -0,0 +1,61 @@
> > +/*
> > + * Licensed to the Apache Software Foundation (ASF) under one or more
> > + * contributor license agreements.  See the NOTICE file distributed with
> > + * this work for additional information regarding copyright ownership.
> > + * The ASF licenses this file to You under the Apache License, Version
> 2.0
> > + * (the "License"); you may not use this file except in compliance with
> > + * the License.  You may obtain a copy of the License at
> > + *
> > + *     http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.commons.chain2.testutils;
> > +
> > +
> > +import org.apache.commons.chain2.Chain;
> > +import org.apache.commons.chain2.Command;
> > +import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> > +
> > +
> > +/**
> > + * Implementation of {@link Command} that always returns null if it's
> executed.
> > + *
> > + * @version $Id $
> > + */
> > +public class NullReturningCommand extends DelegatingCommand {
> > +
> > +
> > +    // ------------------------------------------------------------
> Constructor
> > +
> > +
> > +    public NullReturningCommand() {
> > +        this("");
> > +    }
> > +
> > +
> > +    // Construct an instance that will log the specified identifier
> > +    public NullReturningCommand(String id) {
> > +        super(id);
> > +    }
> > +
> > +
> > +    // -------------------------------------------------------- Command
> Methods
> > +
> > +    @Override
> > +    public Processing execute(Context<String, Object> context) {
> > +        return null;
> > +    }
> > +
> > +
> > +    public Processing execute(Context<String, Object> context,
> Chain<String, Object, Context<String, Object>> chain) {
> > +        return null;
> > +    }
> > +
> > +
> > +}
> >
> > Propchange:
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> >
> ------------------------------------------------------------------------------
> >     svn:eol-style = native
> >
> > Propchange:
> commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> >
> ------------------------------------------------------------------------------
> >     svn:keywords = Date Author Id Revision HeadURL
> >
> > Modified:
> commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,14 +18,15 @@
> >  package org.apache.commons.chain2.testutils;
> >
> >  import static org.apache.commons.chain2.testutils.HasLog.hasLog;
> > -import static org.hamcrest.Matchers.is;
> >  import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
> >  import static org.hamcrest.collection.IsMapContaining.hasKey;
> >  import static org.junit.Assert.assertThat;
> > +import static org.junit.Assert.assertEquals;
> >
> >  import java.util.UUID;
> >
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >  import org.junit.Before;
> >  import org.junit.Test;
> >
> > @@ -68,6 +69,6 @@ public class NonDelegatingCommandTestCas
> >      }
> >
> >      private void execute() {
> > -        assertThat(command.execute(context), is(true));
> > +        assertEquals(Processing.FINISHED, command.execute(context));
> >      }
> >  }
> >
> > Modified:
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.web;
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >  import java.util.Locale;
> >
> > @@ -68,12 +69,12 @@ public abstract class AbstractGetLocaleC
> >       *
> >       * @param context The {@link Context} we are operating on
> >       *
> > -     * @return <code>false</code> so that processng will continue
> > +     * @return {@link Processing#CONTINUE} so that the processing will
> continue.
> >       * @throws org.apache.commons.chain2.ChainException If an error
> occurs during execution.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          context.put(getLocaleKey(), getLocale(context));
> > -        return (false);
> > +        return Processing.CONTINUE;
> >      }
> >
> >      // -------------------------------------------------------
> Protected Methods
> >
> > Modified:
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
> (original)
> > +++
> commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
> Wed Jul  3 20:45:37 2013
> > @@ -18,6 +18,7 @@ package org.apache.commons.chain2.web;
> >
> >  import org.apache.commons.chain2.Command;
> >  import org.apache.commons.chain2.Context;
> > +import org.apache.commons.chain2.Processing;
> >
> >  import java.util.Locale;
> >
> > @@ -69,12 +70,12 @@ public abstract class AbstractSetLocaleC
> >       *
> >       * @param context The {@link Context} we are operating on
> >       *
> > -     * @return <code>false</code> so that processing will continue
> > +     * @return {@link Processing#CONTINUE} so that the processing will
> continue.
> >       * @throws org.apache.commons.chain2.ChainException If an error
> occurs during execution.
> >       */
> > -    public boolean execute(C context) {
> > +    public Processing execute(C context) {
> >          setLocale(context, (Locale) context.get(getLocaleKey()));
> > -        return (false);
> > +        return Processing.CONTINUE;
> >      }
> >
> >      // -------------------------------------------------------
> Protected Methods
> >
> > Modified:
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -16,6 +16,7 @@
> >   */
> >  package org.apache.commons.chain2.web.portlet;
> >
> > +import org.apache.commons.chain2.Processing;
> >  import org.junit.After;
> >  import org.junit.Before;
> >  import org.junit.Test;
> > @@ -125,8 +126,8 @@ public class PortletGetLocaleCommandTest
> >          assertNotNull(localeKey);
> >          Object value = context.get(localeKey);
> >          assertNull(value);
> > -        boolean result = command.execute(context);
> > -        assertFalse(result);
> > +        Processing result = command.execute(context);
> > +        assertEquals(Processing.CONTINUE, result);
> >          value = context.get(localeKey);
> >          assertNotNull(value);
> >          assertTrue(value instanceof Locale);
> >
> > Modified:
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -16,6 +16,7 @@
> >   */
> >  package org.apache.commons.chain2.web.servlet;
> >
> > +import org.apache.commons.chain2.Processing;
> >  import org.junit.After;
> >  import org.junit.Before;
> >  import org.junit.Test;
> > @@ -128,8 +129,8 @@ public class ServletGetLocaleCommandTest
> >      assertNotNull(localeKey);
> >      Object value = context.get(localeKey);
> >      assertNull(value);
> > -    boolean result = command.execute(context);
> > -    assertFalse(result);
> > +    Processing result = command.execute(context);
> > +    assertEquals(Processing.CONTINUE, result);
> >      value = context.get(localeKey);
> >      assertNotNull(value);
> >      assertTrue(value instanceof Locale);
> >
> > Modified:
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java
> > URL:
> http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> >
> ==============================================================================
> > ---
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java
> (original)
> > +++
> commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java
> Wed Jul  3 20:45:37 2013
> > @@ -16,6 +16,7 @@
> >   */
> >  package org.apache.commons.chain2.web.servlet;
> >
> > +import org.apache.commons.chain2.Processing;
> >  import org.junit.After;
> >  import org.junit.Before;
> >  import org.junit.Test;
> > @@ -130,8 +131,8 @@ public class ServletSetLocaleCommandTest
> >          context.put(localeKey, locale);
> >          assertNotNull(context.get(localeKey));
> >          assertNull(response.getLocale());
> > -        boolean result = command.execute(context);
> > -        assertFalse(result);
> > +        Processing result = command.execute(context);
> > +        assertEquals(Processing.CONTINUE, result);
> >          assertNotNull(response.getLocale());
> >          assertEquals(locale, response.getLocale());
> >      }
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
> For additional commands, e-mail: dev-help@commons.apache.org
>
>


-- 
http://people.apache.org/~britter/
http://www.systemoutprintln.de/
http://twitter.com/BenediktRitter
http://github.com/britter

Re: svn commit: r1499551 - in /commons/proper/chain/trunk: api/src/main/java/org/apache/commons/chain2/ apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/ apps/cookbook-examples/src/main/java/org/apache/commons/chain2/coo...

Posted by Simone Tripodi <si...@apache.org>.
nice! thanks for reviewing! :)

http://people.apache.org/~simonetripodi/
http://twitter.com/simonetripodi


On Wed, Jul 3, 2013 at 10:45 PM,  <br...@apache.org> wrote:
> Author: britter
> Date: Wed Jul  3 20:45:37 2013
> New Revision: 1499551
>
> URL: http://svn.apache.org/r1499551
> Log:
> CHAIN-98 - Refactor command interface and base Implementations to enumeration to represent states. Patch provided by Jonas Sprenger
>
> Added:
>     commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java   (with props)
>     commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java   (with props)
> Modified:
>     commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
>     commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
>     commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
>     commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
>     commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
>     commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
>     commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
>     commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
>     commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
>     commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
>     commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
>     commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
>     commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
>     commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
>     commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
>     commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
>     commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
>     commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
>     commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
>     commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
>     commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
>     commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
>     commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
>     commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
>     commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
>     commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
>     commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
>     commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
>     commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
>     commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
>     commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
>     commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
>     commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
>     commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
>     commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
>     commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
>     commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
>     commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
>     commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java
>
> Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java (original)
> +++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chain.java Wed Jul  3 20:45:37 2013
> @@ -22,7 +22,7 @@ import java.util.Map;
>   * <p>A {@link Chain} represents a configured list of
>   * {@link Command}s that will be executed in order to perform processing
>   * on a specified {@link Context}.  Each included {@link Command} will be
> - * executed in turn, until either one of them returns <code>true</code>,
> + * executed in turn, until either one of them returns <code>FINISHED</code>,
>   * one of the executed {@link Command}s throws an exception,
>   * or the end of the chain has been reached.  The {@link Chain} itself will
>   * return the return value of the last {@link Command} that was executed
> @@ -78,12 +78,12 @@ public interface Chain<K, V, C extends M
>       * to the following algorithm.</p>
>       * <ul>
>       * <li>If there are no configured {@link Command}s in the {@link Chain},
> -     *     return <code>false</code>.</li>
> +     *     return <code>CONTINUE</code>.</li>
>       * <li>Call the <code>execute()</code> method of each {@link Command}
>       *     configured on this chain, in the order they were added via calls
>       *     to the <code>addCommand()</code> method, until the end of the
>       *     configured {@link Command}s is encountered, or until one of
> -     *     the executed {@link Command}s returns <code>true</code>
> +     *     the executed {@link Command}s returns <code>FINISHED</code>
>       *     or throws an exception.</li>
>       * <li>Walk backwards through the {@link Command}s whose
>       *     <code>execute()</code> methods, starting with the last one that
> @@ -94,10 +94,10 @@ public interface Chain<K, V, C extends M
>       *     was called threw an exception, rethrow that exception.</li>
>       * <li>Otherwise, return the value returned by the <code>execute()</code>
>       *     method of the last {@link Command} that was executed.  This will be
> -     *     <code>true</code> if the last {@link Command} indicated that
> +     *     <code>FINISHED</code> if the last {@link Command} indicated that
>       *     processing of this {@link Context} has been completed, or
> -     *     <code>false</code> if none of the called {@link Command}s
> -     *     returned <code>true</code>.</li>
> +     *     <code>CONTINUE</code> if none of the called {@link Command}s
> +     *     returned <code>FINISHED</code>.</li>
>       * </ul>
>       *
>       * @param context The {@link Context} to be processed by this
> @@ -106,11 +106,11 @@ public interface Chain<K, V, C extends M
>       * @exception IllegalArgumentException if <code>context</code>
>       *  is <code>null</code>
>       *
> -     * @return <code>true</code> if the processing of this {@link Context}
> -     *  has been completed, or <code>false</code> if the processing
> -     *  of this {@link Context} should be delegated to a subsequent
> -     *  {@link Command} in an enclosing {@link Chain}
> +     * @return {@link Processing#FINISHED} if the processing of this context
> +     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
> +     *  of this context should be delegated to a subsequent command in an
> +     *  enclosing chain.
>       */
> -    boolean execute(C context);
> +    Processing execute(C context);
>
>  }
>
> Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java (original)
> +++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/ChainExecutor.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,8 @@ package org.apache.commons.chain2;
>
>  import java.util.Map;
>
> +import org.apache.commons.chain2.Processing;
> +
>  /**
>   * Builder that allows continue adding a command in the target chain and execute it.
>   *
> @@ -33,10 +35,13 @@ public interface ChainExecutor<K, V, C e
>       * Execute the processing represented by the target chain.
>       *
>       * @param context the context processed by the target chain
> -     * @return true, if the processing of the target chain has been completed,
> -     *         false otherwise
> +     * @return {@link Processing#FINISHED} if the processing of this context
> +     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
> +     *  of this context should be delegated to a subsequent command in an
> +     *  enclosing chain.
> +     *
>       * @see Chain#execute(Map)
>       */
> -    boolean execute(C context);
> +    Processing execute(C context);
>
>  }
>
> Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java (original)
> +++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Chains.java Wed Jul  3 20:45:37 2013
> @@ -91,7 +91,7 @@ public final class Chains {
>              return this;
>          }
>
> -        public boolean execute(C context) {
> +        public Processing execute(C context) {
>              return chain.execute(checkNotNullArgument(context, "Chain cannot be applied to a null context."));
>          }
>
>
> Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java (original)
> +++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Command.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,8 @@ package org.apache.commons.chain2;
>
>  import java.util.Map;
>
> +import org.apache.commons.chain2.Processing;
> +
>  /**
>   * <p>A {@link Command} encapsulates a unit of processing work to be
>   * performed, whose purpose is to examine and/or modify the state of a
> @@ -83,29 +85,11 @@ import java.util.Map;
>  public interface Command<K, V, C extends Map<K, V>> {
>
>      /**
> -     * <p>Commands should return <code>CONTINUE_PROCESSING</code> if the processing
> -     *  of the given {@link Context} should be delegated to a subsequent
> -     *  {@link Command} in an enclosing {@link Chain}.</p>
> -     *
> -     * @since Chain 1.1
> -     */
> -    public static final boolean CONTINUE_PROCESSING = false;
> -
> -    /**
> -     * <p>Commands should return <code>PROCESSING_COMPLETE</code>
> -     * if the processing of the given {@link Context}
> -     *  has been completed.</p>
> -     *
> -     * @since Chain 1.1
> -     */
> -    public static final boolean PROCESSING_COMPLETE = true;
> -
> -    /**
> -     * <p>Execute a unit of processing work to be performed.  This
> -     * {@link Command} may either complete the required processing
> -     * and return <code>true</code>, or delegate remaining processing
> -     * to the next {@link Command} in a {@link Chain} containing this
> -     * {@link Command} by returning <code>false</code>
> +     * Execute a unit of processing work to be performed.
> +     * <p>
> +     * A command may either complete the required processing and return
> +     * finished, or delegate remaining processing to the subsequent command
> +     * in the enclosing {@link Chain} by returning continue.
>       *
>       * @param context The {@link Context} to be processed by this
>       *  {@link Command}
> @@ -115,11 +99,11 @@ public interface Command<K, V, C extends
>       * @exception IllegalArgumentException if <code>context</code>
>       *  is <code>null</code>
>       *
> -     * @return <code>true</code> if the processing of this {@link Context}
> -     *  has been completed, or <code>false</code> if the processing
> -     *  of this {@link Context} should be delegated to a subsequent
> -     *  {@link Command} in an enclosing {@link Chain}
> +     * @return {@link Processing#FINISHED} if the processing of this contex
> +     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
> +     *  of this context should be delegated to a subsequent command in an
> +     *  enclosing chain.
>       */
> -    boolean execute(C context);
> +    Processing execute(C context);
>
>  }
>
> Modified: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java (original)
> +++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Filter.java Wed Jul  3 20:45:37 2013
> @@ -34,7 +34,7 @@ import java.util.Map;
>   * {@link Command}, is where potentially expensive resources must be acquired
>   * and held until the processing of a particular request has been completed,
>   * even if execution is delegated to a subsequent {@link Command} via the
> - * <code>execute()</code> returning <code>false</code>.  A {@link Filter}
> + * <code>execute()</code> returning <code>CONTINUE</code>.  A {@link Filter}
>   * can reliably release such resources in the <code>postprocess()</code>
>   * method, which is guaranteed to be called by the owning {@link Chain}.</p>
>   *
> @@ -61,8 +61,8 @@ public interface Filter<K, V, C extends
>       *  is <code>null</code>
>       *
>       * @return If a non-null <code>exception</code> was "handled" by this
> -     *  method (and therefore need not be rethrown), return <code>true</code>;
> -     *  otherwise return <code>false</code>
> +     *  method (and therefore need not be rethrown), return <code>FINISHED</code>;
> +     *  otherwise return <code>CONTINUE</code>
>       */
>     boolean postprocess(C context, Exception exception);
>
>
> Added: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java?rev=1499551&view=auto
> ==============================================================================
> --- commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java (added)
> +++ commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java Wed Jul  3 20:45:37 2013
> @@ -0,0 +1,48 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.commons.chain2;
> +
> +/**
> + * A <code>Processing</code> encapsulates states that can be returned by
> + * commands.
> + * <p>
> + * {@link Command}s should either return <code>FINISHED</code> if the
> + * processing of the given context has been completed, or return
> + * <code>CONTINUE</code> if the processing of the given {@link Context} should
> + * be delegated to a subsequent command in an enclosing {@link Chain}.
> + *
> + * @version $Id $
> + */
> +public enum Processing {
> +
> +    /**
> +     * Commands should return continue if the processing of the given
> +     * context should be delegated to a subsequent command in an enclosing chain.
> +     *
> +     * @since Chain 2.0
> +     */
> +    CONTINUE,
> +
> +    /**
> +     * Commands should return finished if the processing of the given context
> +     * has been completed.
> +     *
> +     * @since Chain 2.0
> +     */
> +    FINISHED;
> +
> +}
>
> Propchange: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Propchange: commons/proper/chain/trunk/api/src/main/java/org/apache/commons/chain2/Processing.java
> ------------------------------------------------------------------------------
>     svn:keywords = Date Author Id Revision HeadURL
>
> Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java (original)
> +++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/agility/impl/HandlerCommand.java Wed Jul  3 20:45:37 2013
> @@ -17,6 +17,7 @@
>  package org.apache.commons.chain2.cookbook.agility.impl;
>
>  import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.cookbook.agility.ProcessException;
>  import org.apache.commons.chain2.cookbook.agility.Request;
>  import org.apache.commons.chain2.cookbook.agility.RequestHandler;
> @@ -48,10 +49,10 @@ public class HandlerCommand implements C
>          }
>      }
>
> -    public boolean execute(RequestContext requestContext) {
> +    public Processing execute(RequestContext requestContext) {
>          handle(requestContext);
>
> -        return CONTINUE_PROCESSING;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java (original)
> +++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LocaleChange.java Wed Jul  3 20:45:37 2013
> @@ -17,6 +17,7 @@
>  package org.apache.commons.chain2.cookbook.mailreader.commands;
>
>  import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.cookbook.mailreader.MailReader;
>
>  import java.io.IOException;
> @@ -30,7 +31,7 @@ public class LocaleChange implements Com
>      public LocaleChange() {
>      }
>
> -    public boolean execute(MailReader mailReader) {
> +    public Processing execute(MailReader mailReader) {
>          try {
>              Writer logger = mailReader.getLogger();
>              logger.write("LocaleChange.execute ");
> @@ -39,7 +40,7 @@ public class LocaleChange implements Com
>              throw new RuntimeException(ioe);
>          }
>
> -        return CONTINUE_PROCESSING;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java (original)
> +++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/LogonUser.java Wed Jul  3 20:45:37 2013
> @@ -17,6 +17,7 @@
>  package org.apache.commons.chain2.cookbook.mailreader.commands;
>
>  import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.cookbook.mailreader.MailReader;
>
>  import java.io.IOException;
> @@ -29,14 +30,14 @@ public class LogonUser implements Comman
>      public LogonUser() {
>      }
>
> -    public boolean execute(MailReader mailReader) {
> +    public Processing execute(MailReader mailReader) {
>          try {
>              mailReader.getLogger().write("LogonUser.execute");
>          } catch (IOException ioe) {
>              throw new RuntimeException(ioe);
>          }
>
> -        return CONTINUE_PROCESSING;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java (original)
> +++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/mailreader/commands/ProfileCheck.java Wed Jul  3 20:45:37 2013
> @@ -17,6 +17,7 @@
>  package org.apache.commons.chain2.cookbook.mailreader.commands;
>
>  import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.cookbook.mailreader.MailReader;
>
>  import java.io.IOException;
> @@ -29,14 +30,14 @@ public class ProfileCheck implements Com
>      public ProfileCheck() {
>      }
>
> -    public boolean execute(MailReader mailReader) {
> +    public Processing execute(MailReader mailReader) {
>          try {
>              mailReader.getLogger().write("ProfileCheck.execute\n");
>          } catch (IOException ioe) {
>              throw new RuntimeException(ioe);
>          }
>
> -        return CONTINUE_PROCESSING;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java (original)
> +++ commons/proper/chain/trunk/apps/cookbook-examples/src/main/java/org/apache/commons/chain2/cookbook/profile/ProfileCheck.java Wed Jul  3 20:45:37 2013
> @@ -17,6 +17,7 @@
>  package org.apache.commons.chain2.cookbook.profile;
>
>  import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Processing;
>
>  /**
>   * @version $Id$
> @@ -25,13 +26,13 @@ public class ProfileCheck implements Com
>
>      public Profile newProfile(ProfileContext context) { return new Profile(); }
>
> -    public boolean execute(ProfileContext context) {
> +    public Processing execute(ProfileContext context) {
>          Profile profile = context.getProfile();
>
>          if (null == profile) {
>              context.setProfile(newProfile(context));
>          }
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java (original)
> +++ commons/proper/chain/trunk/apps/cookbook-examples/src/test/java/org/apache/commons/chain2/cookbook/mailreader/CatalogTest.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.cookbo
>
>  import org.apache.commons.chain2.Catalog;
>  import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Processing;
>  import org.junit.Before;
>  import org.junit.Test;
>  import org.mockito.Mock;
> @@ -28,6 +29,7 @@ import javax.servlet.http.HttpServletReq
>  import javax.servlet.http.HttpSession;
>  import java.util.Locale;
>
> +import static org.junit.Assert.assertEquals;
>  import static org.junit.Assert.assertTrue;
>  import static org.mockito.Matchers.anyString;
>  import static org.mockito.Mockito.verify;
> @@ -51,8 +53,8 @@ public class CatalogTest {
>          when(request.getSession()).thenReturn(session);
>      }
>
> -    private boolean executeCatalogCommand(MailReader context,
> -            String name, HttpServletRequest request) {
> +    private Processing executeCatalogCommand(MailReader context,
> +                                             String name, HttpServletRequest request) {
>
>          ServletContext servletContext =
>                  request.getSession().getServletContext();
> @@ -73,9 +75,9 @@ public class CatalogTest {
>          MailReader context = new MailReader();
>          context.setLocale(Locale.CANADA);
>
> -        when(testCommand.execute(context)).thenReturn(true);
> +        when(testCommand.execute(context)).thenReturn(Processing.FINISHED);
>
> -        assertTrue("Catalog execution did not complete as expected",
> +        assertEquals("Catalog execution did not complete as expected", Processing.FINISHED,
>                  executeCatalogCommand(context, "aCommand", request));
>
>          verify(testCommand).execute(context);
>
> Modified: commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java (original)
> +++ commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.web.WebContext;
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
> @@ -58,15 +59,15 @@ public class CountCommand implements Com
>       * <p>Execute the command.</p>
>       *
>       * @param context The {@link Context} we are operating on
> -     * @return <code>false</code> so that processng will continue
> +     * @return {@link Processing#CONTINUE} so that processing will continue.
>       */
> -    public boolean execute(WebContext<String, Object> context) {
> +    public Processing execute(WebContext<String, Object> context) {
>          count++;
>          log.info("Executing: " + attribute + "=" + count);
>
>          context.getSessionScope().put(attribute, new Integer(count));
>
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java (original)
> +++ commons/proper/chain/trunk/apps/example1/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.web.servlet.ServletWebContext;
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
> @@ -59,9 +60,9 @@ public class ForwardCommand implements C
>       * <p>Execute the command.</p>
>       *
>       * @param context The {@link Context} we are operating on
> -     * @return <code>false</code> so that processng will continue
> +     * @return {@link Processing#CONTINUE} so that processing will continue.
>       */
> -    public boolean execute(ServletWebContext<String, Object> context) {
> +    public Processing execute(ServletWebContext<String, Object> context) {
>          try {
>              String uri = getForward(context);
>              if (uri != null) {
> @@ -70,12 +71,12 @@ public class ForwardCommand implements C
>                  }
>                  RequestDispatcher rd = context.getContext().getRequestDispatcher(uri);
>                  rd.forward(context.getRequest(), context.getResponse());
> -                return true;
> +                return Processing.FINISHED;
>              } else {
>                  if (log.isDebugEnabled()) {
>                      log.debug("No forward found");
>                  }
> -                return false;
> +                return Processing.CONTINUE;
>              }
>          } catch (ServletException e) {
>              throw new RuntimeException(e);
>
> Modified: commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java (original)
> +++ commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/CountCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.web.WebContext;
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
> @@ -57,16 +58,17 @@ public class CountCommand implements Com
>      /**
>       * <p>Execute the command.</p>
>       *
> -     * @param context The {@link Context} we are operating on
> -     * @return <code>false</code> so that processng will continue
> +     *
> +     * @param context The {@link org.apache.commons.chain2.Context} we are operating on
> +     * @return {@link Processing#CONTINUE} so that processing will continue.
>       */
> -    public boolean execute(WebContext<String, Object> context) {
> +    public Processing execute(WebContext<String, Object> context) {
>          count++;
>          log.info("Executing: " + attribute + "=" + count);
>
>          context.getSessionScope().put(attribute, new Integer(count));
>
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java (original)
> +++ commons/proper/chain/trunk/apps/example2/src/main/java/org/apache/commons/chain2/apps/example/ForwardCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.apps.e
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.web.servlet.ServletWebContext;
>  import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
> @@ -57,10 +58,11 @@ public class ForwardCommand implements C
>      /**
>       * <p>Execute the command.</p>
>       *
> -     * @param context The {@link Context} we are operating on
> -     * @return <code>false</code> so that processng will continue
> +     *
> +     * @param context The {@link org.apache.commons.chain2.Context} we are operating on
> +     * @return {@link Processing#CONTINUE} so that processnig will continue.
>       */
> -    public boolean execute(ServletWebContext<String, Object> context) {
> +    public Processing execute(ServletWebContext<String, Object> context) {
>          try {
>              String uri = getForward(context);
>              if (uri != null) {
> @@ -69,12 +71,12 @@ public class ForwardCommand implements C
>                  }
>                  RequestDispatcher rd = context.getContext().getRequestDispatcher(uri);
>                  rd.forward(context.getRequest(), context.getResponse());
> -                return true;
> +                return Processing.FINISHED;
>              } else {
>                  if (log.isDebugEnabled()) {
>                      log.debug("No forward found");
>                  }
> -                return false;
> +                return Processing.CONTINUE;
>              }
>          } catch (IOException e) {
>              throw new RuntimeException(e);
>
> Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java (original)
> +++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/CopyCommand.java Wed Jul  3 20:45:37 2013
> @@ -19,6 +19,7 @@ package org.apache.commons.chain2.base;
>  import java.util.Map;
>
>  import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Processing;
>
>  /**
>   * <p>Copy a specified literal value, or a context attribute stored under
> @@ -78,17 +79,17 @@ public class CopyCommand<K, V, C extends
>       * <p>Copy a specified literal value, or a context attribute stored under
>       * the <code>fromKey</code> (if any), to the <code>toKey</code>.</p>
>       *
> -     * @param context {@link org.apache.commons.chain2.Context Context} in which we are operating
> +     * @param context {@link org.apache.commons.chain2.Context Context} in which we are operating.
>       *
> -     * @return <code>false</code> so that processing will continue
> +     * @return {@link Processing#CONTINUE} so that processing will continue.
>       * @throws org.apache.commons.chain2.ChainException in the if an error occurs during execution.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          if (containsKeys(context)) {
>              V value = context.get(getFromKey());
>              context.put(getToKey(), value);
>          }
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>      private boolean containsKeys(C context) {
>
> Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java (original)
> +++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.base;
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>  import java.lang.reflect.InvocationTargetException;
>  import java.lang.reflect.Method;
> @@ -55,7 +56,7 @@ public abstract class DispatchCommand<K,
>
>      /**
>       * Look up the method specified by either "method" or "methodKey" and invoke it,
> -     * returning a boolean value as interpreted by <code>evaluateResult</code>.
> +     * returning a {@link Processing} value as interpreted by <code>evaluateResult</code>.
>       * @param context The Context to be processed by this Command.
>       * @return the result of method being dispatched to.
>       * @throws IllegalStateException if neither 'method' nor 'methodKey' properties are defined
> @@ -64,7 +65,7 @@ public abstract class DispatchCommand<K,
>       * the exception itself, unless the cause is an <code>Error</code> or other <code>Throwable</code>
>       * which is not an <code>Exception</code>.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          if (this.getMethod() == null && this.getMethodKey() == null) {
>              throw new IllegalStateException("Neither 'method' nor 'methodKey' properties are defined ");
>          }
> @@ -120,15 +121,19 @@ public abstract class DispatchCommand<K,
>      }
>
>      /**
> -     * Evaluate the result of the method invocation as a boolean value.  Base implementation
> -     * expects that the invoked method returns boolean true/false, but subclasses might
> +     * Evaluate the result of the method invocation as a processing value. Base implementation
> +     * expects that the invoked method returns processing, but subclasses might
>       * implement other interpretations.
> -     * @param o The result of the methid execution
> +     * @param obj The result of the method execution
>       * @return The evaluated result/
>       */
> -    protected boolean evaluateResult(Object o) {
> -        Boolean result = (Boolean) o;
> -        return result != null && result.booleanValue();
> +    protected Processing evaluateResult(Object obj) {
> +        if(obj instanceof Processing) {
> +            Processing result = (Processing) obj;
> +            return result;
> +        } else {
> +            return Processing.CONTINUE;
> +        }
>      }
>
>      /**
>
> Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java (original)
> +++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/DispatchLookupCommand.java Wed Jul  3 20:45:37 2013
> @@ -20,6 +20,7 @@ import org.apache.commons.chain2.Catalog
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
>  import org.apache.commons.chain2.Filter;
> +import org.apache.commons.chain2.Processing;
>
>  import java.lang.reflect.InvocationTargetException;
>  import java.lang.reflect.Method;
> @@ -133,13 +134,13 @@ public class DispatchLookupCommand<K, V,
>       *
>       * @param context The context for this request
>       * @return the result of executing the looked-up command's method, or
> -     * <code>false</code> if no command is found.
> +     * {@link Processing#CONTINUE} if no command is found.
>       *
>       * @throws DispatchException if no such {@link Command} can be found and the
>       *  <code>optional</code> property is set to <code>false</code>
>       */
>      @Override
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          if (this.getMethod() == null && this.getMethodKey() == null) {
>              throw new IllegalStateException("Neither 'method' nor 'methodKey' properties are defined");
>          }
> @@ -150,9 +151,13 @@ public class DispatchLookupCommand<K, V,
>              try {
>                  Method methodObject = extractMethod(command, context);
>                  Object obj = methodObject.invoke(command, getArguments(context));
> -
> -                Boolean result = (Boolean) obj;
> -                return result != null && result.booleanValue(); // might cause NPE (obj could be null)
> +
> +                if(obj instanceof Processing) {
> +                    Processing result = (Processing) obj;
> +                    return result;
> +                } else {
> +                    return Processing.CONTINUE;
> +                }
>              } catch (NoSuchMethodException e) {
>                  throw new DispatchException("Error extracting method from context", e, context, this);
>              } catch (IllegalAccessException e) {
> @@ -162,7 +167,7 @@ public class DispatchLookupCommand<K, V,
>                  throw new DispatchException("Error in reflected dispatched command", cause, context, this);
>              }
>          }
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>      // ------------------------------------------------------ Protected Methods
>
> Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java (original)
> +++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/LookupCommand.java Wed Jul  3 20:45:37 2013
> @@ -21,6 +21,7 @@ import org.apache.commons.chain2.Catalog
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
>  import org.apache.commons.chain2.Filter;
> +import org.apache.commons.chain2.Processing;
>
>  import java.util.Map;
>
> @@ -254,7 +255,7 @@ public class LookupCommand<K, V, C exten
>       * <p>Look up the specified command, and (if found) execute it.
>       * Unless <code>ignoreExecuteResult</code> is set to <code>true</code>,
>       * return the result of executing the found command.  If no command
> -     * is found, return <code>false</code>, unless the <code>optional</code>
> +     * is found, return {@link Processing#CONTINUE}, unless the <code>optional</code>
>       * property is <code>false</code>, in which case an <code>IllegalArgumentException</code>
>       * will be thrown.
>       * </p>
> @@ -265,21 +266,21 @@ public class LookupCommand<K, V, C exten
>       *  can be found and the <code>optional</code> property is set
>       *  to <code>false</code>
>       * @return the result of executing the looked-up command, or
> -     * <code>false</code> if no command is found or if the command
> +     * <code>CONTINUE</code> if no command is found or if the command
>       * is found but the <code>ignoreExecuteResult</code> property of this
>       * instance is <code>true</code>
>       * @throws org.apache.commons.chain2.ChainException if and error occurs in the looked-up Command.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          Command<K, V, C> command = getCommand(context);
>          if (command != null) {
> -            boolean result = command.execute(context);
> +            Processing result = command.execute(context);
>              if (isIgnoreExecuteResult()) {
> -                return false;
> +                return Processing.CONTINUE;
>              }
>              return result;
>          }
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>
>
> Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java (original)
> +++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/OverrideCommand.java Wed Jul  3 20:45:37 2013
> @@ -21,6 +21,7 @@ import java.util.Map;
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>  /**
>   * <p>Override any context attribute stored under the <code>key</code> with <code>value</code>.</p>
> @@ -79,14 +80,14 @@ public class OverrideCommand<K, V, C ext
>       *
>       * @param context {@link org.apache.commons.chain2.Context} in which we are operating
>       *
> -     * @return <code>false</code> so that processing will continue
> +     * @return {@link Processing#CONTINUE} so that {@link Processing} will continue.
>       * @throws org.apache.commons.chain2.ChainException if and error occurs.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          if (context.containsKey(getKey())) {
>              context.put(getKey(), getValue());
>          }
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java (original)
> +++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/base/RemoveCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.base;
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>  /**
>   * <p>Remove any context attribute stored under the <code>fromKey</code>.</p>
> @@ -59,12 +60,12 @@ public class RemoveCommand<K, V, C exten
>       *
>       * @param context {@link Context} in which we are operating
>       *
> -     * @return <code>false</code> so that processing will continue
> +     * @return {@link Processing#CONTINUE} so that processing will continue.
>       * @throws org.apache.commons.chain2.ChainException if and error occurs.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          context.remove(getFromKey());
> -        return false;
> +        return Processing.CONTINUE;
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java (original)
> +++ commons/proper/chain/trunk/base/src/main/java/org/apache/commons/chain2/impl/ChainBase.java Wed Jul  3 20:45:37 2013
> @@ -21,6 +21,7 @@ import org.apache.commons.chain2.Command
>  import org.apache.commons.chain2.Context;
>  import org.apache.commons.chain2.Filter;
>  import org.apache.commons.chain2.ChainException;
> +import org.apache.commons.chain2.Processing;
>
>  import java.util.ArrayList;
>  import java.util.Collection;
> @@ -145,12 +146,12 @@ public class ChainBase<K, V, C extends M
>       * @throws IllegalArgumentException if <code>context</code>
>       *  is <code>null</code>
>       *
> -     * @return <code>true</code> if the processing of this {@link Context}
> -     *  has been completed, or <code>false</code> if the processing
> -     *  of this {@link Context} should be delegated to a subsequent
> -     *  {@link Command} in an enclosing {@link Chain}
> +     * @return {@link Processing#FINISHED} if the processing of this contex
> +     *  has been completed. Returns {@link Processing#CONTINUE} if the processing
> +     *  of this context should be delegated to a subsequent command in an
> +     *  enclosing chain.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          // Verify our parameters
>          if (context == null) {
>              throw new IllegalArgumentException("Can't execute a null context");
> @@ -159,9 +160,9 @@ public class ChainBase<K, V, C extends M
>          // Freeze the configuration of the command list
>          frozen = true;
>
> -        // Execute the commands in this list until one returns true
> -        // or throws an exception
> -        boolean saveResult = false;
> +        // Execute the commands in this list until one returns something else
> +        // than Processing.CONTINUE or throws an exception
> +        Processing saveResult = Processing.CONTINUE;
>          Exception saveException = null;
>          int i = 0;
>          int n = commands.size();
> @@ -170,7 +171,11 @@ public class ChainBase<K, V, C extends M
>              try {
>                  lastCommand = commands.get(i);
>                  saveResult = lastCommand.execute(context);
> -                if (saveResult) {
> +                if(saveResult == null) {
> +                    String format = String.format("The command '%s' returned an invalid processing value: '%s'",
> +                            lastCommand.getClass().getName(), saveResult);
> +                    throw new ChainException(format);
> +                } else if (saveResult != Processing.CONTINUE) {
>                      break;
>                  }
>              } catch (Exception e) {
>
> Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/CopyCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -27,6 +27,7 @@ import java.util.Collections;
>  import java.util.HashMap;
>  import java.util.Map;
>
> +import org.apache.commons.chain2.Processing;
>  import org.junit.After;
>  import org.junit.Before;
>  import org.junit.Test;
> @@ -94,8 +95,8 @@ public class CopyCommandTestCase {
>      }
>
>      private void execute() {
> -        // make sure execute always returns false
> -        assertFalse(command.execute(context));
> +        // make sure execute always returns continue
> +        assertEquals(Processing.CONTINUE, command.execute(context));
>      }
>
>  }
>
> Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -17,6 +17,7 @@
>  package org.apache.commons.chain2.base;
>
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.impl.ContextBase;
>  import org.junit.Test;
>
> @@ -32,8 +33,8 @@ public class DispatchCommandTestCase {
>          test.setMethod("testMethod");
>          Context<String, Object> context = new ContextBase();
>          assertNull(context.get("foo"));
> -        boolean result = test.execute(context);
> -        assertTrue(result);
> +        Processing result = test.execute(context);
> +        assertEquals(Processing.FINISHED, result);
>          assertNotNull(context.get("foo"));
>          assertEquals("foo", context.get("foo"));
>
> @@ -49,8 +50,8 @@ public class DispatchCommandTestCase {
>          Context<String, Object> context = new ContextBase();
>          context.put("foo", "testMethodKey");
>          assertNull(context.get("bar"));
> -        boolean result = test.execute(context);
> -        assertFalse(result);
> +        Processing result = test.execute(context);
> +        assertEquals(Processing.CONTINUE, result);
>          assertNotNull(context.get("bar"));
>          assertEquals("bar", context.get("bar"));
>
> @@ -64,8 +65,8 @@ public class DispatchCommandTestCase {
>          test.setMethod("foo");
>          Context<String, Object> context = new ContextBase();
>          assertNull(context.get("elephant"));
> -        boolean result = test.execute(context);
> -        assertTrue(result);
> +        Processing result = test.execute(context);
> +        assertEquals(Processing.FINISHED, result);
>          assertNotNull(context.get("elephant"));
>          assertEquals("elephant", context.get("elephant"));
>
> @@ -76,15 +77,15 @@ public class DispatchCommandTestCase {
>      class TestCommand extends DispatchCommand<String, Object, Context<String, Object>> {
>
>
> -        public boolean testMethod(Context<String, Object> context) {
> +        public Processing testMethod(Context<String, Object> context) {
>              context.put("foo", "foo");
> -            return true;
> +            return Processing.FINISHED;
>          }
>
> -        public boolean testMethodKey(Context<String, Object> context) {
> +        public Processing testMethodKey(Context<String, Object> context) {
>
>              context.put("bar", "bar");
> -            return false;
> +            return Processing.CONTINUE;
>          }
>
>      }
> @@ -106,9 +107,9 @@ public class DispatchCommandTestCase {
>              return new Object[] { new TestAlternateContext(context) };
>          }
>
> -        public boolean foo(TestAlternateContext context) {
> +        public Processing foo(TestAlternateContext context) {
>              context.put("elephant", "elephant");
> -            return true;
> +            return Processing.FINISHED;
>          }
>
>      }
>
> Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/DispatchLookupCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -17,6 +17,7 @@
>  package org.apache.commons.chain2.base;
>
>  import static org.apache.commons.chain2.testutils.HasLog.hasLog;
> +import static org.junit.Assert.assertEquals;
>  import static org.junit.Assert.assertThat;
>  import static org.junit.Assert.assertTrue;
>  import static org.junit.Assert.fail;
> @@ -24,6 +25,7 @@ import static org.junit.Assert.fail;
>  import org.apache.commons.chain2.Catalog;
>  import org.apache.commons.chain2.CatalogFactory;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.impl.CatalogBase;
>  import org.apache.commons.chain2.impl.CatalogFactoryBase;
>  import org.apache.commons.chain2.impl.ContextBase;
> @@ -102,8 +104,8 @@ public class DispatchLookupCommandTestCa
>          command.setMethod("fooMethod");
>
>          try {
> -            assertTrue("Command should return true",
> -                       command.execute(context));
> +            assertEquals("Command should return finished",
> +                    Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>
>              fail("Threw exception: " + e);
> @@ -113,8 +115,8 @@ public class DispatchLookupCommandTestCa
>          command.setMethod("barMethod");
>
>          try {
> -            assertTrue("Command should return true",
> -                       command.execute(context));
> +            assertEquals("Command should return finished",
> +                    Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -160,8 +162,8 @@ public class DispatchLookupCommandTestCa
>          context.put("methodKey", "fooMethod");
>
>          try {
> -            assertTrue("Command should return true",
> -                       command.execute(context));
> +            assertEquals("Command should return finished",
> +                    Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -172,8 +174,8 @@ public class DispatchLookupCommandTestCa
>
>
>          try {
> -            assertTrue("Command should return true",
> -                       command.execute(context));
> +            assertEquals("Command should return finished",
> +                    Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -193,14 +195,14 @@ public class DispatchLookupCommandTestCa
>              super(id);
>          }
>
> -        public boolean fooMethod(C context) {
> +        public Processing fooMethod(C context) {
>              log(context, id);
> -            return true;
> +            return Processing.FINISHED;
>          }
>
> -        public boolean barMethod(C context) {
> +        public Processing barMethod(C context) {
>              log(context, id);
> -            return true;
> +            return Processing.FINISHED;
>          }
>
>      }
>
> Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/base/LookupCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -28,6 +28,7 @@ import org.apache.commons.chain2.Catalog
>  import org.apache.commons.chain2.CatalogFactory;
>  import org.apache.commons.chain2.Chain;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.impl.CatalogBase;
>  import org.apache.commons.chain2.impl.CatalogFactoryBase;
>  import org.apache.commons.chain2.impl.ChainBase;
> @@ -104,8 +105,8 @@ public class LookupCommandTestCase {
>          command.setName("foo");
>
>          try {
> -            assertTrue("Command should return true",
> -                       command.execute(context));
> +            assertEquals("Command should return finished",
> +                   Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -127,8 +128,8 @@ public class LookupCommandTestCase {
>          command.setName("foo");
>
>          try {
> -            assertTrue("Command should return true",
> -                    command.execute(context));
> +            assertEquals("Command should return finished",
> +                   Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -146,8 +147,8 @@ public class LookupCommandTestCase {
>          context.put("nameKey", "foo");
>
>          try {
> -            assertTrue("Command should return true",
> -                    command.execute(context));
> +            assertEquals("Command should return finished",
> +                Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -170,8 +171,8 @@ public class LookupCommandTestCase {
>          context.put("nameKey", "foo");
>
>          try {
> -            assertTrue("Command should return true",
> -                       command.execute(context));
> +            assertEquals("Command should return finished",
> +                Processing.FINISHED, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -189,8 +190,8 @@ public class LookupCommandTestCase {
>          command.setName("foo");
>
>          try {
> -            assertFalse("Command should return false",
> -                       command.execute(context));
> +            assertEquals("Command should return continue",
> +                Processing.CONTINUE, command.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
>
> Modified: commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java (original)
> +++ commons/proper/chain/trunk/base/src/test/java/org/apache/commons/chain2/impl/ChainBaseTestCase.java Wed Jul  3 20:45:37 2013
> @@ -28,8 +28,10 @@ import java.util.Collection;
>  import java.util.List;
>
>  import org.apache.commons.chain2.Chain;
> +import org.apache.commons.chain2.ChainException;
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.testutils.AddingCommand;
>  import org.apache.commons.chain2.testutils.DelegatingCommand;
>  import org.apache.commons.chain2.testutils.DelegatingFilter;
> @@ -37,6 +39,7 @@ import org.apache.commons.chain2.testuti
>  import org.apache.commons.chain2.testutils.ExceptionFilter;
>  import org.apache.commons.chain2.testutils.NonDelegatingCommand;
>  import org.apache.commons.chain2.testutils.NonDelegatingFilter;
> +import org.apache.commons.chain2.testutils.NullReturningCommand;
>  import org.junit.After;
>  import org.junit.Before;
>  import org.junit.Test;
> @@ -91,6 +94,15 @@ public class ChainBaseTestCase {
>      // ------------------------------------------------ Individual Test Methods
>
>
> +    @Test (expected = ChainException.class)
> +    public void nullReturningCommandForcesException() {
> +        chain.addCommand(new DelegatingCommand("BeforeNullReturningCommand"));
> +        chain.addCommand(new NullReturningCommand());
> +        chain.addCommand(new NonDelegatingCommand("AfterNullReturningCommand"));
> +
> +        chain.execute(context);
> +    }
> +
>      // Test the ability to add commands
>      @Test
>      public void testCommands() {
> @@ -117,8 +129,7 @@ public class ChainBaseTestCase {
>      public void testExecute1a() {
>          chain.addCommand(new NonDelegatingCommand("1"));
>          try {
> -            assertTrue("Chain returned true",
> -                       chain.execute(context));
> +            assertEquals(Processing.FINISHED, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -131,8 +142,7 @@ public class ChainBaseTestCase {
>      public void testExecute1b() {
>          chain.addCommand(new DelegatingCommand("1"));
>          try {
> -            assertTrue("Chain returned false",
> -                       !chain.execute(context));
> +            assertEquals(Processing.CONTINUE, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -177,8 +187,7 @@ public class ChainBaseTestCase {
>          chain.addCommand(new DelegatingCommand("2"));
>          chain.addCommand(new NonDelegatingCommand("3"));
>          try {
> -            assertTrue("Chain returned true",
> -                       chain.execute(context));
> +            assertEquals(Processing.FINISHED, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -193,8 +202,7 @@ public class ChainBaseTestCase {
>          chain.addCommand(new DelegatingCommand("2"));
>          chain.addCommand(new DelegatingCommand("3"));
>          try {
> -            assertTrue("Chain returned false",
> -                       !chain.execute(context));
> +            assertEquals(Processing.CONTINUE, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -241,8 +249,7 @@ public class ChainBaseTestCase {
>      public void testExecute3a() {
>          chain.addCommand(new NonDelegatingFilter("1", "a"));
>          try {
> -            assertTrue("Chain returned true",
> -                       chain.execute(context));
> +            assertEquals(Processing.FINISHED, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -255,8 +262,7 @@ public class ChainBaseTestCase {
>      public void testExecute3b() {
>          chain.addCommand(new DelegatingFilter("1", "a"));
>          try {
> -            assertTrue("Chain returned false",
> -                       !chain.execute(context));
> +            assertEquals(Processing.CONTINUE, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -286,8 +292,7 @@ public class ChainBaseTestCase {
>          chain.addCommand(new DelegatingCommand("2"));
>          chain.addCommand(new NonDelegatingFilter("3", "c"));
>          try {
> -            assertTrue("Chain returned true",
> -                       chain.execute(context));
> +            assertEquals(Processing.FINISHED, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
> @@ -302,8 +307,7 @@ public class ChainBaseTestCase {
>          chain.addCommand(new DelegatingFilter("2", "b"));
>          chain.addCommand(new DelegatingCommand("3"));
>          try {
> -            assertTrue("Chain returned false",
> -                       !chain.execute(context));
> +            assertEquals(Processing.CONTINUE, chain.execute(context));
>          } catch (Exception e) {
>              fail("Threw exception: " + e);
>          }
>
> Modified: commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java (original)
> +++ commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/TestCommand.java Wed Jul  3 20:45:37 2013
> @@ -19,6 +19,7 @@ package org.apache.commons.chain2.config
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>
>  /**
> @@ -47,8 +48,8 @@ public class TestCommand implements Comm
>      }
>
>
> -    public boolean execute(Context<String, Object> context) {
> -    return (false);
> +    public Processing execute(Context<String, Object> context) {
> +        return Processing.CONTINUE;
>      }
>
>
>
> Modified: commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java (original)
> +++ commons/proper/chain/trunk/configuration/xml/src/test/java/org/apache/commons/chain2/config/xml/XmlConfigParserTestCase.java Wed Jul  3 20:45:37 2013
> @@ -33,6 +33,7 @@ import java.util.List;
>  import org.apache.commons.chain2.Catalog;
>  import org.apache.commons.chain2.CatalogFactory;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.apache.commons.chain2.testutils.AddingCommand;
>  import org.apache.commons.chain2.impl.CatalogBase;
>  import org.apache.commons.chain2.impl.ChainBase;
> @@ -160,8 +161,7 @@ public class XmlConfigParserTestCase {
>      @Test
>      public void testExecute2a() throws Exception {
>
> -        assertTrue("Chain returned true",
> -                catalog.getCommand("Execute2a").execute(context));
> +        assertEquals(Processing.FINISHED, catalog.getCommand("Execute2a").execute(context));
>          assertThat(context, hasLog("1/2/3"));
>
>      }
> @@ -171,8 +171,7 @@ public class XmlConfigParserTestCase {
>      @Test
>      public void testExecute2b() throws Exception {
>
> -        assertFalse("Chain returned false",
> -                catalog.getCommand("Execute2b").execute(context));
> +        assertEquals(Processing.CONTINUE, catalog.getCommand("Execute2b").execute(context));
>          assertThat(context, hasLog("1/2/3"));
>
>      }
> @@ -212,8 +211,7 @@ public class XmlConfigParserTestCase {
>      @Test
>      public void testExecute4a() throws Exception {
>
> -        assertTrue("Chain returned true",
> -                catalog.getCommand("Execute4a").execute(context));
> +        assertEquals(Processing.FINISHED, catalog.getCommand("Execute4a").execute(context));
>          assertThat(context, hasLog("1/2/3/c/a"));
>
>      }
> @@ -223,8 +221,7 @@ public class XmlConfigParserTestCase {
>      @Test
>      public void testExecute4b() throws Exception {
>
> -        assertFalse("Chain returned false",
> -                catalog.getCommand("Execute4b").execute(context));
> +        assertEquals(Processing.CONTINUE, catalog.getCommand("Execute4b").execute(context));
>          assertThat(context, hasLog("1/2/3/b"));
>
>      }
>
> Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java (original)
> +++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingCommand.java Wed Jul  3 20:45:37 2013
> @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>
>  /**
> @@ -50,10 +51,10 @@ public class DelegatingCommand extends N
>
>      // Execution method for this Command
>      @Override
> -    public boolean execute(Context<String, Object> context) {
> +    public Processing execute(Context<String, Object> context) {
>
>          super.execute(context);
> -        return (false);
> +        return Processing.CONTINUE;
>
>      }
>
>
> Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java (original)
> +++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/DelegatingFilter.java Wed Jul  3 20:45:37 2013
> @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
>
>  import org.apache.commons.chain2.Context;
>  import org.apache.commons.chain2.Filter;
> +import org.apache.commons.chain2.Processing;
>
>
>  /**
> @@ -50,10 +51,10 @@ public class DelegatingFilter extends No
>
>      // Execution method for this Command
>      @Override
> -    public boolean execute(Context<String, Object> context) {
> +    public Processing execute(Context<String, Object> context) {
>
>          super.execute(context);
> -        return (false);
> +        return Processing.CONTINUE;
>
>      }
>
>
> Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java (original)
> +++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingCommand.java Wed Jul  3 20:45:37 2013
> @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>
>  /**
> @@ -64,13 +65,13 @@ public class NonDelegatingCommand implem
>
>
>      // Execution method for this Command
> -    public boolean execute(Context<String, Object> context) {
> +    public Processing execute(Context<String, Object> context) {
>
>          if (context == null) {
>              throw new IllegalArgumentException();
>          }
>          log(context, id);
> -        return (true);
> +        return Processing.FINISHED;
>
>      }
>
>
> Modified: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java (original)
> +++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NonDelegatingFilter.java Wed Jul  3 20:45:37 2013
> @@ -19,6 +19,7 @@ package org.apache.commons.chain2.testut
>
>  import org.apache.commons.chain2.Context;
>  import org.apache.commons.chain2.Filter;
> +import org.apache.commons.chain2.Processing;
>
>
>  /**
> @@ -64,10 +65,10 @@ public class NonDelegatingFilter
>
>      // Execution method for this Command
>      @Override
> -    public boolean execute(Context<String, Object> context) {
> +    public Processing execute(Context<String, Object> context) {
>
>          super.execute(context);
> -        return (true);
> +        return Processing.FINISHED;
>
>      }
>
>
> Added: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java?rev=1499551&view=auto
> ==============================================================================
> --- commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java (added)
> +++ commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java Wed Jul  3 20:45:37 2013
> @@ -0,0 +1,61 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements.  See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache License, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License.  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.commons.chain2.testutils;
> +
> +
> +import org.apache.commons.chain2.Chain;
> +import org.apache.commons.chain2.Command;
> +import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
> +
> +
> +/**
> + * Implementation of {@link Command} that always returns null if it's executed.
> + *
> + * @version $Id $
> + */
> +public class NullReturningCommand extends DelegatingCommand {
> +
> +
> +    // ------------------------------------------------------------ Constructor
> +
> +
> +    public NullReturningCommand() {
> +        this("");
> +    }
> +
> +
> +    // Construct an instance that will log the specified identifier
> +    public NullReturningCommand(String id) {
> +        super(id);
> +    }
> +
> +
> +    // -------------------------------------------------------- Command Methods
> +
> +    @Override
> +    public Processing execute(Context<String, Object> context) {
> +        return null;
> +    }
> +
> +
> +    public Processing execute(Context<String, Object> context, Chain<String, Object, Context<String, Object>> chain) {
> +        return null;
> +    }
> +
> +
> +}
>
> Propchange: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Propchange: commons/proper/chain/trunk/test-utils/src/main/java/org/apache/commons/chain2/testutils/NullReturningCommand.java
> ------------------------------------------------------------------------------
>     svn:keywords = Date Author Id Revision HeadURL
>
> Modified: commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/test-utils/src/test/java/org/apache/commons/chain2/testutils/NonDelegatingCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -18,14 +18,15 @@
>  package org.apache.commons.chain2.testutils;
>
>  import static org.apache.commons.chain2.testutils.HasLog.hasLog;
> -import static org.hamcrest.Matchers.is;
>  import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
>  import static org.hamcrest.collection.IsMapContaining.hasKey;
>  import static org.junit.Assert.assertThat;
> +import static org.junit.Assert.assertEquals;
>
>  import java.util.UUID;
>
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>  import org.junit.Before;
>  import org.junit.Test;
>
> @@ -68,6 +69,6 @@ public class NonDelegatingCommandTestCas
>      }
>
>      private void execute() {
> -        assertThat(command.execute(context), is(true));
> +        assertEquals(Processing.FINISHED, command.execute(context));
>      }
>  }
>
> Modified: commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java (original)
> +++ commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractGetLocaleCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.web;
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>  import java.util.Locale;
>
> @@ -68,12 +69,12 @@ public abstract class AbstractGetLocaleC
>       *
>       * @param context The {@link Context} we are operating on
>       *
> -     * @return <code>false</code> so that processng will continue
> +     * @return {@link Processing#CONTINUE} so that the processing will continue.
>       * @throws org.apache.commons.chain2.ChainException If an error occurs during execution.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          context.put(getLocaleKey(), getLocale(context));
> -        return (false);
> +        return Processing.CONTINUE;
>      }
>
>      // ------------------------------------------------------- Protected Methods
>
> Modified: commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java (original)
> +++ commons/proper/chain/trunk/web/src/main/java/org/apache/commons/chain2/web/AbstractSetLocaleCommand.java Wed Jul  3 20:45:37 2013
> @@ -18,6 +18,7 @@ package org.apache.commons.chain2.web;
>
>  import org.apache.commons.chain2.Command;
>  import org.apache.commons.chain2.Context;
> +import org.apache.commons.chain2.Processing;
>
>  import java.util.Locale;
>
> @@ -69,12 +70,12 @@ public abstract class AbstractSetLocaleC
>       *
>       * @param context The {@link Context} we are operating on
>       *
> -     * @return <code>false</code> so that processing will continue
> +     * @return {@link Processing#CONTINUE} so that the processing will continue.
>       * @throws org.apache.commons.chain2.ChainException If an error occurs during execution.
>       */
> -    public boolean execute(C context) {
> +    public Processing execute(C context) {
>          setLocale(context, (Locale) context.get(getLocaleKey()));
> -        return (false);
> +        return Processing.CONTINUE;
>      }
>
>      // ------------------------------------------------------- Protected Methods
>
> Modified: commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/portlet/PortletGetLocaleCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -16,6 +16,7 @@
>   */
>  package org.apache.commons.chain2.web.portlet;
>
> +import org.apache.commons.chain2.Processing;
>  import org.junit.After;
>  import org.junit.Before;
>  import org.junit.Test;
> @@ -125,8 +126,8 @@ public class PortletGetLocaleCommandTest
>          assertNotNull(localeKey);
>          Object value = context.get(localeKey);
>          assertNull(value);
> -        boolean result = command.execute(context);
> -        assertFalse(result);
> +        Processing result = command.execute(context);
> +        assertEquals(Processing.CONTINUE, result);
>          value = context.get(localeKey);
>          assertNotNull(value);
>          assertTrue(value instanceof Locale);
>
> Modified: commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletGetLocaleCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -16,6 +16,7 @@
>   */
>  package org.apache.commons.chain2.web.servlet;
>
> +import org.apache.commons.chain2.Processing;
>  import org.junit.After;
>  import org.junit.Before;
>  import org.junit.Test;
> @@ -128,8 +129,8 @@ public class ServletGetLocaleCommandTest
>      assertNotNull(localeKey);
>      Object value = context.get(localeKey);
>      assertNull(value);
> -    boolean result = command.execute(context);
> -    assertFalse(result);
> +    Processing result = command.execute(context);
> +    assertEquals(Processing.CONTINUE, result);
>      value = context.get(localeKey);
>      assertNotNull(value);
>      assertTrue(value instanceof Locale);
>
> Modified: commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java
> URL: http://svn.apache.org/viewvc/commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java?rev=1499551&r1=1499550&r2=1499551&view=diff
> ==============================================================================
> --- commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java (original)
> +++ commons/proper/chain/trunk/web/src/test/java/org/apache/commons/chain2/web/servlet/ServletSetLocaleCommandTestCase.java Wed Jul  3 20:45:37 2013
> @@ -16,6 +16,7 @@
>   */
>  package org.apache.commons.chain2.web.servlet;
>
> +import org.apache.commons.chain2.Processing;
>  import org.junit.After;
>  import org.junit.Before;
>  import org.junit.Test;
> @@ -130,8 +131,8 @@ public class ServletSetLocaleCommandTest
>          context.put(localeKey, locale);
>          assertNotNull(context.get(localeKey));
>          assertNull(response.getLocale());
> -        boolean result = command.execute(context);
> -        assertFalse(result);
> +        Processing result = command.execute(context);
> +        assertEquals(Processing.CONTINUE, result);
>          assertNotNull(response.getLocale());
>          assertEquals(locale, response.getLocale());
>      }
>
>

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