Class AbstractStep
- java.lang.Object
-
- org.apache.wiki.workflow.AbstractStep
-
- All Implemented Interfaces:
java.io.Serializable
,Step
public abstract class AbstractStep extends java.lang.Object implements Step
Abstract superclass that provides a complete implementation of most Step methods; subclasses need only implementexecute(Context)
andgetActor()
.- Since:
- 2.5
- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from interface org.apache.wiki.workflow.Step
TIME_NOT_SET
-
-
Constructor Summary
Constructors Modifier Constructor Description AbstractStep(int workflowId, java.util.Map<java.lang.String,java.io.Serializable> workflowContext, java.lang.String messageKey)
Constructs a new Step belonging to a specified Workflow and having a specified message key.protected
AbstractStep(java.lang.String messageKey)
Protected constructor that creates a new Step with a specified message key.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected void
addError(java.lang.String message)
Protected helper method that adds a String representing an error message to the Step's cached errors list.void
addSuccessor(Outcome outcome, Step step)
Adds a successor Step to this one, which will be triggered by a supplied Outcome.abstract Outcome
execute(Context ctx)
Executes the processing for this Step and returns an Outcome indicating if it succeeded (Outcome.STEP_COMPLETE
orOutcome.STEP_ABORT
).abstract java.security.Principal
getActor()
The Principal responsible for completing this Step, such as a system user or actor assigned to a Decision.java.util.Collection<Outcome>
getAvailableOutcomes()
Returns a Collection of available outcomes, such as "approve", "deny" or "reassign", in the order in which they were added viaStep.addSuccessor(Outcome, Step)
.java.util.Date
getEndTime()
The end time for this Step.java.util.List<java.lang.String>
getErrors()
Returns a List of error strings generated by this Step.java.lang.String
getMessageKey()
Message key for human-friendly name of this Step, including any parameter substitutions.Outcome
getOutcome()
Returns the Outcome of this Step's processing; by default,Outcome.STEP_CONTINUE
.java.util.Date
getStartTime()
The start time for this Step.Step
getSuccessor(Outcome outcome)
Identifies the next Step for a particular Outcome; if there is no next Step for this Outcome, this method returnsnull
.java.util.Map<java.lang.String,java.io.Serializable>
getWorkflowContext()
int
getWorkflowId()
boolean
isCompleted()
Determines whether the Step is completed; if not, it is by definition awaiting action by the owner or in process.boolean
isStarted()
Determines whether the Step has started.void
setOutcome(Outcome outcome)
Sets the current Outcome for the step.void
setWorkflow(int workflowId, java.util.Map<java.lang.String,java.io.Serializable> workflowContext)
method that sets the parent Workflow id and context post-construction.void
start()
Starts the Step, and sets the start time to the moment when this method is first invoked.
-
-
-
Constructor Detail
-
AbstractStep
protected AbstractStep(java.lang.String messageKey)
Protected constructor that creates a new Step with a specified message key. After construction, the methodsetWorkflow(int, Map)
should be called.- Parameters:
messageKey
- the Step's message key, such asdecision.editPageApproval
. By convention, the message prefix should be a lower-case version of the Step's type, plus a period (e.g.,task.
anddecision.
).
-
AbstractStep
public AbstractStep(int workflowId, java.util.Map<java.lang.String,java.io.Serializable> workflowContext, java.lang.String messageKey)
Constructs a new Step belonging to a specified Workflow and having a specified message key.- Parameters:
workflowId
- the parent workflow id to setworkflowContext
- the parent workflow context to setmessageKey
- the Step's message key, such asdecision.editPageApproval
. By convention, the message prefix should be a lower-case version of the Step's type, plus a period (e.g.,task.
anddecision.
).
-
-
Method Detail
-
addSuccessor
public final void addSuccessor(Outcome outcome, Step step)
Adds a successor Step to this one, which will be triggered by a supplied Outcome. Implementations should respect the order in which Outcomes are added;Step.getAvailableOutcomes()
should return them in the same order they were added.- Specified by:
addSuccessor
in interfaceStep
- Parameters:
outcome
- the Outcome triggering a particular successor Stepstep
- the Step to associated with this Outcomes (null
denotes no Steps)
-
getAvailableOutcomes
public final java.util.Collection<Outcome> getAvailableOutcomes()
Returns a Collection of available outcomes, such as "approve", "deny" or "reassign", in the order in which they were added viaStep.addSuccessor(Outcome, Step)
. Concrete implementations should always return a defensive copy of the outcomes, not the original backing collection.- Specified by:
getAvailableOutcomes
in interfaceStep
- Returns:
- the set of outcomes
-
getErrors
public final java.util.List<java.lang.String> getErrors()
Returns a List of error strings generated by this Step. If this Step generated no errors, this method returns a zero-length array.
-
execute
public abstract Outcome execute(Context ctx) throws WikiException
Executes the processing for this Step and returns an Outcome indicating if it succeeded (
Outcome.STEP_COMPLETE
orOutcome.STEP_ABORT
). Processing instructions can do just about anything, such as executing custom business logic or changing the Step's final outcome viaStep.setOutcome(Outcome)
. A return value ofSTEP_COMPLETE
indicates that the instructions executed completely, without errors;STEP_ABORT
indicates that the Step and its parent Workflow should be aborted (that is, fail silently without error). If the execution step encounters any errors, it should throw a WikiException or a subclass.Note that successful execution of this methods does not necessarily mean that the Step is considered "complete"; rather, it just means that it has executed. Therefore, it is possible that
execute
could run multiple times.- Specified by:
execute
in interfaceStep
- Parameters:
ctx
- executing wiki context.- Returns:
- the result of the Step, expressed as an Outcome
- Throws:
WikiException
- if the step encounters errors while executing
-
getActor
public abstract java.security.Principal getActor()
The Principal responsible for completing this Step, such as a system user or actor assigned to a Decision.
-
getEndTime
public final java.util.Date getEndTime()
The end time for this Step. This value should be set when the step completes. ReturnsStep.TIME_NOT_SET
if not completed yet.- Specified by:
getEndTime
in interfaceStep
- Returns:
- the end time
-
getMessageKey
public final java.lang.String getMessageKey()
Message key for human-friendly name of this Step, including any parameter substitutions. By convention, the message prefix should be a lower-case version of the Step's type, plus a period (e.g.,task.
anddecision.
).- Specified by:
getMessageKey
in interfaceStep
- Returns:
- the message key for this Step.
-
getOutcome
public final Outcome getOutcome()
Returns the Outcome of this Step's processing; by default,Outcome.STEP_CONTINUE
.- Specified by:
getOutcome
in interfaceStep
- Returns:
- the outcome
-
getStartTime
public final java.util.Date getStartTime()
The start time for this Step. ReturnsStep.TIME_NOT_SET
if not started yet.- Specified by:
getStartTime
in interfaceStep
- Returns:
- the start time
-
isCompleted
public final boolean isCompleted()
Determines whether the Step is completed; if not, it is by definition awaiting action by the owner or in process. If a Step has completed, it must also return a non-null
result forStep.getOutcome()
.- Specified by:
isCompleted
in interfaceStep
- Returns:
true
if the Step has completed;false
if not.
-
isStarted
public final boolean isStarted()
Determines whether the Step has started.
-
setOutcome
public final void setOutcome(Outcome outcome)
Sets the current Outcome for the step. If the Outcome is a "completion" Outcome, it should also sets the completion time and mark the Step as complete. Once a Step has been marked complete, this method cannot be called again. If the supplied Outcome is not in the set returned byStep.getAvailableOutcomes()
, or is notOutcome.STEP_CONTINUE
orOutcome.STEP_ABORT
, this method returns an IllegalArgumentException. If the caller attempts to set an Outcome and the Step has already completed, this method throws an IllegalStateException.- Specified by:
setOutcome
in interfaceStep
- Parameters:
outcome
- whether the step should be considered completed
-
start
public final void start() throws WikiException
Starts the Step, and sets the start time to the moment when this method is first invoked. If this Step has already been started, this method throws an IllegalStateException. If the Step cannot be started because the underlying implementation encounters an error, it the implementation should throw a WikiException.- Specified by:
start
in interfaceStep
- Throws:
WikiException
- if the step encounters errors while starting
-
getSuccessor
public final Step getSuccessor(Outcome outcome)
Identifies the next Step for a particular Outcome; if there is no next Step for this Outcome, this method returnsnull
.- Specified by:
getSuccessor
in interfaceStep
- Parameters:
outcome
- the outcome- Returns:
- the next step
-
setWorkflow
public final void setWorkflow(int workflowId, java.util.Map<java.lang.String,java.io.Serializable> workflowContext)
method that sets the parent Workflow id and context post-construction.- Specified by:
setWorkflow
in interfaceStep
- Parameters:
workflowId
- the parent workflow id to setworkflowContext
- the parent workflow context to set
-
getWorkflowId
public int getWorkflowId()
-
getWorkflowContext
public java.util.Map<java.lang.String,java.io.Serializable> getWorkflowContext()
-
addError
protected final void addError(java.lang.String message)
Protected helper method that adds a String representing an error message to the Step's cached errors list.- Parameters:
message
- the error message
-
-