You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jspwiki.apache.org by ju...@apache.org on 2020/02/27 15:10:39 UTC

[jspwiki] 14/20: apply format & fixes suggested by intellij

This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 2c5995b9e983a5570b57c38811cc33fddf549051
Author: juanpablo <ju...@apache.org>
AuthorDate: Wed Feb 26 20:28:23 2020 +0100

    apply format & fixes suggested by intellij
---
 .../java/org/apache/wiki/workflow/Workflow.java    | 576 ++++++++-------------
 1 file changed, 211 insertions(+), 365 deletions(-)

diff --git a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java
index 3a0883b..2cdda87 100644
--- a/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java
+++ b/jspwiki-main/src/main/java/org/apache/wiki/workflow/Workflow.java
@@ -35,175 +35,134 @@ import java.util.Map;
 
 /**
  * <p>
- * Sequence of {@link Step} objects linked together. Workflows are always
- * initialized with a message key that denotes the name of the Workflow, and a
- * Principal that represents its owner.
+ * Sequence of {@link Step} objects linked together. Workflows are always initialized with a message key that denotes the name of the
+ * Workflow, and a Principal that represents its owner.
  * </p>
  * <h2>Workflow lifecycle</h2>
- * A Workflow's state (obtained by {@link #getCurrentState()}) will be one of the
- * following:
+ * A Workflow's state (obtained by {@link #getCurrentState()}) will be one of the following:
  * </p>
  * <ul>
- * <li><strong>{@link #CREATED}</strong>: after the Workflow has been
- * instantiated, but before it has been started using the {@link #start()}
+ * <li><strong>{@link #CREATED}</strong>: after the Workflow has been instantiated, but before it has been started using the {@link #start()}
  * method.</li>
- * <li><strong>{@link #RUNNING}</strong>: after the Workflow has been started
- * using the {@link #start()} method, but before it has finished processing all
- * Steps. Note that a Workflow can only be started once; attempting to start it
- * again results in an IllegalStateException. Callers can place the Workflow
- * into the WAITING state by calling {@link #waitstate()}.</li>
- * <li><strong>{@link #WAITING}</strong>: when the Workflow has temporarily
- * paused, for example because of a pending Decision. Once the responsible actor
- * decides what to do, the caller can change the Workflow back to the RUNNING
- * state by calling the {@link #restart()} method (this is done automatically by
- * the Decision class, for instance, when the {@link Decision#decide(Outcome)}
- * method is invoked)</li>
- * <li><strong>{@link #COMPLETED}</strong>: after the Workflow has finished
- * processing all Steps, without errors.</li>
- * <li><strong>{@link #ABORTED}</strong>: if a Step has elected to abort the
- * Workflow.</li>
+ * <li><strong>{@link #RUNNING}</strong>: after the Workflow has been started using the {@link #start()} method, but before it has
+ * finished processing all Steps. Note that a Workflow can only be started once; attempting to start it again results in an
+ * IllegalStateException. Callers can place the Workflow into the WAITING state by calling {@link #waitstate()}.</li>
+ * <li><strong>{@link #WAITING}</strong>: when the Workflow has temporarily paused, for example because of a pending Decision. Once the
+ * responsible actor decides what to do, the caller can change the Workflow back to the RUNNING state by calling the {@link #restart()}
+ * method (this is done automatically by the Decision class, for instance, when the {@link Decision#decide(Outcome)} method is invoked)</li>
+ * <li><strong>{@link #COMPLETED}</strong>: after the Workflow has finished processing all Steps, without errors.</li>
+ * <li><strong>{@link #ABORTED}</strong>: if a Step has elected to abort the Workflow.</li>
  * </ul>
  * <h2>Steps and processing algorithm</h2>
  * <p>
- * Workflow Step objects can be of type {@link Decision}, {@link Task} or other
- * Step subclasses. Decisions require user input, while Tasks do not. See the
- * {@link Step} class for more details.
+ * Workflow Step objects can be of type {@link Decision}, {@link Task} or other Step subclasses. Decisions require user input, while Tasks
+ * do not. See the {@link Step} class for more details.
  * </p>
  * <p>
- * After instantiating a new Workflow (but before telling it to {@link #start()}),
- * calling classes should specify the first Step by executing the
- * {@link #setFirstStep(Step)} method. Additional Steps can be chained by
- * invoking the first step's {@link Step#addSuccessor(Outcome, Step)} method.
+ * After instantiating a new Workflow (but before telling it to {@link #start()}), calling classes should specify the first Step by
+ * executing the {@link #setFirstStep(Step)} method. Additional Steps can be chained by invoking the first step's
+ * {@link Step#addSuccessor(Outcome, Step)} method.
  * </p>
  * <p>
- * When a Workflow's <code>start</code> method is invoked, the Workflow
- * retrieves the first Step and processes it. This Step, and subsequent ones,
- * are processed as follows:
+ * When a Workflow's <code>start</code> method is invoked, the Workflow retrieves the first Step and processes it. This Step, and subsequent
+ * ones, are processed as follows:
  * </p>
  * <ul>
- * <li>The Step's {@link Step#start()} method executes, which sets the start
- * time.</li>
- * <li>The Step's {@link Step#execute()} method is called to begin processing,
- * which will return an Outcome to indicate completion, continuation or errors:</li>
+ * <li>The Step's {@link Step#start()} method executes, which sets the start time.</li>
+ * <li>The Step's {@link Step#execute()} method is called to begin processing, which will return an Outcome to indicate completion,
+ * continuation or errors:</li>
  * <ul>
- * <li>{@link Outcome#STEP_COMPLETE} indicates that the execution method ran
- * without errors, and that the Step should be considered "completed."</li>
- * <li>{@link Outcome#STEP_CONTINUE} indicates that the execution method ran
- * without errors, but that the Step is not "complete" and should be put into
- * the WAITING state.</li>
- * <li>{@link Outcome#STEP_ABORT} indicates that the execution method
- * encountered errors, and should abort the Step <em>and</em> the Workflow as
- * a whole. When this happens, the Workflow will set the current Step's Outcome
- * to {@link Outcome#STEP_ABORT} and invoke the Workflow's {@link #abort()}
- * method. The Step's processing errors, if any, can be retrieved by
- * {@link Step#getErrors()}.</li>
+ * <li>{@link Outcome#STEP_COMPLETE} indicates that the execution method ran without errors, and that the Step should be considered
+ * "completed."</li>
+ * <li>{@link Outcome#STEP_CONTINUE} indicates that the execution method ran without errors, but that the Step is not "complete" and should
+ * be put into the WAITING state.</li>
+ * <li>{@link Outcome#STEP_ABORT} indicates that the execution method encountered errors, and should abort the Step <em>and</em> the
+ * Workflow as a whole. When this happens, the Workflow will set the current Step's Outcome to {@link Outcome#STEP_ABORT} and invoke the
+ * Workflow's {@link #abort()} method. The Step's processing errors, if any, can be retrieved by {@link Step#getErrors()}.</li>
  * </ul>
- * <li>The Outcome of the <code>execute</code> method also affects what
- * happens next. Depending on the result (and assuming the Step did not abort),
- * the Workflow will either move on to the next Step or put the Workflow into
- * the {@link Workflow#WAITING} state:</li>
+ * <li>The Outcome of the <code>execute</code> method also affects what happens next. Depending on the result (and assuming the Step did
+ * not abort), the Workflow will either move on to the next Step or put the Workflow into the {@link Workflow#WAITING} state:</li>
  * <ul>
- * <li>If the Outcome denoted "completion" (<em>i.e.</em>, its
- * {@link Step#isCompleted()} method returns <code>true</code>) then the Step
- * is considered complete; the Workflow looks up the next Step by calling the
- * current Step's {@link Step#getSuccessor(Outcome)} method. If
- * <code>successor()</code> returns a non-<code>null</code> Step, the
- * return value is marked as the current Step and added to the Workflow's Step
- * history. If <code>successor()</code> returns <code>null</code>, then the
- * Workflow has no more Steps and it enters the {@link #COMPLETED} state.</li>
- * <li>If the Outcome did not denote "completion" (<em>i.e.</em>, its
- * {@link Step#isCompleted()} method returns <code>false</code>), then the
- * Step still has further work to do. The Workflow enters the {@link #WAITING}
- * state and stops further processing until a caller restarts it.</li>
+ * <li>If the Outcome denoted "completion" (<em>i.e.</em>, its {@link Step#isCompleted()} method returns <code>true</code>) then the Step
+ * is considered complete; the Workflow looks up the next Step by calling the current Step's {@link Step#getSuccessor(Outcome)} method. If
+ * <code>successor()</code> returns a non-<code>null</code> Step, the return value is marked as the current Step and added to the Workflow's
+ * Step history. If <code>successor()</code> returns <code>null</code>, then the Workflow has no more Steps and it enters the
+ * {@link #COMPLETED} state.</li>
+ * <li>If the Outcome did not denote "completion" (<em>i.e.</em>, its {@link Step#isCompleted()} method returns <code>false</code>), then
+ * the Step still has further work to do. The Workflow enters the {@link #WAITING} state and stops further processing until a caller
+ * restarts it.</li>
  * </ul>
  * </ul>
  * </p>
  * <p>
- * The currently executing Step can be obtained by {@link #getCurrentStep()}. The
- * actor for the current Step is returned by {@link #getCurrentActor()}.
+ * The currently executing Step can be obtained by {@link #getCurrentStep()}. The actor for the current Step is returned by
+ * {@link #getCurrentActor()}.
  * </p>
  * <p>
- * To provide flexibility for specific implementations, the Workflow class
- * provides two additional features that enable Workflow participants (<em>i.e.</em>,
- * Workflow subclasses and Step/Task/Decision subclasses) to share context and
- * state information. These two features are <em>named attributes</em> and
- * <em>message arguments</em>:
+ * To provide flexibility for specific implementations, the Workflow class provides two additional features that enable Workflow
+ * participants (<em>i.e.</em>, Workflow subclasses and Step/Task/Decision subclasses) to share context and state information. These two
+ * features are <em>named attributes</em> and <em>message arguments</em>:
  * </p>
  * <ul>
- * <li><strong>Named attributes</strong> are simple key-value pairs that
- * Workflow participants can get or set. Keys are Strings; values can be any
- * Object. Named attributes are set with {@link #setAttribute(String, Object)}
- * and retrieved with {@link #getAttribute(String)}.</li>
- * <li><strong>Message arguments</strong> are used in combination with
- * JSPWiki's {@link org.apache.wiki.i18n.InternationalizationManager} to
- * create language-independent user interface messages. The message argument
- * array is retrieved via {@link #getMessageArguments()}; the first two array
- * elements will always be these: a String representing work flow owner's name,
- * and a String representing the current actor's name. Workflow participants
- * can add to this array by invoking {@link #addMessageArgument(Serializable)}.</li>
+ * <li><strong>Named attributes</strong> are simple key-value pairs that Workflow participants can get or set. Keys are Strings; values
+ * can be any Object. Named attributes are set with {@link #setAttribute(String, Object)} and retrieved with {@link #getAttribute(String)}.</li>
+ * <li><strong>Message arguments</strong> are used in combination with JSPWiki's {@link org.apache.wiki.i18n.InternationalizationManager} to
+ * create language-independent user interface messages. The message argument array is retrieved via {@link #getMessageArguments()}; the
+ * first two array elements will always be these: a String representing work flow owner's name, and a String representing the current
+ * actor's name. Workflow participants can add to this array by invoking {@link #addMessageArgument(Serializable)}.</li>
  * </ul>
  * <h2>Example</h2>
  * <p>
- * Workflow Steps can be very powerful when linked together. JSPWiki provides
- * two abstract subclasses classes that you can use to build your own Workflows:
- * Tasks and Decisions. As noted, Tasks are Steps that execute without user
- * intervention, while Decisions require actors (<em>aka</em> Principals) to
- * take action. Decisions and Tasks can be mixed freely to produce some highly
- * elaborate branching structures.
+ * Workflow Steps can be very powerful when linked together. JSPWiki provides two abstract subclasses classes that you can use to build
+ * your own Workflows: Tasks and Decisions. As noted, Tasks are Steps that execute without user intervention, while Decisions require
+ * actors (<em>aka</em> Principals) to take action. Decisions and Tasks can be mixed freely to produce some highly elaborate branching
+ * structures.
  * </p>
  * <p>
- * Here is a simple case. For example, suppose you would like to create a
- * Workflow that (a) executes a initialization Task, (b) pauses to obtain an
- * approval Decision from a user in the Admin group, and if approved, (c)
- * executes a "finish" Task. Here's sample code that illustrates how to do it:
+ * Here is a simple case. For example, suppose you would like to create a Workflow that (a) executes a initialization Task, (b) pauses to
+ * obtain an approval Decision from a user in the Admin group, and if approved, (c) executes a "finish" Task. Here's sample code that
+ * illustrates how to do it:
  * </p>
  *
  * <pre>
  *    // Create workflow; owner is current user
- * 1  Workflow workflow = new Workflow(&quot;workflow.myworkflow&quot;, context.getCurrentUser());
+ * 1  Workflow workflow = new Workflow( &quot; workflow.myworkflow &quot;, context.getCurrentUser() );
  *
  *    // Create custom initialization task
- * 2  Step initTask = new InitTask(this);
+ * 2  Step initTask = new InitTask( this );
  *
  *    // Create finish task
- * 3  Step finishTask = new FinishTask(this);
+ * 3  Step finishTask = new FinishTask( this );
  *
  *    // Create an intermediate decision step
- * 4  Principal actor = new GroupPrincipal(&quot;Admin&quot;);
- * 5  Step decision = new SimpleDecision(this, &quot;decision.AdminDecision&quot;, actor);
+ * 4  Principal actor = new GroupPrincipal( &quot;Admin&quot; );
+ * 5  Step decision = new SimpleDecision( this, &quot;decision.AdminDecision&quot;, actor );
  *
  *    // Hook the steps together
- * 6  initTask.addSuccessor(Outcome.STEP_COMPLETE, decision);
- * 7  decision.addSuccessor(Outcome.DECISION_APPROVE, finishTask);
+ * 6  initTask.addSuccessor( Outcome.STEP_COMPLETE, decision );
+ * 7  decision.addSuccessor( Outcome.DECISION_APPROVE, finishTask );
  *
  *    // Set workflow's first step
- * 8  workflow.setFirstStep(initTask);
+ * 8  workflow.setFirstStep( initTask );
  * </pre>
  *
  * <p>
  * Some comments on the source code:
  * </p>
  * <ul>
- * <li>Line 1 instantiates the workflow with a sample message key and
- * designated owner Principal, in this case the current wiki user</li>
- * <li>Lines 2 and 3 instantiate the custom Task subclasses, which contain the
- * business logic</li>
- * <li>Line 4 creates the relevant GroupPrincipal for the <code>Admin</code>
- * group, who will be the actor in the Decision step</li>
- * <li>Line 5 creates the Decision step, passing the Workflow, sample message
- * key, and actor in the constructor</li>
- * <li>Line 6 specifies that if the InitTask's Outcome signifies "normal
- * completion" (STEP_COMPLETE), the SimpleDecision step should be invoked next</li>
- * <li>Line 7 specifies that if the actor (anyone possessing the
- * <code>Admin</code> GroupPrincipal) selects DECISION_APPROVE, the FinishTask
+ * <li>Line 1 instantiates the workflow with a sample message key and designated owner Principal, in this case the current wiki user</li>
+ * <li>Lines 2 and 3 instantiate the custom Task subclasses, which contain the business logic</li>
+ * <li>Line 4 creates the relevant GroupPrincipal for the <code>Admin</code> group, who will be the actor in the Decision step</li>
+ * <li>Line 5 creates the Decision step, passing the Workflow, sample message key, and actor in the constructor</li>
+ * <li>Line 6 specifies that if the InitTask's Outcome signifies "normal completion" (STEP_COMPLETE), the SimpleDecision step should be
+ * invoked next</li>
+ * <li>Line 7 specifies that if the actor (anyone possessing the <code>Admin</code> GroupPrincipal) selects DECISION_APPROVE, the FinishTask
  * step should be invoked</li>
- * <li>Line 8 adds the InitTask (and all of its successor Steps, nicely wired
- * together) to the workflow</li>
+ * <li>Line 8 adds the InitTask (and all of its successor Steps, nicely wired together) to the workflow</li>
  * </ul>
- *
  */
-public class Workflow implements Serializable
-{
+public class Workflow implements Serializable {
+
     private static final long serialVersionUID = 5228149040690660032L;
 
     /** Time value: the start or end time has not been set. */
@@ -218,10 +177,7 @@ public class Workflow implements Serializable
     /** State value: Workflow aborted before completion. */
     public static final int ABORTED = 40;
 
-    /**
-     * State value: Workflow paused, typically because a Step returned an
-     * Outcome that doesn't signify "completion."
-     */
+    /** State value: Workflow paused, typically because a Step returned an Outcome that doesn't signify "completion." */
     public static final int WAITING = 30;
 
     /** State value: Workflow started, and is running. */
@@ -231,7 +187,7 @@ public class Workflow implements Serializable
     public static final int CREATED = -2;
 
     /** Lazily-initialized attribute map. */
-    private Map<String, Object> m_attributes;
+    private Map< String, Object > m_attributes;
 
     /** The initial Step for this Workflow. */
     private Step m_firstStep;
@@ -239,7 +195,7 @@ public class Workflow implements Serializable
     /** Flag indicating whether the Workflow has started yet. */
     private boolean m_started;
 
-    private final LinkedList<Step> m_history;
+    private final LinkedList< Step > m_history;
 
     private int m_id;
 
@@ -256,62 +212,45 @@ public class Workflow implements Serializable
     private WorkflowManager m_manager;
 
     /**
-     * Constructs a new Workflow object with a supplied message key, owner
-     * Principal, and undefined unique identifier {@link #ID_NOT_SET}. Once
-     * instantiated the Workflow is considered to be in the {@link #CREATED}
-     * state; a caller must explicitly invoke the {@link #start()} method to
-     * begin processing.
+     * Constructs a new Workflow object with a supplied message key, owner Principal, and undefined unique identifier {@link #ID_NOT_SET}.
+     * Once instantiated the Workflow is considered to be in the {@link #CREATED} state; a caller must explicitly invoke the
+     * {@link #start()} method to begin processing.
      *
-     * @param messageKey
-     *            the message key used to construct a localized workflow name,
-     *            such as <code>workflow.saveWikiPage</code>
-     * @param owner
-     *            the Principal who owns the Workflow. Typically, this is the
-     *            user who created and submitted it
-     */
-    public Workflow(String messageKey, Principal owner)
-    {
-        super();
+     * @param messageKey the message key used to construct a localized workflow name, such as <code>workflow.saveWikiPage</code>
+     * @param owner the Principal who owns the Workflow. Typically, this is the user who created and submitted it
+     */
+    public Workflow( final String messageKey, final Principal owner ) {
         m_attributes = null;
         m_currentStep = null;
-        m_history = new LinkedList<Step>();
+        m_history = new LinkedList<>();
         m_id = ID_NOT_SET;
         m_key = messageKey;
         m_manager = null;
-        m_messageArgs = new ArrayList<Serializable>();
+        m_messageArgs = new ArrayList<>();
         m_owner = owner;
         m_started = false;
         m_state = CREATED;
     }
 
     /**
-     * Aborts the Workflow by setting the current Step's Outcome to
-     * {@link Outcome#STEP_ABORT}, and the Workflow's overall state to
-     * {@link #ABORTED}. It also appends the aborted Step into the workflow
-     * history, and sets the current step to <code>null</code>. If the Step
-     * is a Decision, it is removed from the DecisionQueue. This method
-     * can be called at any point in the lifecycle prior to completion, but it
-     * cannot be called twice. It finishes by calling the {@link #cleanup()}
-     * method to flush retained objects. If the Workflow had been previously
-     * aborted, this method throws an IllegalStateException.
+     * Aborts the Workflow by setting the current Step's Outcome to {@link Outcome#STEP_ABORT}, and the Workflow's overall state to
+     * {@link #ABORTED}. It also appends the aborted Step into the workflow history, and sets the current step to <code>null</code>.
+     * If the Step is a Decision, it is removed from the DecisionQueue. This method can be called at any point in the lifecycle prior
+     * to completion, but it cannot be called twice. It finishes by calling the {@link #cleanup()} method to flush retained objects.
+     * If the Workflow had been previously aborted, this method throws an IllegalStateException.
      */
-    public final synchronized void abort()
-    {
+    public final synchronized void abort() {
         // Check corner cases: previous abort or completion
-        if ( m_state == ABORTED )
-        {
+        if( m_state == ABORTED ) {
             throw new IllegalStateException( "The workflow has already been aborted." );
         }
-        if ( m_state == COMPLETED )
-        {
+        if( m_state == COMPLETED ) {
             throw new IllegalStateException( "The workflow has already completed." );
         }
 
-        if ( m_currentStep != null )
-        {
-            if ( m_manager != null && m_currentStep instanceof Decision )
-            {
-                Decision d = (Decision)m_currentStep;
+        if( m_currentStep != null ) {
+            if( m_manager != null && m_currentStep instanceof Decision ) {
+                final Decision d = ( Decision )m_currentStep;
                 m_manager.getDecisionQueue().remove( d );
             }
             m_currentStep.setOutcome( Outcome.STEP_ABORT );
@@ -323,18 +262,14 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Appends a message argument object to the array returned by
-     * {@link #getMessageArguments()}. The object <em>must</em> be an type
-     * used by the {@link java.text.MessageFormat}: String, Date, or Number
-     * (BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short).
-     * If the object is not of type String, Number or Date, this method throws
-     * an IllegalArgumentException.
+     * Appends a message argument object to the array returned by {@link #getMessageArguments()}. The object <em>must</em> be an type
+     * used by the {@link java.text.MessageFormat}: String, Date, or Number (BigDecimal, BigInteger, Byte, Double, Float, Integer, Long,
+     * Short). If the object is not of type String, Number or Date, this method throws an IllegalArgumentException.
+     *
      * @param obj the object to add
      */
-    public final void addMessageArgument( Serializable obj )
-    {
-        if ( obj instanceof String || obj instanceof Date || obj instanceof Number )
-        {
+    public final void addMessageArgument( final Serializable obj ) {
+        if( obj instanceof String || obj instanceof Date || obj instanceof Number ) {
             m_messageArgs.add( obj );
             return;
         }
@@ -347,18 +282,15 @@ public class Workflow implements Serializable
      *
      * @return the current actor
      */
-    public final synchronized Principal getCurrentActor()
-    {
-        if ( m_currentStep == null )
-        {
+    public final synchronized Principal getCurrentActor() {
+        if( m_currentStep == null ) {
             return null;
         }
         return m_currentStep.getActor();
     }
 
     /**
-     * Returns the workflow state: {@link #CREATED}, {@link #RUNNING},
-     * {@link #WAITING}, {@link #COMPLETED} or {@link #ABORTED}.
+     * Returns the workflow state: {@link #CREATED}, {@link #RUNNING}, {@link #WAITING}, {@link #COMPLETED} or {@link #ABORTED}.
      *
      * @return the workflow state
      */
@@ -368,8 +300,7 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Returns the current Step, or <code>null</code> if the workflow has not
-     * started or already completed.
+     * Returns the current Step, or <code>null</code> if the workflow has not started or already completed.
      *
      * @return the current step
      */
@@ -379,36 +310,29 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Retrieves a named Object associated with this Workflow. If the Workflow
-     * has completed or aborted, this method always returns <code>null</code>.
+     * Retrieves a named Object associated with this Workflow. If the Workflow has completed or aborted, this method always returns
+     * <code>null</code>.
      *
      * @param attr the name of the attribute
      * @return the value
      */
-    public final synchronized Object getAttribute( String attr )
-    {
-        if ( m_attributes == null )
-        {
+    public final synchronized Object getAttribute( final String attr ) {
+        if( m_attributes == null ) {
             return null;
         }
         return m_attributes.get( attr );
     }
 
     /**
-     * The end time for this Workflow, expressed as a system time number. This
-     * value is equal to the end-time value returned by the final Step's
-     * {@link Step#getEndTime()} method, if the workflow has completed.
-     * Otherwise, this method returns {@link #TIME_NOT_SET}.
+     * The end time for this Workflow, expressed as a system time number. This value is equal to the end-time value returned by the final
+     * Step's {@link Step#getEndTime()} method, if the workflow has completed. Otherwise, this method returns {@link #TIME_NOT_SET}.
      *
      * @return the end time
      */
-    public final Date getEndTime()
-    {
-        if ( isCompleted() )
-        {
-            Step last = m_history.getLast();
-            if ( last != null )
-            {
+    public final Date getEndTime() {
+        if( isCompleted() ) {
+            final Step last = m_history.getLast();
+            if( last != null ) {
                 return last.getEndTime();
             }
         }
@@ -416,8 +340,7 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Returns the unique identifier for this Workflow. If not set, this method
-     * returns ID_NOT_SET ({@value #ID_NOT_SET}).
+     * Returns the unique identifier for this Workflow. If not set, this method returns ID_NOT_SET ({@value #ID_NOT_SET}).
      *
      * @return the unique identifier
      */
@@ -428,8 +351,7 @@ public class Workflow implements Serializable
 
     /**
      * <p>
-     * Returns an array of message arguments, used by
-     * {@link java.text.MessageFormat} to create localized messages. The first
+     * Returns an array of message arguments, used by {@link java.text.MessageFormat} to create localized messages. The first
      * two array elements will always be these:
      * </p>
      * <ul>
@@ -439,20 +361,18 @@ public class Workflow implements Serializable
      * finished, the value of this argument will be a dash character (<code>-</code>)</li>
      * </ul>
      * <p>
-     * Workflow and Step subclasses are free to append items to this collection
-     * with {@link #addMessageArgument(Serializable)}.
+     * Workflow and Step subclasses are free to append items to this collection with {@link #addMessageArgument(Serializable)}.
      * </p>
      *
      * @return the array of message arguments
      */
-    public final Serializable[] getMessageArguments()
-    {
-        List<Serializable> args = new ArrayList<Serializable>();
+    public final Serializable[] getMessageArguments() {
+        final List< Serializable > args = new ArrayList<>();
         args.add( m_owner.getName() );
-        Principal actor = getCurrentActor();
+        final Principal actor = getCurrentActor();
         args.add( actor == null ? "-" : actor.getName() );
         args.addAll( m_messageArgs );
-        return args.toArray( new Serializable[args.size()] );
+        return args.toArray( new Serializable[ args.size() ] );
     }
 
     /**
@@ -467,8 +387,7 @@ public class Workflow implements Serializable
     }
 
     /**
-     * The owner Principal on whose behalf this Workflow is being executed; that
-     * is, the user who created the workflow.
+     * The owner Principal on whose behalf this Workflow is being executed; that is, the user who created the workflow.
      *
      * @return the name of the Principal who owns this workflow
      */
@@ -478,10 +397,9 @@ public class Workflow implements Serializable
     }
 
     /**
-     * The start time for this Workflow, expressed as a system time number. This
-     * value is equal to the start-time value returned by the first Step's
-     * {@link Step#getStartTime()} method, if the workflow has started already.
-     * Otherwise, this method returns {@link #TIME_NOT_SET}.
+     * The start time for this Workflow, expressed as a system time number. This value is equal to the start-time value returned by the
+     * first Step's {@link Step#getStartTime()} method, if the workflow has started already. Otherwise, this method returns
+     * {@link #TIME_NOT_SET}.
      *
      * @return the start time
      */
@@ -501,13 +419,10 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Returns a Step history for this Workflow as a List, chronologically, from the
-     * first Step to the currently executing one. The first step is the first
-     * item in the array. If the Workflow has not started, this method returns a
-     * zero-length array.
+     * Returns a Step history for this Workflow as a List, chronologically, from the first Step to the currently executing one. The first
+     * step is the first item in the array. If the Workflow has not started, this method returns a zero-length array.
      *
-     * @return an array of Steps representing those that have executed, or are
-     *         currently executing
+     * @return an array of Steps representing those that have executed, or are currently executing
      */
     public final List< Step > getHistory()
     {
@@ -525,25 +440,20 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Determines whether this Workflow is completed; that is, if it has no
-     * additional Steps to perform. If the last Step in the workflow is
+     * Determines whether this Workflow is completed; that is, if it has no additional Steps to perform. If the last Step in the workflow is
      * finished, this method will return <code>true</code>.
      *
-     * @return <code>true</code> if the workflow has been started but has no
-     *         more steps to perform; <code>false</code> if not.
+     * @return <code>true</code> if the workflow has been started but has no more steps to perform; <code>false</code> if not.
      */
-    public final synchronized boolean isCompleted()
-    {
+    public final synchronized boolean isCompleted() {
         // If current step is null, then we're done
         return m_started && m_state == COMPLETED;
     }
 
     /**
-     * Determines whether this Workflow has started; that is, its
-     * {@link #start()} method has been executed.
+     * Determines whether this Workflow has started; that is, its {@link #start()} method has been executed.
      *
-     * @return <code>true</code> if the workflow has been started;
-     *         <code>false</code> if not.
+     * @return <code>true</code> if the workflow has been started; <code>false</code> if not.
      */
     public final boolean isStarted()
     {
@@ -551,12 +461,10 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Convenience method that returns the predecessor of the current Step. This
-     * method simply examines the Workflow history and returns the
+     * Convenience method that returns the predecessor of the current Step. This method simply examines the Workflow history and returns the
      * second-to-last Step.
      *
-     * @return the predecessor, or <code>null</code> if the first Step is
-     *         currently executing
+     * @return the predecessor, or <code>null</code> if the first Step is currently executing
      */
     public final Step getPreviousStep()
     {
@@ -564,51 +472,39 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Restarts the Workflow from the {@link #WAITING} state and puts it into
-     * the {@link #RUNNING} state again. If the Workflow had not previously been
-     * paused, this method throws an IllegalStateException. If any of the
-     * Steps in this Workflow throw a WikiException, the Workflow will abort
-     * and propagate the exception to callers.
-     * @throws WikiException if the current task's {@link Task#execute()} method
-     * throws an exception
+     * Restarts the Workflow from the {@link #WAITING} state and puts it into the {@link #RUNNING} state again. If the Workflow had not
+     * previously been paused, this method throws an IllegalStateException. If any of the Steps in this Workflow throw a WikiException,
+     * the Workflow will abort and propagate the exception to callers.
+     *
+     * @throws WikiException if the current task's {@link Task#execute()} method throws an exception
      */
-    public final synchronized void restart() throws WikiException
-    {
-        if ( m_state != WAITING )
-        {
+    public final synchronized void restart() throws WikiException {
+        if( m_state != WAITING ) {
             throw new IllegalStateException( "Workflow is not paused; cannot restart." );
         }
         m_state = RUNNING;
         fireEvent( WorkflowEvent.RUNNING );
 
         // Process current step
-        try
-        {
+        try {
             processCurrentStep();
-        }
-        catch ( WikiException e )
-        {
+        } catch( final WikiException e ) {
             abort();
             throw e;
         }
     }
 
     /**
-     * Temporarily associates an object with this Workflow, as a named attribute, for the
-     * duration of workflow execution. The passed object can be anything required by
-     * an executing Step, although it <em>should</em> be serializable. Note that when the workflow
+     * Temporarily associates an object with this Workflow, as a named attribute, for the duration of workflow execution. The passed
+     * object can be anything required by an executing Step, although it <em>should</em> be serializable. Note that when the workflow
      * completes or aborts, all attributes will be cleared.
      *
-     * @param attr
-     *            the attribute name
-     * @param obj
-     *            the value
+     * @param attr the attribute name
+     * @param obj  the value
      */
-    public final synchronized void setAttribute(String attr, Object obj )
-    {
-        if ( m_attributes == null )
-        {
-            m_attributes = new HashMap<String, Object>();
+    public final synchronized void setAttribute( final String attr, final Object obj ) {
+        if( m_attributes == null ) {
+            m_attributes = new HashMap<>();
         }
         m_attributes.put( attr, obj );
     }
@@ -619,10 +515,9 @@ public class Workflow implements Serializable
      * marked as the "current" step or added to the Workflow history until the
      * {@link #start()} method is called.
      *
-     * @param step
-     *            the first step for the workflow
+     * @param step the first step for the workflow
      */
-    public final synchronized void setFirstStep(Step step)
+    public final synchronized void setFirstStep( final Step step )
     {
         m_firstStep = step;
     }
@@ -630,10 +525,9 @@ public class Workflow implements Serializable
     /**
      * Sets the unique identifier for this Workflow.
      *
-     * @param id
-     *            the unique identifier
+     * @param id the unique identifier
      */
-    public final synchronized void setId( int id )
+    public final synchronized void setId( final int id )
     {
         this.m_id = id;
     }
@@ -641,32 +535,25 @@ public class Workflow implements Serializable
     /**
      * Sets the WorkflowManager that contains this Workflow.
      *
-     * @param manager
-     *            the workflow manager
+     * @param manager the workflow manager
      */
-    public final synchronized void setWorkflowManager( WorkflowManager manager )
-    {
+    public final synchronized void setWorkflowManager( final WorkflowManager manager ) {
         m_manager = manager;
         addWikiEventListener( manager );
     }
 
     /**
-     * Starts the Workflow and sets the state to {@link #RUNNING}. If the
-     * Workflow has already been started (or previously aborted), this method
-     * returns an {@linkplain IllegalStateException}. If any of the
-     * Steps in this Workflow throw a WikiException, the Workflow will abort
-     * and propagate the exception to callers.
-     * @throws WikiException if the current Step's {@link Step#start()}
-     * method throws an exception of any kind
+     * Starts the Workflow and sets the state to {@link #RUNNING}. If the Workflow has already been started (or previously aborted), this
+     * method returns an {@linkplain IllegalStateException}. If any of the Steps in this Workflow throw a WikiException, the Workflow will
+     * abort and propagate the exception to callers.
+     *
+     * @throws WikiException if the current Step's {@link Step#start()} method throws an exception of any kind
      */
-    public final synchronized void start() throws WikiException
-    {
-        if ( m_state == ABORTED )
-        {
+    public final synchronized void start() throws WikiException {
+        if( m_state == ABORTED ) {
             throw new IllegalStateException( "Workflow cannot be started; it has already been aborted." );
         }
-        if ( m_started )
-        {
+        if( m_started ) {
             throw new IllegalStateException( "Workflow has already started." );
         }
         m_started = true;
@@ -678,27 +565,20 @@ public class Workflow implements Serializable
         m_history.add( m_currentStep );
 
         // Process current step
-        try
-        {
+        try {
             processCurrentStep();
-        }
-        catch ( WikiException e )
-        {
+        } catch( final WikiException e ) {
             abort();
             throw e;
         }
     }
 
     /**
-     * Sets the Workflow in the {@link #WAITING} state. If the Workflow is not
-     * running or has already been paused, this method throws an
-     * IllegalStateException. Once paused, the Workflow can be un-paused by
-     * executing the {@link #restart()} method.
+     * Sets the Workflow in the {@link #WAITING} state. If the Workflow is not running or has already been paused, this method throws an
+     * IllegalStateException. Once paused, the Workflow can be un-paused by executing the {@link #restart()} method.
      */
-    public final synchronized void waitstate()
-    {
-        if ( m_state != RUNNING )
-        {
+    public final synchronized void waitstate() {
+        if ( m_state != RUNNING ) {
             throw new IllegalStateException( "Workflow is not running; cannot pause." );
         }
         m_state = WAITING;
@@ -716,15 +596,11 @@ public class Workflow implements Serializable
     }
 
     /**
-     * Protected helper method that changes the Workflow's state to
-     * {@link #COMPLETED} and sets the current Step to <code>null</code>. It
-     * calls the {@link #cleanup()} method to flush retained objects.
-     * This method will no-op if it has previously been called.
+     * Protected helper method that changes the Workflow's state to {@link #COMPLETED} and sets the current Step to <code>null</code>. It
+     * calls the {@link #cleanup()} method to flush retained objects. This method will no-op if it has previously been called.
      */
-    protected final synchronized void complete()
-    {
-        if ( !isCompleted() )
-        {
+    protected final synchronized void complete() {
+        if( !isCompleted() ) {
             m_state = COMPLETED;
             fireEvent( WorkflowEvent.COMPLETED );
             cleanup();
@@ -734,67 +610,46 @@ public class Workflow implements Serializable
     /**
      * Protected method that returns the predecessor for a supplied Step.
      *
-     * @param step
-     *            the Step for which the predecessor is requested
-     * @return its predecessor, or <code>null</code> if the first Step was
-     *         supplied.
+     * @param step the Step for which the predecessor is requested
+     * @return its predecessor, or <code>null</code> if the first Step was supplied.
      */
-    protected final Step previousStep(Step step)
-    {
-        int index = m_history.indexOf( step );
+    protected final Step previousStep( final Step step ) {
+        final int index = m_history.indexOf( step );
         return index < 1 ? null : m_history.get( index - 1 );
     }
 
     /**
-     * Protected method that processes the current Step by calling
-     * {@link Step#execute()}. If the <code>execute</code> throws an
-     * exception, this method will propagate the exception immediately
-     * to callers without aborting.
-     * @throws WikiException if the current Step's {@link Step#start()}
-     * method throws an exception of any kind
+     * Protected method that processes the current Step by calling {@link Step#execute()}. If the <code>execute</code> throws an
+     * exception, this method will propagate the exception immediately to callers without aborting.
+     *
+     * @throws WikiException if the current Step's {@link Step#start()} method throws an exception of any kind
      */
-    protected final void processCurrentStep() throws WikiException
-    {
-        while ( m_currentStep != null )
-        {
-
+    protected final void processCurrentStep() throws WikiException {
+        while ( m_currentStep != null ) {
             // Start and execute the current step
-            if ( !m_currentStep.isStarted() )
-            {
+            if( !m_currentStep.isStarted() ) {
                 m_currentStep.start();
             }
-            try
-            {
-                Outcome result = m_currentStep.execute();
-                if ( Outcome.STEP_ABORT.equals( result ) )
-                {
-                    abort();
-                    break;
-                }
-
-                if ( !m_currentStep.isCompleted() )
-                {
-                    m_currentStep.setOutcome( result );
-                }
+            final Outcome result = m_currentStep.execute();
+            if( Outcome.STEP_ABORT.equals( result ) ) {
+                abort();
+                break;
             }
-            catch ( WikiException e )
-            {
-                throw e;
+
+            if( !m_currentStep.isCompleted() ) {
+                m_currentStep.setOutcome( result );
             }
 
-            // Get the execution Outcome; if not complete, pause workflow and
-            // exit
-            Outcome outcome = m_currentStep.getOutcome();
-            if ( !outcome.isCompletion() )
-            {
+            // Get the execution Outcome; if not complete, pause workflow and exit
+            final Outcome outcome = m_currentStep.getOutcome();
+            if ( !outcome.isCompletion() ) {
                 waitstate();
                 break;
             }
 
             // Get the next Step; if null, we're done
-            Step nextStep = m_currentStep.getSuccessor( outcome );
-            if ( nextStep == null )
-            {
+            final Step nextStep = m_currentStep.getSuccessor( outcome );
+            if ( nextStep == null ) {
                 complete();
                 break;
             }
@@ -809,26 +664,20 @@ public class Workflow implements Serializable
     // events processing .......................................................
 
     /**
-     * Registers a WikiEventListener with this instance. This is a convenience
-     * method.
+     * Registers a WikiEventListener with this instance. This is a convenience method.
      *
-     * @param listener
-     *            the event listener
+     * @param listener the event listener
      */
-    public final synchronized void addWikiEventListener( WikiEventListener listener )
-    {
+    public final synchronized void addWikiEventListener( final WikiEventListener listener ) {
         WikiEventManager.addWikiEventListener( this, listener );
     }
 
     /**
-     * Un-registers a WikiEventListener with this instance. This is a
-     * convenience method.
+     * Un-registers a WikiEventListener with this instance. This is a convenience method.
      *
-     * @param listener
-     *            the event listener
+     * @param listener the event listener
      */
-    public final synchronized void removeWikiEventListener( WikiEventListener listener )
-    {
+    public final synchronized void removeWikiEventListener( final WikiEventListener listener ) {
         WikiEventManager.removeWikiEventListener( this, listener );
     }
 
@@ -836,13 +685,10 @@ public class Workflow implements Serializable
      * Fires a WorkflowEvent of the provided type to all registered listeners.
      *
      * @see org.apache.wiki.event.WorkflowEvent
-     * @param type
-     *            the event type to be fired
+     * @param type the event type to be fired
      */
-    protected final void fireEvent( int type )
-    {
-        if ( WikiEventManager.isListening( this ) )
-        {
+    protected final void fireEvent( final int type ) {
+        if ( WikiEventManager.isListening( this ) ) {
             WikiEventManager.fireEvent( this, new WorkflowEvent( this, type ) );
         }
     }