Class 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.

  • Constructor Details

    • DefaultWorkflowManager

      Constructs a new WorkflowManager, with an empty workflow cache.
  • Method Details

    • getWorkflows

      public java.util.Set<Workflow> getWorkflows()
      Returns a collection of the currently active workflows.
      Specified by:
      getWorkflows in interface WorkflowManager
      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:
      getCompletedWorkflows in interface WorkflowManager
      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_PREFIX will 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 is jspwiki.approver.workflow.saveWikiPage=Admin, the Decision's message key is workflow.saveWikiPage. The Principal Admin will be resolved via AuthorizationManager.resolvePrincipal(String).
      Specified by:
      initialize in interface Initializable
      engine - Engine performing the initialization.
      props - Properties for setup.
    • requiresApproval

      public boolean requiresApproval​(java.lang.String messageKey)
      Returns true if a workflow matching a particular key contains an approval step.
      Specified by:
      requiresApproval in interface WorkflowManager
      messageKey - the name of the workflow; corresponds to the value returned by Workflow.getMessageKey().
      the result
    • getApprover

      public 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 GroupPrincipal Admin
      Specified by:
      getApprover in interface WorkflowManager
      messageKey - the Decision's message key
      the actor who approves Decisions
      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
      the wiki engine
    • getDecisionQueue

      Returns the DecisionQueue associated with this WorkflowManager
      Specified by:
      getDecisionQueue in interface WorkflowManager
      the decision queue
    • getOwnerWorkflows

      public java.util.List<Workflow> getOwnerWorkflows​(Session session)
      Returns the current workflows a wiki session owns. These are workflows whose Workflow.getOwner() method returns a Principal also possessed by the wiki session (see Session.getPrincipals()). If the wiki session is not authenticated, this method returns an empty Collection.
      Specified by:
      getOwnerWorkflows in interface WorkflowManager
      session - the wiki session
      the collection workflows the wiki session owns, which may be empty
    • actionPerformed

      public void actionPerformed​(WikiEvent event)
      Listens for WorkflowEvent objects emitted by Workflows. In particular, this method listens for WorkflowEvent.CREATED, WorkflowEvent.ABORTED, WorkflowEvent.COMPLETED and WorkflowEvent.DQ_REMOVAL events. 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 a Decision, is removed from the DecisionQueue.
      Specified by:
      actionPerformed in interface WikiEventListener
      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 its workflowManager and Id properties if not set.
      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.
      workflow - the workflow to remove
    • removeFromDecisionQueue

      protected void removeFromDecisionQueue​(Decision decision, Context context)
    • addToDecisionQueue

      protected void addToDecisionQueue​(Decision decision)