Interface WorkflowManager

All Known Implementing Classes:
OSWorkflowManager

@PublicApi public interface WorkflowManager
The WorkflowManager is used to interface with the workflow implementation
  • Method Details

    • getWorkflows

      Collection<JiraWorkflow> getWorkflows()
      Retrieve all of the workflows in the system
      Returns:
      A Collection of JiraWorkflow objects.
    • getWorkflowsIncludingDrafts

      List<JiraWorkflow> getWorkflowsIncludingDrafts()
      Retrieve all of the workflows in the system including drafts. We return a list as we want to keep workflows and associated drafts are adjacent.
      Returns:
      A List of JiraWorkflow objects.
    • isActive

      boolean isActive(JiraWorkflow workflow) throws WorkflowException
      Determine whether or not a given workflow is active in the system.

      Active workflows are those currently assigned to schemes and associated with projects - they cannot be edited but can be used.

      Parameters:
      workflow - the JiraWorkflow to check
      Returns:
      true if the given workflow is active
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • isSystemWorkflow

      boolean isSystemWorkflow(JiraWorkflow workflow) throws WorkflowException
      Determine whether or not a given workflow is a system workflow.

      Check for a system or XML based workflow - can not be edited.

      Parameters:
      workflow - the JiraWorkflow to check
      Returns:
      true if the given workflow is a system workflow
      Throws:
      WorkflowException - maybe - but it doesn't look like it?
    • getActiveWorkflows

      Collection<JiraWorkflow> getActiveWorkflows() throws WorkflowException
      Retrieve all currently active workflows.
      Returns:
      Collection of JiraWorkflow objects.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getWorkflow

      JiraWorkflow getWorkflow(String name)
      Retrieve a single workflow by name. The returned JiraWorkflow contains a descriptor that by default isn't mutable.

      If you need to edit a workflow, please see getWorkflowClone(String).

      Parameters:
      name - The workflow name
      Returns:
      A JiraWorkflow that wraps an Immutable WorkflowDescriptor or null
      See Also:
    • getWorkflowClone

      JiraWorkflow getWorkflowClone(String name)
      This method returns a JiraWorkflow, that contains a WorkflowDescriptor that is mutable. This method should be called, if you require to edit the workflow.

      If you only need to view a workflow, please use getWorkflow(String) as it will provide better performance. Cloning a workflow is expensive, as it requires de-constructing and re-constructing the underlying WorkflowDescriptor from XML.

      Parameters:
      name - The workflow name
      Returns:
      A JiraWorkflow or null if it doesn't exist.
      See Also:
    • getDraftWorkflow

      JiraWorkflow getDraftWorkflow(String parentWorkflowName) throws IllegalArgumentException
      Retrieve a single draft workflow by name. If there is not an draft workflow associated with the name this will return null.
      Parameters:
      parentWorkflowName - is the name of the Saved workflow which identifies then paritally edited draft workflow to retrieve.
      Returns:
      a JiraWorkflow that represents an draft edited workflow.
      Throws:
      IllegalArgumentException - if no parentWorkflow with the name provided can be found.
      Since:
      v3.13
    • createDraftWorkflow

      JiraWorkflow createDraftWorkflow(String username, String parentWorkflowName) throws IllegalStateException, IllegalArgumentException
      This will create an draft workflow of the named active workflow. This draft workflow can be used to edit active workflows without overwriting the active workflow immediately.
      This method will not allow you to create an draft workflow if the parent workflow is not active, the method will throw an IllegalStateException in this case.
      Parameters:
      parentWorkflowName - identifies the parent workflow that should be used as the template for creating the draft workflow.
      username - identifies the user performing the action so that we can keep an audit trail of who has last saved the workflow. Empty string for anonymous user. If null an IllegalArgumentException will be thrown
      Returns:
      An instance of JiraWorkflow that represents a copy of the parent that can be edited without overwriting the active workflow immediately.
      Throws:
      IllegalStateException - thrown if the parentWorkflow is not Active or the draft already exists
      IllegalArgumentException - If the username is null
      Since:
      v3.13
    • createDraftWorkflow

      JiraWorkflow createDraftWorkflow(ApplicationUser user, String parentWorkflowName) throws IllegalStateException, IllegalArgumentException
      This will create an draft workflow of the named active workflow. This draft workflow can be used to edit active workflows without overwriting the active workflow immediately.
      This method will not allow you to create an draft workflow if the parent workflow is not active, the method will throw an IllegalStateException in this case.
      Parameters:
      parentWorkflowName - identifies the parent workflow that should be used as the template for creating the draft workflow.
      user - identifies the user performing the action so that we can keep an audit trail of who has last saved the workflow. Empty string for anonymous user. If null an IllegalArgumentException will be thrown
      Returns:
      An instance of JiraWorkflow that represents a copy of the parent that can be edited without overwriting the active workflow immediately.
      Throws:
      IllegalStateException - thrown if the parentWorkflow is not Active or the draft already exists
      IllegalArgumentException - If the username is null
      Since:
      v3.13
    • deleteDraftWorkflow

      boolean deleteDraftWorkflow(String parentWorkflowName) throws IllegalArgumentException
      Deletes all draft workflows (there should every be only one) for a given parent workflow.
      Parameters:
      parentWorkflowName - The parentworkflow for which the draft workflow needs to be deleted.
      Returns:
      true if a draft workflow as deleted, false otherwise.
      Throws:
      IllegalArgumentException - if the parentWorkflowName is null
      Since:
      v3.13
    • getWorkflow

      JiraWorkflow getWorkflow(org.ofbiz.core.entity.GenericValue issue) throws WorkflowException
      Deprecated.
      Retrieve the workflow for a given issue.
      Parameters:
      issue - the Issue
      Returns:
      the workflow for the given issue.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getWorkflow

      JiraWorkflow getWorkflow(Issue issue) throws WorkflowException
      Retrieve the workflow for a given issue.
      Parameters:
      issue - the Issue
      Returns:
      the workflow for the given issue.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getWorkflow

      JiraWorkflow getWorkflow(Long projectId, String issueTypeId) throws WorkflowException
      Retrieve the workflow for a given project - issue type pair.
      Parameters:
      projectId - the Project
      issueTypeId - the IssueType ID
      Returns:
      the workflow for the given project - issue type pair.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getWorkflowFromScheme

      JiraWorkflow getWorkflowFromScheme(org.ofbiz.core.entity.GenericValue scheme, String issueTypeId) throws WorkflowException
      Return the workflow in a particular scheme for a given issue type.
      Parameters:
      scheme - the Scheme
      issueTypeId - the IssueType ID
      Returns:
      the workflow for the issue type in the scheme.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getWorkflowFromScheme

      JiraWorkflow getWorkflowFromScheme(WorkflowScheme scheme, String issueTypeId) throws WorkflowException
      Return the workflow in a particular scheme for a given issue type.
      Parameters:
      scheme - the Scheme
      issueTypeId - the IssueType ID
      Returns:
      the workflow for the issue type in the scheme.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getWorkflowsFromScheme

      Collection<JiraWorkflow> getWorkflowsFromScheme(org.ofbiz.core.entity.GenericValue workflowScheme) throws WorkflowException
      Returns all workflows for a given scheme.
      Parameters:
      workflowScheme - the Workflow Scheme.
      Returns:
      Collection of workflow schemes, empty collection if none exists.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getWorkflowsFromScheme

      Iterable<JiraWorkflow> getWorkflowsFromScheme(Scheme workflowScheme) throws WorkflowException
      Returns all workflows for a given scheme.
      Parameters:
      workflowScheme - the Workflow Scheme.
      Returns:
      Collection of workflow schemes, empty collection if none exists.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • getDefaultWorkflow

      JiraWorkflow getDefaultWorkflow() throws WorkflowException
      Throws:
      WorkflowException
    • createIssue

      org.ofbiz.core.entity.GenericValue createIssue(String remoteUserName, Map<String,Object> fields) throws WorkflowException
      Create an issue in the database.
      Parameters:
      remoteUserName - Issue creator
      fields - Map of fields. The key is the name of the field, and the type of the value depends on the key. Must include a key "issue", which contains MutableIssue object (holding values, not yet persisted to disk). May include other fields (eg "pkey"->String key of project, "originalissueobject"->Issue object) passed onto the workflow engine.
      Returns:
      The created issue GenericValue
      Throws:
      WorkflowException - If any errors occur while trying to create the issue.
    • removeWorkflowEntries

      void removeWorkflowEntries(org.ofbiz.core.entity.GenericValue issue)
    • doWorkflowAction

      void doWorkflowAction(WorkflowProgressAware from)
    • getStore

      com.opensymphony.workflow.spi.WorkflowStore getStore() throws com.opensymphony.workflow.StoreException
      Throws:
      com.opensymphony.workflow.StoreException
    • createWorkflow

      void createWorkflow(String username, JiraWorkflow workflow) throws WorkflowException
      Parameters:
      username -
      workflow -
      Throws:
      WorkflowException
    • createWorkflow

      void createWorkflow(ApplicationUser user, JiraWorkflow workflow) throws WorkflowException
      Parameters:
      user -
      workflow -
      Throws:
      WorkflowException
    • saveWorkflowWithoutAudit

      void saveWorkflowWithoutAudit(JiraWorkflow workflow) throws WorkflowException
      This method will save the workflow and it will not affect the updatedDate and updatedAuthorName meta attributes of the workflow. This should only ever be invoked by system operations such as upgrade tasks. All other saves should use the method updateWorkflow(String, JiraWorkflow)
      Parameters:
      workflow - the workflow to save.
      Throws:
      WorkflowException - RuntimeException wrapper for any errors.
    • deleteWorkflow

      void deleteWorkflow(JiraWorkflow workflow) throws WorkflowException
      Throws:
      WorkflowException
    • getActionDescriptor

      com.opensymphony.workflow.loader.ActionDescriptor getActionDescriptor(WorkflowProgressAware workflowProgressAware) throws Exception
      Throws:
      Exception
    • migrateIssueToWorkflow

      void migrateIssueToWorkflow(MutableIssue issue, JiraWorkflow newWorkflow, Status status) throws WorkflowException
      Migrates given issue to new workflow and sets new status on it.
      Parameters:
      issue - issue to migrate
      newWorkflow - new workflow
      status - new status
      Throws:
      WorkflowException - if migration fails
    • migrateIssueToWorkflow

      void migrateIssueToWorkflow(org.ofbiz.core.entity.GenericValue issue, JiraWorkflow newWorkflow, org.ofbiz.core.entity.GenericValue status) throws WorkflowException
      Migrates given issue to new workflow and sets new status on it.
      Parameters:
      issue - issue to migrate
      newWorkflow - new workflow
      status - new status
      Throws:
      WorkflowException - if migration fails
    • migrateIssueToWorkflowNoReindex

      boolean migrateIssueToWorkflowNoReindex(org.ofbiz.core.entity.GenericValue issue, JiraWorkflow newWorkflow, org.ofbiz.core.entity.GenericValue status) throws WorkflowException
      Migrates given issue to new workflow and sets new status on it. It returns true iff the issue that was migrated needs a reindex. The passed issue is not reindexed even if necessary.
      Parameters:
      issue - issue to migrate
      newWorkflow - new workflow
      status - new status
      Returns:
      true if the issue
      Throws:
      WorkflowException - if migration fails
    • makeWorkflow

      com.opensymphony.workflow.Workflow makeWorkflow(String userName)
      Deprecated.
      Prepares Workflow object with given username as caller
      Parameters:
      userName - caller username
      Returns:
      created Workflow
    • makeWorkflow

      com.opensymphony.workflow.Workflow makeWorkflow(ApplicationUser user)
      Prepares Workflow object with given user as caller
      Parameters:
      user - caller
      Returns:
      created Workflow
    • makeWorkflowWithUserName

      com.opensymphony.workflow.Workflow makeWorkflowWithUserName(String userName)
    • makeWorkflowWithUserKey

      com.opensymphony.workflow.Workflow makeWorkflowWithUserKey(String userKey)
    • workflowExists

      boolean workflowExists(String name) throws WorkflowException
      Throws:
      WorkflowException
    • isEditable

      boolean isEditable(Issue issue)
    • isEditable

      @ExperimentalApi boolean isEditable(@Nonnull Issue issue, @Nonnull String nextStatusId)
      Checks if the issue will be editable in workflow step with given id.
      Parameters:
      issue - the issue which is affected by the workflow action
      nextStatusId - the workflow status that the issue will be in after transition
      Returns:
      a boolean value which indicates if the issue will be editable in step with given id
      Since:
      8.3
    • getPostFunctionsForWorkflow

      Map<com.opensymphony.workflow.loader.ActionDescriptor,Collection<com.opensymphony.workflow.loader.FunctionDescriptor>> getPostFunctionsForWorkflow(JiraWorkflow workflow)
      Retrieve a map: actions -> post functions for a workflow.
      Parameters:
      workflow - The Workflow
      Returns:
      Map of actions-> post functions
    • getStepId

      String getStepId(long actionDescriptorId, String workflowName)
      Gets the first stepId for the given action and workflow name.
      Parameters:
      actionDescriptorId - id of the ActionDescriptor
      workflowName - name of the JiraWorkflow
      Returns:
      the first stepId for the given action and workflow name.
    • overwriteActiveWorkflow

      void overwriteActiveWorkflow(String username, String workflowName)
      Saves the draft workflow into the active workflow.
      Parameters:
      username - User will be added to the workflows Audit trail
      workflowName - The workflow to be overwritten
    • overwriteActiveWorkflow

      void overwriteActiveWorkflow(ApplicationUser user, String workflowName)
      Saves the draft workflow into the active workflow.
      Parameters:
      user - User will be added to the workflows Audit trail
      workflowName - The workflow to be overwritten
      Since:
      v6.0
    • updateWorkflow

      void updateWorkflow(String username, JiraWorkflow workflow)
      Saves the given JiraWorkflow, which may be either a "live" or "draft" version. This method does not save the changes to the active workflow. Instead, this is meant to be used to make persistent changes to your working edit. Once all changes have been made you can over write the active workflow by calling overwriteActiveWorkflow(String, String)
      Parameters:
      username - User making the request.
      workflow - The JiraWorkflow to save.
      Throws:
      IllegalArgumentException - if the workflow or its descriptor is null.
      Since:
      v3.13
    • updateWorkflow

      void updateWorkflow(ApplicationUser user, JiraWorkflow workflow)
      Saves the given JiraWorkflow, which may be either a "live" or "draft" version. This method does not save the changes to the active workflow. Instead, this is meant to be used to make persistent changes to your working edit. Once all changes have been made you can over write the active workflow by calling overwriteActiveWorkflow(ApplicationUser, String)
      Parameters:
      user - User making the request.
      workflow - The JiraWorkflow to save.
      Throws:
      IllegalArgumentException - if the workflow or its descriptor is null.
      Since:
      v6.0
    • copyWorkflow

      JiraWorkflow copyWorkflow(String username, String clonedWorkflowName, String clonedWorkflowDescription, JiraWorkflow workflowToClone)
      Clones a workflow by creating a deep copy of the workflow provided.
      Parameters:
      username - The user performing the operation
      clonedWorkflowName - The name to store the new workflow with.
      clonedWorkflowDescription - The description to store with the cloned workflow. Can be null.
      workflowToClone - The workflow to copy.
      Returns:
      A cloned copy of the original workflow.
    • copyWorkflow

      JiraWorkflow copyWorkflow(ApplicationUser user, String clonedWorkflowName, String clonedWorkflowDescription, JiraWorkflow workflowToClone)
      Clones a workflow by creating a deep copy of the workflow provided.
      Parameters:
      user - The user performing the operation
      clonedWorkflowName - The name to store the new workflow with.
      clonedWorkflowDescription - The description to store with the cloned workflow. Can be null.
      workflowToClone - The workflow to copy.
      Returns:
      A cloned copy of the original workflow.
    • updateWorkflowNameAndDescription

      void updateWorkflowNameAndDescription(String username, JiraWorkflow currentWorkflow, String newName, String newDescription)
      Used to change the name and description of an existing worfklow with the given name.
      Parameters:
      username - The user performing the operation
      currentWorkflow - The workflow to update.
      newName - The new name to save with the workflow
      newDescription - The new description to save with the workflow
    • updateWorkflowNameAndDescription

      void updateWorkflowNameAndDescription(ApplicationUser user, JiraWorkflow currentWorkflow, String newName, String newDescription)
      Used to change the name and description of an existing worfklow with the given name.
      Parameters:
      user - The user performing the operation
      currentWorkflow - The workflow to update.
      newName - The new name to save with the workflow
      newDescription - The new description to save with the workflow
    • copyAndDeleteDraftWorkflows

      void copyAndDeleteDraftWorkflows(ApplicationUser user, Set<JiraWorkflow> workflows)
      Deprecated.
      Since 5.1. This method should not be used directly by external developers as it is an operation that only makes sense in the context of a higher level operation in JIRA (i.e. project removal / changing the workflow scheme of a given project).

      Please use the API calls for these higher level operations instead.

      Provided a set of workflows, this method will check, if the passed in inactive workflows have any drafts linked to them. If they do, it will copy the draft into a new inactive workflow, and then delete the draft.
      Parameters:
      user - The user performing the operation
      workflows - A set of parent JiraWorkflows
    • copyAndDeleteDraftsForInactiveWorkflowsIn

      @Internal void copyAndDeleteDraftsForInactiveWorkflowsIn(ApplicationUser user, Iterable<JiraWorkflow> workflows)
      Provided a set of workflows, this method will check, if the passed in inactive workflows have any drafts linked to them. If they do, it will copy the draft into a new inactive workflow, and then delete the draft.

      This method is only meant to be used internally in JIRA. External developers should not call this method directly.

      Parameters:
      user - The user performing the operation
      workflows - A set of parent JiraWorkflows
    • getNextStatusIdForAction

      @Internal @Nonnull String getNextStatusIdForAction(@Nonnull Issue issue, int actionId)
      Given an issue and the identifier of a workflow action, returns the next status id for the issue if the action gets executed.
      Parameters:
      issue - The issue
      actionId - The identifier of a workflow action
      Returns:
      The status id corresponding to the next status of the issue if the action got executed
    • getInitialStatusIdForIssue

      @ExperimentalApi @Internal @Nonnull Optional<String> getInitialStatusIdForIssue(@Nonnull Issue issue)
      Returns the initial status for the workflow the given issue belongs to.
      Parameters:
      issue - the issue in workflow for which the initial status should be returned
      Returns:
      initial status id in the workflow
    • getActionDescriptor

      @Nonnull com.opensymphony.workflow.loader.ActionDescriptor getActionDescriptor(@Nonnull Issue issue, int actionId)
      Given an issue and the identifier if a workflow action, returns the ActionDescriptor associated.
      Parameters:
      issue - The issue.
      actionId - The identifier of a workflow action.
      Returns:
      The ActionDescriptor corresponding to the workflow action id for the given issue.
      Since:
      v7.0.3
    • replaceConditionInTransition

      void replaceConditionInTransition(@Nonnull com.opensymphony.workflow.loader.ActionDescriptor transition, @Nonnull Map<String,String> matchMap, @Nonnull Map<String,String> newMap)
      Changes the parameter map of all conditions that have the parameter map matching matchMap by adding all properties from newMap.
      Parameters:
      transition - transition to change the conditions in
      matchMap - the map used to determine if the condition should be modified
      newMap - a map of properties to be added to the parameter map