PageRenderTime 199ms CodeModel.GetById 23ms RepoModel.GetById 24ms app.codeStats 0ms

/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
  1. package com.onresolve.jira.groovy.canned.utils
  2. import com.opensymphony.workflow.WorkflowContext
  3. import com.atlassian.jira.ComponentManager
  4. import com.atlassian.jira.issue.Issue
  5. import groovy.text.GStringTemplateEngine
  6. import com.atlassian.jira.event.issue.IssueEvent
  7. import com.atlassian.jira.util.ErrorCollection
  8. import com.atlassian.jira.issue.MutableIssue
  9. import com.atlassian.jira.bc.issue.IssueService
  10. import com.atlassian.jira.issue.IssueInputParametersImpl
  11. import com.atlassian.jira.bc.issue.IssueService.TransitionValidationResult
  12. import org.apache.log4j.Category
  13. import com.atlassian.jira.issue.IssueInputParameters
  14. import com.opensymphony.workflow.loader.ActionDescriptor
  15. import com.opensymphony.workflow.loader.StepDescriptor
  16. import com.atlassian.jira.workflow.JiraWorkflow
  17. import com.atlassian.crowd.embedded.api.User
  18. import com.atlassian.jira.user.util.UserUtil
  19. import com.atlassian.jira.issue.status.Status
  20. class WorkflowUtils {
  21. static ComponentManager componentManager = ComponentManager.getInstance()
  22. public static Category log = Category.getInstance(WorkflowUtils.class)
  23. private static UserUtil userUtil = componentManager.getUserUtil()
  24. public static Writable mergeTemplate(Map params, String template, Boolean isPreview = false) {
  25. GStringTemplateEngine engine = new GStringTemplateEngine()
  26. Map binding = params
  27. Issue issue = params["issue"] as Issue
  28. binding.put("issue", issue)
  29. engine.createTemplate(template).make(params)
  30. }
  31. public static User getUser(Map params) {
  32. Map transientVars = params['transientVars'] as Map
  33. IssueEvent event = params['event'] as IssueEvent
  34. User user = null
  35. if (transientVars) {
  36. String currentUserId = ((WorkflowContext) transientVars.get("context")).getCaller();
  37. if (currentUserId) {
  38. user = userUtil.getUser(currentUserId)
  39. }
  40. }
  41. else if (event) {
  42. user = event.getUser()
  43. }
  44. else {
  45. // must be previewing in the admin screens
  46. user = componentManager.getJiraAuthenticationContext().getUser()
  47. }
  48. user
  49. }
  50. public static void resolveIssue(MutableIssue theIssue, Integer actionId, User user, String resolutionId, Map scriptParams = [:]) {
  51. actionIssue("issueInputParameters.setResolutionId(\"$resolutionId\")", theIssue, actionId, user, scriptParams)
  52. }
  53. public static void actionIssue(String additionalScript, MutableIssue theIssue, Integer actionId, User user, Map scriptParams = [:]) {
  54. IssueService issueService = ComponentManager.getComponentInstanceOfType(IssueService.class)
  55. IssueInputParameters issueInputParameters = new IssueInputParametersImpl([:])
  56. scriptParams.put("issueInputParameters", issueInputParameters)
  57. ConditionUtils.doAdditional(additionalScript, theIssue, scriptParams)
  58. issueInputParameters = scriptParams['issueInputParameters'] as IssueInputParameters
  59. TransitionValidationResult validationResult = issueService.validateTransition(user, theIssue.id, actionId as Integer, issueInputParameters)
  60. ErrorCollection errorCollection = validationResult.errorCollection
  61. if (errorCollection.hasAnyErrors()) {
  62. // We used to carry on because sometimes these seem spurious. More investigation needed.
  63. log.error (errorCollection)
  64. log.error ("Not attmpting transition")
  65. return
  66. }
  67. errorCollection = issueService.transition(user, validationResult).errorCollection
  68. if (errorCollection.hasAnyErrors()) {
  69. log.error (errorCollection)
  70. }
  71. log.info ("Transitioned issue $theIssue through action \"$actionId\"")
  72. // reload issue
  73. theIssue = ComponentManager.getInstance().getIssueManager().getIssueObject(theIssue.id)
  74. Status finalStatus = theIssue.statusObject
  75. log.debug "Final status: ${finalStatus.getName()} (${finalStatus.id})"
  76. }
  77. public static boolean hasAction(Issue issue, Integer actionId) {
  78. JiraWorkflow workflow = componentManager.getWorkflowManager().getWorkflow(issue)
  79. StepDescriptor step = workflow.getLinkedStep(issue.status)
  80. ActionDescriptor ad = step.getAction(actionId)
  81. ad as boolean
  82. }
  83. }