/src/main/resources/com/onresolve/jira/groovy/canned/utils/WorkflowUtils.groovy
https://bitbucket.org/sorin/jira-plugin-intellij · Groovy · 100 lines · 80 code · 17 blank · 3 comment · 7 complexity · ed84290c396592df77ea5f55ff3e9943 MD5 · raw file
- package com.onresolve.jira.groovy.canned.utils
-
- import com.opensymphony.workflow.WorkflowContext
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.issue.Issue
- import groovy.text.GStringTemplateEngine
- import com.atlassian.jira.event.issue.IssueEvent
- import com.atlassian.jira.util.ErrorCollection
- import com.atlassian.jira.issue.MutableIssue
- import com.atlassian.jira.bc.issue.IssueService
- import com.atlassian.jira.issue.IssueInputParametersImpl
- import com.atlassian.jira.bc.issue.IssueService.TransitionValidationResult
- import org.apache.log4j.Category
- import com.atlassian.jira.issue.IssueInputParameters
- import com.opensymphony.workflow.loader.ActionDescriptor
- import com.opensymphony.workflow.loader.StepDescriptor
- import com.atlassian.jira.workflow.JiraWorkflow
- import com.atlassian.crowd.embedded.api.User
- import com.atlassian.jira.user.util.UserUtil
- import com.atlassian.jira.issue.status.Status
-
- class WorkflowUtils {
-
- static ComponentManager componentManager = ComponentManager.getInstance()
- public static Category log = Category.getInstance(WorkflowUtils.class)
- private static UserUtil userUtil = componentManager.getUserUtil()
-
- public static Writable mergeTemplate(Map params, String template, Boolean isPreview = false) {
- GStringTemplateEngine engine = new GStringTemplateEngine()
- Map binding = params
- Issue issue = params["issue"] as Issue
- binding.put("issue", issue)
- engine.createTemplate(template).make(params)
- }
-
- public static User getUser(Map params) {
- Map transientVars = params['transientVars'] as Map
- IssueEvent event = params['event'] as IssueEvent
-
- User user = null
- if (transientVars) {
- String currentUserId = ((WorkflowContext) transientVars.get("context")).getCaller();
- if (currentUserId) {
- user = userUtil.getUser(currentUserId)
- }
- }
- else if (event) {
- user = event.getUser()
- }
- else {
- // must be previewing in the admin screens
- user = componentManager.getJiraAuthenticationContext().getUser()
- }
- user
- }
-
- public static void resolveIssue(MutableIssue theIssue, Integer actionId, User user, String resolutionId, Map scriptParams = [:]) {
- actionIssue("issueInputParameters.setResolutionId(\"$resolutionId\")", theIssue, actionId, user, scriptParams)
- }
-
- public static void actionIssue(String additionalScript, MutableIssue theIssue, Integer actionId, User user, Map scriptParams = [:]) {
-
- IssueService issueService = ComponentManager.getComponentInstanceOfType(IssueService.class)
- IssueInputParameters issueInputParameters = new IssueInputParametersImpl([:])
-
- scriptParams.put("issueInputParameters", issueInputParameters)
-
- ConditionUtils.doAdditional(additionalScript, theIssue, scriptParams)
- issueInputParameters = scriptParams['issueInputParameters'] as IssueInputParameters
-
-
- TransitionValidationResult validationResult = issueService.validateTransition(user, theIssue.id, actionId as Integer, issueInputParameters)
-
- ErrorCollection errorCollection = validationResult.errorCollection
- if (errorCollection.hasAnyErrors()) {
- // We used to carry on because sometimes these seem spurious. More investigation needed.
- log.error (errorCollection)
- log.error ("Not attmpting transition")
- return
- }
-
- errorCollection = issueService.transition(user, validationResult).errorCollection
- if (errorCollection.hasAnyErrors()) {
- log.error (errorCollection)
- }
- log.info ("Transitioned issue $theIssue through action \"$actionId\"")
-
- // reload issue
- theIssue = ComponentManager.getInstance().getIssueManager().getIssueObject(theIssue.id)
- Status finalStatus = theIssue.statusObject
- log.debug "Final status: ${finalStatus.getName()} (${finalStatus.id})"
- }
-
- public static boolean hasAction(Issue issue, Integer actionId) {
- JiraWorkflow workflow = componentManager.getWorkflowManager().getWorkflow(issue)
- StepDescriptor step = workflow.getLinkedStep(issue.status)
- ActionDescriptor ad = step.getAction(actionId)
- ad as boolean
- }
- }