PageRenderTime 45ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

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

https://bitbucket.org/sorin/jira-plugin-intellij
Groovy | 126 lines | 104 code | 21 blank | 1 comment | 4 complexity | 259df1196fd5bf060075d7c5980cde4a MD5 | raw file
  1. package com.onresolve.jira.groovy.canned.admin
  2. import com.atlassian.jira.ComponentManager
  3. import com.atlassian.jira.bc.JiraServiceContext
  4. import com.atlassian.jira.bc.JiraServiceContextImpl
  5. import com.atlassian.jira.bc.filter.SearchRequestService
  6. import com.atlassian.jira.event.issue.IssueEvent
  7. import com.atlassian.jira.event.issue.IssueEventDispatcher
  8. import com.atlassian.jira.event.type.EventType
  9. import com.atlassian.jira.issue.Issue
  10. import com.atlassian.jira.issue.search.SearchProvider
  11. import com.atlassian.jira.issue.search.SearchRequest
  12. import com.atlassian.jira.issue.search.SearchResults
  13. import com.atlassian.jira.project.ProjectManager
  14. import com.atlassian.jira.security.JiraAuthenticationContext
  15. import com.atlassian.jira.util.ErrorCollection
  16. import com.atlassian.jira.util.SimpleErrorCollection
  17. import com.onresolve.jira.groovy.canned.CannedScript
  18. import com.onresolve.jira.groovy.canned.utils.CannedScriptUtils
  19. import com.onresolve.jira.groovy.canned.utils.FilterUtils
  20. import org.apache.log4j.Category
  21. public class IssueEventGenerator implements CannedScript {
  22. public static String FIELD_FILTER_ID = "FIELD_FILTER_ID"
  23. public static String FIELD_PROJECT_ID = "FIELD_PROJECT_ID"
  24. ComponentManager componentManager = ComponentManager.getInstance()
  25. JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
  26. JiraServiceContext ctx = new JiraServiceContextImpl(authenticationContext.getUser());
  27. SearchProvider searchProvider = componentManager.getSearchProvider()
  28. SearchRequestService searchRequestService = componentManager.getSearchRequestService()
  29. ProjectManager projectManager = componentManager.getProjectManager()
  30. Category log = Category.getInstance(IssueEventGenerator.class)
  31. public String getName() {
  32. "Generate events"
  33. }
  34. List getCategories() {
  35. ["ADMIN"]
  36. }
  37. public String getDescription() {
  38. """Generate Issue Created events to be consumed by listeners.
  39. """
  40. }
  41. public String getHelpUrl() {
  42. null
  43. }
  44. public List getParameters(Map params) {
  45. [
  46. [
  47. Name:FIELD_FILTER_ID,
  48. Label:"Filter ID",
  49. Description:"""All issues returned by this filter will have an event generated.""",
  50. Type:"list",
  51. Values: CannedScriptUtils.getAllOwnedFilters(true),
  52. ],
  53. [
  54. Name:FIELD_PROJECT_ID,
  55. Label:"Project Key",
  56. Description:"""All issues for this project will have an event generated.""",
  57. Type:"list",
  58. Values: CannedScriptUtils.getProjectOptions(true),
  59. ],
  60. ]
  61. }
  62. public ErrorCollection doValidate(Map params, boolean forPreview) {
  63. ErrorCollection errorCollection = new SimpleErrorCollection()
  64. if (! (params[FIELD_FILTER_ID] as Boolean ^ (params[FIELD_PROJECT_ID]) as Boolean)) {
  65. errorCollection.addErrorMessage("Please enter a project OR filter ID")
  66. return errorCollection
  67. }
  68. if (params[FIELD_FILTER_ID]) {
  69. long filterId = params[FIELD_FILTER_ID] as Long
  70. SearchRequest sr = searchRequestService.getFilter(ctx, filterId)
  71. if (! sr) {
  72. errorCollection.addError(FIELD_FILTER_ID, "Invalid filter ID... do you own this?")
  73. }
  74. }
  75. return errorCollection
  76. }
  77. Map doScript(Map params) {
  78. SearchRequest sr = getOrCreateSearchRequest(params)
  79. SearchResults results = getSearchResults(sr)
  80. List issues = results.getIssues();
  81. for (Issue issue in issues)
  82. {
  83. // todo: monkey patch event to get the most recent changes
  84. log.debug("Dispatch event for $issue")
  85. IssueEvent event = new IssueEvent(issue, null, null, EventType.ISSUE_CREATED_ID, false)
  86. IssueEventDispatcher.dispatchEvent(event);
  87. }
  88. ["output":"${issues.size()} issues had an event fired."]
  89. }
  90. SearchRequest getOrCreateSearchRequest(Map params) {
  91. FilterUtils.getOrCreateSearchRequest(params)
  92. }
  93. String getDescription(Map params, boolean forPreview) {
  94. SearchRequest sr = getOrCreateSearchRequest(params)
  95. String projectId = params[FIELD_PROJECT_ID]
  96. SearchResults results = getSearchResults(sr)
  97. """Will operate on ${results.getTotal()} issue(s) from the \"${sr.getName() ?: projectId}\" filter... """
  98. }
  99. private SearchResults getSearchResults(SearchRequest sr) {
  100. return FilterUtils.getSearchResults(sr)
  101. }
  102. public Boolean isFinalParamsPage(Map params) {
  103. true
  104. }
  105. }