public class OSWorkflowManager extends Object implements WorkflowManager
Constructor and Description |
---|
OSWorkflowManager(com.opensymphony.workflow.config.Configuration configuration,
DraftWorkflowStore draftWorkflowStore,
com.atlassian.event.api.EventPublisher eventPublisher,
WorkflowsRepository workflowsRepository,
WorkflowCopyNameFactory workflowCopyNameFactory,
JiraAuthenticationContext context,
IssueTextFieldCharacterLengthValidator textFieldCharacterLengthValidator) |
Modifier and Type | Method and Description |
---|---|
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.
|
void |
copyAndDeleteDraftWorkflows(ApplicationUser user,
Set<JiraWorkflow> workflows)
Provided a set of workflows, this method will check, if the passed in inactive workflows have any drafts linked
to them.
|
JiraWorkflow |
copyWorkflow(ApplicationUser user,
String clonedWorkflowName,
String clonedWorkflowDescription,
JiraWorkflow workflowToClone)
Clones a workflow by creating a deep copy of the workflow provided.
|
JiraWorkflow |
copyWorkflow(String username,
String clonedWorkflowName,
String clonedWorkflowDescription,
JiraWorkflow workflowToClone)
Clones a workflow by creating a deep copy of the workflow provided.
|
JiraWorkflow |
createDraftWorkflow(ApplicationUser user,
String parentWorkflowName)
This will create an draft workflow of the named active workflow.
|
JiraWorkflow |
createDraftWorkflow(String username,
String parentWorkflowName)
This will create an draft workflow of the named active workflow.
|
org.ofbiz.core.entity.GenericValue |
createIssue(String remoteUserName,
Map<String,Object> fields)
Create an issue in the database.
|
void |
createWorkflow(ApplicationUser user,
JiraWorkflow workflow) |
void |
createWorkflow(String username,
JiraWorkflow workflow) |
boolean |
deleteDraftWorkflow(String parentWorkflowName)
Deletes all draft workflows (there should every be only one) for a given parent workflow.
|
void |
deleteWorkflow(JiraWorkflow workflow) |
void |
doWorkflowAction(WorkflowProgressAware from) |
com.opensymphony.workflow.loader.ActionDescriptor |
getActionDescriptor(Issue issue,
int actionId)
Given an issue and the identifier if a workflow action, returns the ActionDescriptor associated.
|
com.opensymphony.workflow.loader.ActionDescriptor |
getActionDescriptor(WorkflowProgressAware workflowProgressAware) |
Collection<JiraWorkflow> |
getActiveWorkflows()
Retrieve all currently active workflows.
|
protected com.opensymphony.workflow.config.Configuration |
getConfiguration() |
JiraWorkflow |
getDefaultWorkflow() |
JiraWorkflow |
getDraftWorkflow(String parentWorkflowName)
Retrieve a single draft workflow by name.
|
Optional<String> |
getInitialStatusIdForIssue(Issue issue)
Returns the initial status for the workflow the given issue belongs to.
|
String |
getNextStatusIdForAction(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.
|
String |
getNextStatusIdForAction(Issue issue,
JiraWorkflow workflow,
com.opensymphony.workflow.loader.ActionDescriptor actionDescriptor) |
Map<com.opensymphony.workflow.loader.ActionDescriptor,Collection<com.opensymphony.workflow.loader.FunctionDescriptor>> |
getPostFunctionsForWorkflow(JiraWorkflow workflow)
Retrieve a map: actions -> post functions for a workflow.
|
String |
getStepId(long actionDescriptorId,
String workflowName)
Gets the first stepId for the given action and workflow name.
|
com.opensymphony.workflow.spi.WorkflowStore |
getStore()
This is used for unit testing so we can return our own 'mock store' instead of the static
StoreFactory.getPersistence(ctx);
|
JiraWorkflow |
getWorkflow(org.ofbiz.core.entity.GenericValue issue)
Retrieve the workflow for a given issue.
|
JiraWorkflow |
getWorkflow(Issue issue)
Retrieve the workflow for a given issue.
|
JiraWorkflow |
getWorkflow(Long projectId,
String issueTypeId)
Retrieve the workflow for a given project - issue type pair.
|
JiraWorkflow |
getWorkflow(String name)
Retrieve a single workflow by name.
|
JiraWorkflow |
getWorkflowClone(String name)
This method returns a JiraWorkflow, that contains a
WorkflowDescriptor
that is mutable. |
JiraWorkflow |
getWorkflowFromScheme(org.ofbiz.core.entity.GenericValue scheme,
String issueTypeId)
Return the workflow in a particular scheme for a given issue type.
|
JiraWorkflow |
getWorkflowFromScheme(WorkflowScheme scheme,
String issueTypeId)
Return the workflow in a particular scheme for a given issue type.
|
protected String |
getWorkflowName(Long projectId,
String issueType)
This method returns the (unique) name of the workflow which should be used for the provided projectId and
issueType
|
Collection<JiraWorkflow> |
getWorkflows()
Retrieve all of the workflows in the system
|
protected WorkflowSchemeManager |
getWorkflowSchemeManager() |
Collection<JiraWorkflow> |
getWorkflowsFromScheme(org.ofbiz.core.entity.GenericValue scheme)
Returns all workflows for a given scheme.
|
Iterable<JiraWorkflow> |
getWorkflowsFromScheme(Scheme workflowScheme)
Returns all workflows for a given scheme.
|
List<JiraWorkflow> |
getWorkflowsIncludingDrafts()
Retrieve all of the workflows in the system including drafts.
|
boolean |
isActive(JiraWorkflow workflow)
Determine whether or not a given workflow is active in the system.
|
boolean |
isEditable(Issue issue) |
boolean |
isEditable(Issue issue,
String nextStatusId)
Checks if the issue will be editable in workflow step with given id.
|
boolean |
isSystemWorkflow(JiraWorkflow workflow)
Determine whether or not a given workflow is a system workflow.
|
com.opensymphony.workflow.Workflow |
makeWorkflow(ApplicationUser user)
Prepares
Workflow object with given user as caller |
com.opensymphony.workflow.Workflow |
makeWorkflow(String userName)
Prepares
Workflow object with given username as caller |
com.opensymphony.workflow.Workflow |
makeWorkflowWithUserKey(String userKey) |
com.opensymphony.workflow.Workflow |
makeWorkflowWithUserName(String userName) |
void |
migrateIssueToWorkflow(org.ofbiz.core.entity.GenericValue issue,
JiraWorkflow newWorkflow,
org.ofbiz.core.entity.GenericValue newStatus)
Migrates given issue to new workflow and sets new status on it.
|
void |
migrateIssueToWorkflow(MutableIssue issue,
JiraWorkflow newWorkflow,
Status status)
Migrates given issue to new workflow and sets new status on it.
|
boolean |
migrateIssueToWorkflowNoReindex(org.ofbiz.core.entity.GenericValue issue,
JiraWorkflow newWorkflow,
org.ofbiz.core.entity.GenericValue newStatus)
Migrates given issue to new workflow and sets new status on it.
|
void |
overwriteActiveWorkflow(ApplicationUser user,
String workflowName)
Saves the draft workflow into the active workflow.
|
void |
overwriteActiveWorkflow(String username,
String workflowName)
Saves the draft workflow into the active workflow.
|
void |
removeWorkflowEntries(org.ofbiz.core.entity.GenericValue issue) |
void |
replaceConditionInTransition(com.opensymphony.workflow.loader.ActionDescriptor transition,
Map<String,String> matchMap,
Map<String,String> newMap)
Changes the parameter map of all conditions that have the parameter map matching matchMap by adding all properties from newMap.
|
void |
saveWorkflowWithoutAudit(JiraWorkflow workflow)
This method will save the workflow and it will not affect the updatedDate and updatedAuthorName meta attributes
of the workflow.
|
protected boolean |
updateIssueStatusAndUpdatedDate(org.ofbiz.core.entity.GenericValue issue,
org.ofbiz.core.entity.GenericValue newStatus) |
void |
updateWorkflow(ApplicationUser user,
JiraWorkflow workflow)
Saves the given JiraWorkflow, which may be either a "live" or "draft" version.
|
void |
updateWorkflow(String username,
JiraWorkflow workflow)
Saves the given JiraWorkflow, which may be either a "live" or "draft" version.
|
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.
|
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.
|
boolean |
workflowExists(String name) |
public OSWorkflowManager(com.opensymphony.workflow.config.Configuration configuration, DraftWorkflowStore draftWorkflowStore, com.atlassian.event.api.EventPublisher eventPublisher, WorkflowsRepository workflowsRepository, WorkflowCopyNameFactory workflowCopyNameFactory, JiraAuthenticationContext context, IssueTextFieldCharacterLengthValidator textFieldCharacterLengthValidator)
public Collection<JiraWorkflow> getWorkflows()
getWorkflows
in interface WorkflowManager
public List<JiraWorkflow> getWorkflowsIncludingDrafts()
WorkflowManager
getWorkflowsIncludingDrafts
in interface WorkflowManager
JiraWorkflow
objects.protected String getWorkflowName(Long projectId, String issueType)
public Collection<JiraWorkflow> getActiveWorkflows() throws WorkflowException
WorkflowManager
getActiveWorkflows
in interface WorkflowManager
WorkflowException
- RuntimeException wrapper for any errors.public boolean isActive(JiraWorkflow workflow) throws WorkflowException
WorkflowManager
Active workflows are those currently assigned to schemes and associated with projects - they cannot be edited but can be used.
isActive
in interface WorkflowManager
workflow
- the JiraWorkflow to checkWorkflowException
- RuntimeException wrapper for any errors.public boolean isSystemWorkflow(JiraWorkflow workflow)
WorkflowManager
Check for a system or XML based workflow - can not be edited.
isSystemWorkflow
in interface WorkflowManager
workflow
- the JiraWorkflow to checkpublic JiraWorkflow getWorkflow(String name)
WorkflowManager
JiraWorkflow
contains a
descriptor that by default isn't mutable.
If you need to edit a workflow, please see WorkflowManager.getWorkflowClone(String)
.
getWorkflow
in interface WorkflowManager
name
- The workflow nameJiraWorkflow
that wraps an Immutable WorkflowDescriptor or nullWorkflowManager.getWorkflowClone(String)
public JiraWorkflow getWorkflowClone(String name)
WorkflowManager
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 WorkflowManager.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.
getWorkflowClone
in interface WorkflowManager
name
- The workflow nameJiraWorkflow
or null if it doesn't exist.WorkflowManager.getWorkflow(String)
public JiraWorkflow getDraftWorkflow(String parentWorkflowName) throws IllegalArgumentException
WorkflowManager
getDraftWorkflow
in interface WorkflowManager
parentWorkflowName
- is the name of the Saved workflow which identifies then paritally edited draft workflow
to retrieve.IllegalArgumentException
- if no parentWorkflow with the name provided can be found.public JiraWorkflow createDraftWorkflow(String username, String parentWorkflowName)
WorkflowManager
IllegalStateException
in
this case.createDraftWorkflow
in interface WorkflowManager
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 thrownparentWorkflowName
- identifies the parent workflow that should be used as the template for creating the
draft workflow.JiraWorkflow
that represents a copy of the parent that can be edited without
overwriting the active workflow immediately.public JiraWorkflow createDraftWorkflow(ApplicationUser user, String parentWorkflowName)
WorkflowManager
IllegalStateException
in
this case.createDraftWorkflow
in interface WorkflowManager
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 thrownparentWorkflowName
- identifies the parent workflow that should be used as the template for creating the
draft workflow.JiraWorkflow
that represents a copy of the parent that can be edited without
overwriting the active workflow immediately.public boolean deleteDraftWorkflow(String parentWorkflowName) throws IllegalArgumentException
WorkflowManager
deleteDraftWorkflow
in interface WorkflowManager
parentWorkflowName
- The parentworkflow for which the draft workflow needs to be deleted.IllegalArgumentException
- if the parentWorkflowName is nullpublic boolean workflowExists(String name) throws WorkflowException
workflowExists
in interface WorkflowManager
WorkflowException
public JiraWorkflow getWorkflow(Issue issue) throws WorkflowException
WorkflowManager
getWorkflow
in interface WorkflowManager
issue
- the IssueWorkflowException
- RuntimeException wrapper for any errors.public JiraWorkflow getWorkflow(Long projectId, String issueTypeId) throws WorkflowException
WorkflowManager
getWorkflow
in interface WorkflowManager
projectId
- the ProjectissueTypeId
- the IssueType IDWorkflowException
- RuntimeException wrapper for any errors.public JiraWorkflow getWorkflowFromScheme(org.ofbiz.core.entity.GenericValue scheme, String issueTypeId)
WorkflowManager
getWorkflowFromScheme
in interface WorkflowManager
scheme
- the SchemeissueTypeId
- the IssueType IDpublic JiraWorkflow getWorkflowFromScheme(WorkflowScheme scheme, String issueTypeId)
WorkflowManager
getWorkflowFromScheme
in interface WorkflowManager
scheme
- the SchemeissueTypeId
- the IssueType IDpublic Collection<JiraWorkflow> getWorkflowsFromScheme(org.ofbiz.core.entity.GenericValue scheme) throws WorkflowException
WorkflowManager
getWorkflowsFromScheme
in interface WorkflowManager
scheme
- the Workflow Scheme.WorkflowException
- RuntimeException wrapper for any errors.public Iterable<JiraWorkflow> getWorkflowsFromScheme(Scheme workflowScheme) throws WorkflowException
WorkflowManager
getWorkflowsFromScheme
in interface WorkflowManager
workflowScheme
- the Workflow Scheme.WorkflowException
- RuntimeException wrapper for any errors.public void copyAndDeleteDraftWorkflows(ApplicationUser user, Set<JiraWorkflow> workflows)
WorkflowManager
copyAndDeleteDraftWorkflows
in interface WorkflowManager
user
- The user performing the operationworkflows
- A set of parent JiraWorkflow
spublic void copyAndDeleteDraftsForInactiveWorkflowsIn(ApplicationUser user, Iterable<JiraWorkflow> workflows)
WorkflowManager
This method is only meant to be used internally in JIRA. External developers should not call this method directly.
copyAndDeleteDraftsForInactiveWorkflowsIn
in interface WorkflowManager
user
- The user performing the operationworkflows
- A set of parent JiraWorkflow
s@Nonnull public String getNextStatusIdForAction(@Nonnull Issue issue, int actionId)
WorkflowManager
getNextStatusIdForAction
in interface WorkflowManager
issue
- The issueactionId
- The identifier of a workflow action@Nonnull public String getNextStatusIdForAction(@Nonnull Issue issue, @Nonnull JiraWorkflow workflow, @Nonnull com.opensymphony.workflow.loader.ActionDescriptor actionDescriptor)
@Nonnull public Optional<String> getInitialStatusIdForIssue(@Nonnull Issue issue)
WorkflowManager
getInitialStatusIdForIssue
in interface WorkflowManager
issue
- the issue in workflow for which the initial status should be returned@Nonnull public com.opensymphony.workflow.loader.ActionDescriptor getActionDescriptor(@Nonnull Issue issue, int actionId)
WorkflowManager
getActionDescriptor
in interface WorkflowManager
issue
- The issue.actionId
- The identifier of a workflow action.public void createWorkflow(String username, JiraWorkflow workflow) throws WorkflowException
createWorkflow
in interface WorkflowManager
WorkflowException
public void createWorkflow(ApplicationUser user, JiraWorkflow workflow) throws WorkflowException
createWorkflow
in interface WorkflowManager
WorkflowException
public void saveWorkflowWithoutAudit(JiraWorkflow workflow) throws WorkflowException
WorkflowManager
WorkflowManager.updateWorkflow(String, JiraWorkflow)
saveWorkflowWithoutAudit
in interface WorkflowManager
workflow
- the workflow to save.WorkflowException
- RuntimeException wrapper for any errors.protected WorkflowSchemeManager getWorkflowSchemeManager()
public void deleteWorkflow(JiraWorkflow workflow) throws WorkflowException
deleteWorkflow
in interface WorkflowManager
WorkflowException
public JiraWorkflow getWorkflow(org.ofbiz.core.entity.GenericValue issue) throws WorkflowException
WorkflowManager
getWorkflow
in interface WorkflowManager
issue
- the IssueWorkflowException
- RuntimeException wrapper for any errors.public void migrateIssueToWorkflow(org.ofbiz.core.entity.GenericValue issue, JiraWorkflow newWorkflow, org.ofbiz.core.entity.GenericValue newStatus) throws WorkflowException
WorkflowManager
migrateIssueToWorkflow
in interface WorkflowManager
issue
- issue to migratenewWorkflow
- new workflownewStatus
- new statusWorkflowException
- if migration failspublic boolean migrateIssueToWorkflowNoReindex(org.ofbiz.core.entity.GenericValue issue, JiraWorkflow newWorkflow, org.ofbiz.core.entity.GenericValue newStatus) throws WorkflowException
WorkflowManager
migrateIssueToWorkflowNoReindex
in interface WorkflowManager
issue
- issue to migratenewWorkflow
- new workflownewStatus
- new statusWorkflowException
- if migration failspublic void overwriteActiveWorkflow(String username, String workflowName)
WorkflowManager
overwriteActiveWorkflow
in interface WorkflowManager
username
- User will be added to the workflows Audit trailworkflowName
- The workflow to be overwrittenpublic void overwriteActiveWorkflow(ApplicationUser user, String workflowName)
WorkflowManager
overwriteActiveWorkflow
in interface WorkflowManager
user
- User will be added to the workflows Audit trailworkflowName
- The workflow to be overwrittenprotected boolean updateIssueStatusAndUpdatedDate(org.ofbiz.core.entity.GenericValue issue, org.ofbiz.core.entity.GenericValue newStatus)
public void updateWorkflow(String username, JiraWorkflow workflow)
WorkflowManager
WorkflowManager.overwriteActiveWorkflow(String, String)
updateWorkflow
in interface WorkflowManager
username
- User making the request.workflow
- The JiraWorkflow to save.public void updateWorkflow(ApplicationUser user, JiraWorkflow workflow)
WorkflowManager
WorkflowManager.overwriteActiveWorkflow(ApplicationUser, String)
updateWorkflow
in interface WorkflowManager
user
- User making the request.workflow
- The JiraWorkflow to save.public JiraWorkflow copyWorkflow(String username, String clonedWorkflowName, String clonedWorkflowDescription, JiraWorkflow workflowToClone)
WorkflowManager
copyWorkflow
in interface WorkflowManager
username
- The user performing the operationclonedWorkflowName
- 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.public JiraWorkflow copyWorkflow(ApplicationUser user, String clonedWorkflowName, String clonedWorkflowDescription, JiraWorkflow workflowToClone)
WorkflowManager
copyWorkflow
in interface WorkflowManager
user
- The user performing the operationclonedWorkflowName
- 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.public void updateWorkflowNameAndDescription(String username, JiraWorkflow currentWorkflow, String newName, String newDescription)
WorkflowManager
updateWorkflowNameAndDescription
in interface WorkflowManager
username
- The user performing the operationcurrentWorkflow
- The workflow to update.newName
- The new name to save with the workflownewDescription
- The new description to save with the workflowpublic void updateWorkflowNameAndDescription(ApplicationUser user, JiraWorkflow currentWorkflow, String newName, String newDescription)
WorkflowManager
updateWorkflowNameAndDescription
in interface WorkflowManager
user
- The user performing the operationcurrentWorkflow
- The workflow to update.newName
- The new name to save with the workflownewDescription
- The new description to save with the workflowpublic JiraWorkflow getDefaultWorkflow() throws WorkflowException
getDefaultWorkflow
in interface WorkflowManager
WorkflowException
public org.ofbiz.core.entity.GenericValue createIssue(String remoteUserName, Map<String,Object> fields) throws WorkflowException
WorkflowManager
createIssue
in interface WorkflowManager
remoteUserName
- Issue creatorfields
- 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.WorkflowException
- If any errors occur while trying to create the issue.public void removeWorkflowEntries(org.ofbiz.core.entity.GenericValue issue)
removeWorkflowEntries
in interface WorkflowManager
public void doWorkflowAction(WorkflowProgressAware from)
doWorkflowAction
in interface WorkflowManager
public com.opensymphony.workflow.spi.WorkflowStore getStore() throws com.opensymphony.workflow.StoreException
Also used in the migrateIssueToWorkflow method.
getStore
in interface WorkflowManager
com.opensymphony.workflow.StoreException
public com.opensymphony.workflow.loader.ActionDescriptor getActionDescriptor(WorkflowProgressAware workflowProgressAware) throws Exception
getActionDescriptor
in interface WorkflowManager
Exception
public void migrateIssueToWorkflow(MutableIssue issue, JiraWorkflow newWorkflow, Status status) throws WorkflowException
migrateIssueToWorkflow
in interface WorkflowManager
issue
- issue to migratenewWorkflow
- new workflowstatus
- new statusWorkflowException
- if migration failspublic com.opensymphony.workflow.Workflow makeWorkflow(String userName)
WorkflowManager
Workflow
object with given username as callermakeWorkflow
in interface WorkflowManager
userName
- caller usernameWorkflow
public com.opensymphony.workflow.Workflow makeWorkflowWithUserName(String userName)
makeWorkflowWithUserName
in interface WorkflowManager
public com.opensymphony.workflow.Workflow makeWorkflowWithUserKey(String userKey)
makeWorkflowWithUserKey
in interface WorkflowManager
public com.opensymphony.workflow.Workflow makeWorkflow(ApplicationUser user)
WorkflowManager
Workflow
object with given user as callermakeWorkflow
in interface WorkflowManager
user
- callerWorkflow
public boolean isEditable(Issue issue)
isEditable
in interface WorkflowManager
public boolean isEditable(@Nonnull Issue issue, @Nonnull String nextStatusId)
WorkflowManager
isEditable
in interface WorkflowManager
issue
- the issue which is affected by the workflow actionnextStatusId
- the workflow status that the issue will be in after transitionprotected com.opensymphony.workflow.config.Configuration getConfiguration()
public Map<com.opensymphony.workflow.loader.ActionDescriptor,Collection<com.opensymphony.workflow.loader.FunctionDescriptor>> getPostFunctionsForWorkflow(JiraWorkflow workflow)
WorkflowManager
getPostFunctionsForWorkflow
in interface WorkflowManager
workflow
- The Workflowpublic String getStepId(long actionDescriptorId, String workflowName)
WorkflowManager
getStepId
in interface WorkflowManager
actionDescriptorId
- id of the ActionDescriptorworkflowName
- name of the JiraWorkflowpublic void replaceConditionInTransition(com.opensymphony.workflow.loader.ActionDescriptor transition, Map<String,String> matchMap, Map<String,String> newMap)
WorkflowManager
replaceConditionInTransition
in interface WorkflowManager
transition
- transition to change the conditions inmatchMap
- the map used to determine if the condition should be modifiednewMap
- a map of properties to be added to the parameter mapCopyright © 2002-2021 Atlassian. All Rights Reserved.