private void updateStatus(MutableIssue issue, String fieldValue, List changeItems) { Status oldStatus = issue.getStatusObject(); issue.setStatusId(fieldValue); Status newStatus = issue.getStatusObject(); if (!Objects.equal(oldStatus, newStatus)) { if (oldStatus != null) { changeItems.add(new ChangeItemBean(ChangeItemBean.STATIC_FIELD, IssueFieldConstants.STATUS, oldStatus.getId(), oldStatus.getName(), newStatus.getId(), newStatus.getName())); } else { changeItems.add(new ChangeItemBean(ChangeItemBean.STATIC_FIELD, IssueFieldConstants.STATUS, null, null, newStatus.getId(), newStatus.getName())); } } }
/** * Migrates the updated issue to a workflow based on its project and issue * type only if it differs from the current issue's workflow. * * @param currentIssue current issue * @param updatedIssue updated issue * @throws com.atlassian.jira.exception.DataAccessException * if migration fails */ private void migrateWorkflowIfNecessary(Issue currentIssue, MutableIssue updatedIssue) { JiraWorkflow currentWorkflow = getWorkflowForIssue(currentIssue); JiraWorkflow targetWorkflow = getWorkflowForIssue(updatedIssue); if (!targetWorkflow.equals(currentWorkflow)) { try { workflowManager.migrateIssueToWorkflow(updatedIssue, targetWorkflow, updatedIssue.getStatusObject()); } catch (WorkflowException e) { String msg = "Could not migrate to sub-task workflow for issue: " + currentIssue.getKey(); log.error(msg, e); throw new DataAccessException(msg, e); } } }
void validateAndPopulateParamsForWorkflowTransition( ApplicationUser user, MutableIssue issue, IssueInputParameters issueInputParameters, Map<String, Object> fieldValuesHolder, OperationContext operationContext, ErrorCollection errorCollection, I18nHelper i18n, FieldScreenRenderer fieldScreenRenderer, int workflowActionId) { String currentIssueStatus = issue.getStatusObject().getId(); try { // JRA-40310: When making a workflow transition, we want to make validations and check permissions in the new status of the issue, not the old one String nextIssueStatus = workflowManager.getNextStatusIdForAction(issue, workflowActionId); issue.setStatusId(nextIssueStatus); validateAndPopulateParams(user, issue, issueInputParameters, fieldValuesHolder, operationContext, errorCollection, i18n, fieldScreenRenderer); } finally { issue.setStatusId(currentIssueStatus); } }
private List migrateSubTask(final Issue originalSubtask, final MutableIssue targetSubtask) throws GenericEntityException { ArrayList subTaskChangeItems = new ArrayList(); // update the target status if the original status is not valid in the target workflow if (!isTaskStatusValid(targetSubtask.getIssueTypeId(), targetSubtask.getStatusObject().getId())) { // Retrieve target status of subtask in new workflow from moveissuebean String subTaskTypeKey = getPrefixTaskStatusId(targetSubtask.getIssueTypeId(), targetSubtask.getStatusObject().getId()); Map taskTargetStatusMap = getMoveIssueBean().getTaskTargetStatusHolder(); targetSubtask.setStatusId((String) taskTargetStatusMap.get(subTaskTypeKey)); subTaskChangeItems.add(new ChangeItemBean(ChangeItemBean.STATIC_FIELD, IssueFieldConstants.STATUS, originalSubtask.getStatusObject().getId(), originalSubtask.getStatusObject().getName(), targetSubtask.getStatusObject().getId(), targetSubtask.getStatusObject().getName())); } // Migrate the subtask to the new status in the target workflow and create a changelog if (!isWorkflowMatch(originalSubtask.getIssueTypeId(), targetSubtask.getIssueTypeId())) { migrateIssueToWorkflow(targetSubtask, originalSubtask.getIssueTypeId(), getWorkflowForType(getTargetPid(), targetSubtask.getIssueTypeId()), targetSubtask.getStatus()); subTaskChangeItems.add(new ChangeItemBean(ChangeItemBean.STATIC_FIELD, "Workflow", originalSubtask.getWorkflowId().toString(), getWorkflowManager().getWorkflow(originalSubtask.getGenericValue()).getName(), targetSubtask.getWorkflowId().toString(), getWorkflowForType(getTargetPid(), targetSubtask.getIssueTypeId()).getName())); } return subTaskChangeItems; }
if (newStatus == null) newStatus = issue.getStatusObject();
bulkEditBean.getTargetWorkflow().getName())); final Status originalStatus = oldIssue.getStatusObject(); final Status newStatus = newIssue.getStatusObject(); if (originalStatus != null && !originalStatus.equals(newStatus))
Status targetStatus = targetIssue.getStatusObject(); if (!currentStatus.getId().equals(targetStatus.getId()))
workflowMigrationMapping.put(updatedIssueObject.getStatusObject().getId(), getTargetStatusId());