PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/resources/com/onresolve/jira/groovy/canned/admin/BulkFixResolutions.groovy

https://bitbucket.org/sorin/jira-plugin-intellij
Groovy | 144 lines | 121 code | 23 blank | 0 comment | 7 complexity | 1525da11f0bb751d162a5eee802f1f13 MD5 | raw file
  1. package com.onresolve.jira.groovy.canned.admin
  2. import com.atlassian.jira.ComponentManager
  3. import com.atlassian.jira.ManagerFactory
  4. import com.atlassian.jira.bc.JiraServiceContext
  5. import com.atlassian.jira.bc.JiraServiceContextImpl
  6. import com.atlassian.jira.bc.filter.SearchRequestService
  7. import com.atlassian.jira.config.ConstantsManager
  8. import com.atlassian.jira.issue.Issue
  9. import com.atlassian.jira.issue.IssueManager
  10. import com.atlassian.jira.issue.index.IssueIndexManager
  11. import com.atlassian.jira.issue.search.SearchProvider
  12. import com.atlassian.jira.issue.search.SearchRequest
  13. import com.atlassian.jira.issue.search.SearchResults
  14. import com.atlassian.jira.security.JiraAuthenticationContext
  15. import com.atlassian.jira.util.ErrorCollection
  16. import com.atlassian.jira.util.ImportUtils
  17. import com.atlassian.jira.util.SimpleErrorCollection
  18. import com.onresolve.jira.groovy.canned.CannedScript
  19. import com.onresolve.jira.groovy.canned.utils.CannedScriptUtils
  20. import com.onresolve.jira.groovy.canned.utils.FilterUtils
  21. import org.apache.log4j.Category
  22. import com.atlassian.jira.util.BuildUtils
  23. public class BulkFixResolutions implements CannedScript {
  24. public static String FIELD_FILTER_ID = "FIELD_FILTER_ID"
  25. public static String FIELD_RESOLUTION_ID = "FIELD_RESOLUTION_ID"
  26. ComponentManager componentManager = ComponentManager.getInstance()
  27. JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
  28. JiraServiceContext ctx = new JiraServiceContextImpl(authenticationContext.getUser());
  29. SearchProvider searchProvider = componentManager.getSearchProvider()
  30. IssueManager issueManager = componentManager.getIssueManager()
  31. IssueIndexManager indexManager = ComponentManager.getInstance().getIndexManager()
  32. ConstantsManager constantsManager = componentManager.getConstantsManager()
  33. def searchRequestService = componentManager.getSearchRequestService()
  34. Category log = Category.getInstance(BulkFixResolutions.class)
  35. public String getName() {
  36. "Bulk Fix Resolutions"
  37. }
  38. List getCategories() {
  39. ["ADMIN"]
  40. }
  41. public String getDescription() {
  42. """Modify resolution field in bulk, without creating a change entry. Useful after a bad import.
  43. """
  44. }
  45. public String getHelpUrl() {
  46. "https://studio.plugins.atlassian.com/wiki/display/GRV/Built-In+Scripts#Built-InScripts-BulkFixResolutions"
  47. }
  48. public List getParameters(Map params) {
  49. [
  50. [
  51. Name:FIELD_FILTER_ID,
  52. Label:"Filter ID",
  53. Description:"""All issues returned by this filter will be modified.""",
  54. Type:"list",
  55. Values: CannedScriptUtils.getAllOwnedFilters(true),
  56. ],
  57. [
  58. Name:FIELD_RESOLUTION_ID,
  59. Label:"New resolution",
  60. Description:"""Resolution to set.""",
  61. Type: "list",
  62. Values: CannedScriptUtils.getResolutionOptions(true),
  63. ],
  64. ]
  65. }
  66. public ErrorCollection doValidate(Map params, boolean forPreview) {
  67. ErrorCollection errorCollection = new SimpleErrorCollection()
  68. if (! params[FIELD_FILTER_ID]) {
  69. errorCollection.addError(FIELD_FILTER_ID, "Please enter the filter ID")
  70. }
  71. else {
  72. long filterId = params[FIELD_FILTER_ID] as Long
  73. SearchRequest sr = searchRequestService.getFilter(ctx, filterId)
  74. if (! sr) {
  75. errorCollection.addError(FIELD_FILTER_ID, "Invalid filter ID... do you own this?")
  76. }
  77. }
  78. return errorCollection
  79. }
  80. Map doScript(Map params) {
  81. SearchRequest sr = searchRequestService.getFilter(ctx, params[FIELD_FILTER_ID] as Long)
  82. SearchResults results = getSearchResults(sr)
  83. List issues = results.getIssues();
  84. Long nModIssues = 0
  85. for (Issue issue in issues)
  86. {
  87. issue = issueManager.getIssueObject(issue.getId())
  88. if (issue.resolutionId != params[FIELD_RESOLUTION_ID]) {
  89. log.debug "Fix resolution on issue: ${issue.key} - ${issue.summary}"
  90. boolean wasIndexing = ImportUtils.isIndexIssues();
  91. ImportUtils.setIndexIssues(true);
  92. try {
  93. issue.setResolutionId(params[FIELD_RESOLUTION_ID] as String)
  94. issue.store()
  95. nModIssues++
  96. }
  97. finally {
  98. if ((BuildUtils.getCurrentBuildNumber() as Long) < 614) {
  99. ManagerFactory.getCacheManager().flush(com.atlassian.jira.issue.cache.CacheManager.ISSUE_CACHE, issue)
  100. }
  101. indexManager.reIndex(issue);
  102. ImportUtils.setIndexIssues(wasIndexing);
  103. }
  104. }
  105. }
  106. ["output":"$nModIssues issue(s) modified."]
  107. }
  108. String getDescription(Map params, boolean forPreview) {
  109. SearchRequest sr = searchRequestService.getFilter(ctx, params[FIELD_FILTER_ID] as Long)
  110. SearchResults results = getSearchResults(sr)
  111. """Will operate on ${results.getTotal()} issue(s) from the \"${sr.getName()}\" filter...
  112. setting the resolution to
  113. ${params[FIELD_RESOLUTION_ID] ? constantsManager.getResolutionObject(params[FIELD_RESOLUTION_ID]).name : "None"}."""
  114. }
  115. private SearchResults getSearchResults(SearchRequest sr) {
  116. return FilterUtils.getSearchResults(sr)
  117. }
  118. public Boolean isFinalParamsPage(Map params) {
  119. true
  120. }
  121. }