public abstract class Decision extends AbstractStep
AbstractStep subclass that asks an actor Principal to choose an Outcome on
behalf of an owner (also a Principal). The actor "makes the decision" by
calling the decide(Outcome)
method. When this method is called, it
will set the Decision's Outcome to the one supplied. If the parent Workflow
is in the Workflow.WAITING
state, it will be re-started. Any checked
WikiExceptions thrown by the workflow after re-start will be re-thrown to
callers.
When a Decision completes, its AbstractStep.isCompleted()
method returns
true
. It also tells its parent WorkflowManager to remove it
from the list of pending tasks by calling
DecisionQueue.remove(Decision)
.
To enable actors to choose an appropriate Outcome, Decisions can store
arbitrary key-value pairs called "facts." These facts can be presented by the
user interface to show details the actor needs to know about. Facts are added
by calling classes to the Decision, in order of expected presentation, by the
addFact(Fact)
method. They can be retrieved, in order, via
getFacts()
.
Constructor and Description |
---|
Decision(Workflow workflow,
String messageKey,
Principal actor,
Outcome defaultOutcome)
Constructs a new Decision for a required "actor" Principal, having a
default Outcome.
|
Modifier and Type | Method and Description |
---|---|
void |
addFact(Fact fact)
Appends a Fact to the list of Facts associated with this Decision.
|
void |
decide(Outcome outcome)
Sets this Decision's outcome, and restarts the parent Workflow if it is
in the
Workflow.WAITING state and this Decision is its currently
active Step. |
Outcome |
execute()
Default implementation that always returns
Outcome.STEP_CONTINUE
if the current Outcome isn't a completion (which will be true if the
decide(Outcome) method hasn't been executed yet. |
Principal |
getActor()
The Principal responsible for completing this Step, such as a system user
or actor assigned to a Decision.
|
Outcome |
getDefaultOutcome()
Returns the default or suggested outcome, which must be one of those
returned by
AbstractStep.getAvailableOutcomes() . |
List<Fact> |
getFacts()
Returns the Facts associated with this Decision, in the order in which
they were added.
|
int |
getId()
Returns the unique identifier for this Decision.
|
boolean |
isReassignable()
Returns
true if the Decision can be reassigned to another
actor. |
void |
reassign(Principal actor)
Reassigns the Decision to a new actor (that is, provide an outcome).
|
void |
setId(int id)
Sets the unique identfier for this Decision.
|
addError, addSuccessor, getAvailableOutcomes, getEndTime, getErrors, getMessageArguments, getMessageKey, getOutcome, getOwner, getStartTime, getSuccessor, getWorkflow, isCompleted, isStarted, setOutcome, setWorkflow, start
public Decision(Workflow workflow, String messageKey, Principal actor, Outcome defaultOutcome)
workflow
- the parent Workflow objectmessageKey
- the i18n message key that represents the message the
actor will seeactor
- the Principal (e.g., a WikiPrincipal, Role,
GroupPrincipal) who is required to select an appropriate
OutcomedefaultOutcome
- the Outcome that the user interface will recommend
as the default choicepublic final void addFact(Fact fact)
fact
- the new fact to addpublic void decide(Outcome outcome) throws WikiException
Sets this Decision's outcome, and restarts the parent Workflow if it is
in the Workflow.WAITING
state and this Decision is its currently
active Step. Any checked WikiExceptions thrown by the workflow after
re-start will be re-thrown to callers.
This method cannot be invoked if the Decision is not the current Workflow
step; all other invocations will throw an IllegalStateException. If the
Outcome supplied to this method is one one of the Outcomes returned by
AbstractStep.getAvailableOutcomes()
, an IllegalArgumentException will be
thrown.
outcome
- the Outcome of the DecisionWikiException
- if the act of restarting the Workflow throws an
exceptionpublic Outcome execute() throws WikiException
Outcome.STEP_CONTINUE
if the current Outcome isn't a completion (which will be true if the
decide(Outcome)
method hasn't been executed yet. This method
will also add the Decision to the associated DecisionQueue.execute
in interface Step
execute
in class AbstractStep
WikiException
- neverpublic final Principal getActor()
getActor
in interface Step
getActor
in class AbstractStep
public Outcome getDefaultOutcome()
AbstractStep.getAvailableOutcomes()
. This method is guaranteed
to return a non-null
Outcome.public final List<Fact> getFacts()
public final int getId()
public boolean isReassignable()
true
if the Decision can be reassigned to another
actor. This implementation always returns true
.public final void reassign(Principal actor)
actor
- the actor to reassign the Decision topublic final void setId(int id)
id
- the identifierCopyright © 2001-2019 The Apache Software Foundation. All rights reserved.