Package org.apache.wiki.workflow
Class DefaultWorkflowManager
- java.lang.Object
-
- org.apache.wiki.workflow.DefaultWorkflowManager
-
- All Implemented Interfaces:
java.util.EventListener,Initializable,WikiEventListener,WorkflowManager
public class DefaultWorkflowManager extends java.lang.Object implements WorkflowManager
Monitor class that tracks running Workflows. The WorkflowManager also keeps track of the names of users or groups expected to approve particular Workflows.
-
-
Field Summary
-
Fields inherited from interface org.apache.wiki.workflow.WorkflowManager
PROPERTY_APPROVER_PREFIX, WF_UP_CREATE_SAVE_APPROVER, WF_UP_CREATE_SAVE_ATTR_SAVED_PROFILE, WF_UP_CREATE_SAVE_DECISION_MESSAGE_KEY, WF_UP_CREATE_SAVE_FACT_PREFS_EMAIL, WF_UP_CREATE_SAVE_FACT_PREFS_FULL_NAME, WF_UP_CREATE_SAVE_FACT_PREFS_LOGIN_NAME, WF_UP_CREATE_SAVE_FACT_SUBMITTER, WF_WP_SAVE_APPROVER, WF_WP_SAVE_DECISION_MESSAGE_KEY, WF_WP_SAVE_FACT_CURRENT_TEXT, WF_WP_SAVE_FACT_DIFF_TEXT, WF_WP_SAVE_FACT_IS_AUTHENTICATED, WF_WP_SAVE_FACT_PAGE_NAME, WF_WP_SAVE_FACT_PROPOSED_TEXT, WF_WP_SAVE_REJECT_MESSAGE_KEY
-
-
Constructor Summary
Constructors Constructor Description DefaultWorkflowManager()Constructs a new WorkflowManager, with an empty workflow cache.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidactionPerformed(WikiEvent event)Listens forWorkflowEventobjects emitted by Workflows.protected voidadd(Workflow workflow)Protected helper method that adds a newly created Workflow to the cache, and sets itsworkflowManagerandIdproperties if not set.protected voidaddToDecisionQueue(Decision decision)java.security.PrincipalgetApprover(java.lang.String messageKey)Looks up and resolves the actor who approves a Decision for a particular Workflow, based on the Workflow's message key.java.util.List<Workflow>getCompletedWorkflows()Returns a collection of finished workflows; that is, those that have aborted or completed.DecisionQueuegetDecisionQueue()Returns the DecisionQueue associated with this WorkflowManagerprotected EnginegetEngine()Protected helper method that returns the associated Enginejava.util.List<Workflow>getOwnerWorkflows(Session session)Returns the current workflows a wiki session owns.java.util.Set<Workflow>getWorkflows()Returns a collection of the currently active workflows.voidinitialize(Engine engine, java.util.Properties props)Initializes this Engine component.protected voidremove(Workflow workflow)Protected helper method that removes a specified Workflow from the cache, and moves it to the workflow history list.protected voidremoveFromDecisionQueue(Decision decision, Context context)booleanrequiresApproval(java.lang.String messageKey)Returnstrueif a workflow matching a particular key contains an approval step.
-
-
-
Constructor Detail
-
DefaultWorkflowManager
public DefaultWorkflowManager()
Constructs a new WorkflowManager, with an empty workflow cache.
-
-
Method Detail
-
getWorkflows
public java.util.Set<Workflow> getWorkflows()
Returns a collection of the currently active workflows.- Specified by:
getWorkflowsin interfaceWorkflowManager- Returns:
- the current workflows
-
getCompletedWorkflows
public java.util.List<Workflow> getCompletedWorkflows()
Returns a collection of finished workflows; that is, those that have aborted or completed.- Specified by:
getCompletedWorkflowsin interfaceWorkflowManager- Returns:
- the finished workflows
-
initialize
public void initialize(Engine engine, java.util.Properties props)
Initializes this Engine component. Note that the engine is not fully initialized at this point, so don't do anything fancy here - use lazy init, if you have to.
Any properties that begin with
WorkflowManager.PROPERTY_APPROVER_PREFIXwill be assumed to be Decisions that require approval. For a given property key, everything after the prefix denotes the Decision's message key. The property value indicates the Principal (Role, GroupPrincipal, WikiPrincipal) that must approve the Decision. For example, if the property key/value pair isjspwiki.approver.workflow.saveWikiPage=Admin, the Decision's message key isworkflow.saveWikiPage. The PrincipalAdminwill be resolved viaAuthorizationManager.resolvePrincipal(String).- Specified by:
initializein interfaceInitializable- Parameters:
engine- Engine performing the initialization.props- Properties for setup.
-
requiresApproval
public boolean requiresApproval(java.lang.String messageKey)
Returnstrueif a workflow matching a particular key contains an approval step.- Specified by:
requiresApprovalin interfaceWorkflowManager- Parameters:
messageKey- the name of the workflow; corresponds to the value returned byWorkflow.getMessageKey().- Returns:
- the result
-
getApprover
public java.security.Principal getApprover(java.lang.String messageKey) throws WikiException
Looks up and resolves the actor who approves a Decision for a particular Workflow, based on the Workflow's message key. If not found, or if Principal is Unresolved, throws WikiException. This particular implementation always returns the GroupPrincipalAdmin- Specified by:
getApproverin interfaceWorkflowManager- Parameters:
messageKey- the Decision's message key- Returns:
- the actor who approves Decisions
- Throws:
WikiException- if the message key was not found, or the Principal value corresponding to the key could not be resolved
-
getEngine
protected Engine getEngine()
Protected helper method that returns the associated Engine- Returns:
- the wiki engine
-
getDecisionQueue
public DecisionQueue getDecisionQueue()
Returns the DecisionQueue associated with this WorkflowManager- Specified by:
getDecisionQueuein interfaceWorkflowManager- Returns:
- the decision queue
-
getOwnerWorkflows
public java.util.List<Workflow> getOwnerWorkflows(Session session)
Returns the current workflows a wiki session owns. These are workflows whoseWorkflow.getOwner()method returns a Principal also possessed by the wiki session (seeSession.getPrincipals()). If the wiki session is not authenticated, this method returns an empty Collection.- Specified by:
getOwnerWorkflowsin interfaceWorkflowManager- Parameters:
session- the wiki session- Returns:
- the collection workflows the wiki session owns, which may be empty
-
actionPerformed
public void actionPerformed(WikiEvent event)
Listens forWorkflowEventobjects emitted by Workflows. In particular, this method listens forWorkflowEvent.CREATED,WorkflowEvent.ABORTED,WorkflowEvent.COMPLETEDandWorkflowEvent.DQ_REMOVALevents. If a workflow is created, it is automatically added to the cache. If one is aborted or completed, it is automatically removed. If a removal from decision queue is issued, the current step from workflow, which is assumed to be aDecision, is removed from theDecisionQueue.- Specified by:
actionPerformedin interfaceWikiEventListener- Parameters:
event- the event passed to this listener
-
add
protected void add(Workflow workflow)
Protected helper method that adds a newly created Workflow to the cache, and sets itsworkflowManagerandIdproperties if not set.- Parameters:
workflow- the workflow to add
-
remove
protected void remove(Workflow workflow)
Protected helper method that removes a specified Workflow from the cache, and moves it to the workflow history list. This method defensively checks to see if the workflow has not yet been removed.- Parameters:
workflow- the workflow to remove
-
removeFromDecisionQueue
protected void removeFromDecisionQueue(Decision decision, Context context)
-
addToDecisionQueue
protected void addToDecisionQueue(Decision decision)
-
-