/src/main/resources/com/onresolve/jira/groovy/canned/admin/IssueEventGenerator.groovy
Groovy | 126 lines | 104 code | 21 blank | 1 comment | 4 complexity | 259df1196fd5bf060075d7c5980cde4a MD5 | raw file
- package com.onresolve.jira.groovy.canned.admin
-
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.bc.JiraServiceContext
- import com.atlassian.jira.bc.JiraServiceContextImpl
- import com.atlassian.jira.bc.filter.SearchRequestService
- import com.atlassian.jira.event.issue.IssueEvent
- import com.atlassian.jira.event.issue.IssueEventDispatcher
- import com.atlassian.jira.event.type.EventType
- import com.atlassian.jira.issue.Issue
- import com.atlassian.jira.issue.search.SearchProvider
- import com.atlassian.jira.issue.search.SearchRequest
- import com.atlassian.jira.issue.search.SearchResults
- import com.atlassian.jira.project.ProjectManager
- import com.atlassian.jira.security.JiraAuthenticationContext
- import com.atlassian.jira.util.ErrorCollection
- import com.atlassian.jira.util.SimpleErrorCollection
- import com.onresolve.jira.groovy.canned.CannedScript
- import com.onresolve.jira.groovy.canned.utils.CannedScriptUtils
- import com.onresolve.jira.groovy.canned.utils.FilterUtils
- import org.apache.log4j.Category
-
- public class IssueEventGenerator implements CannedScript {
-
- public static String FIELD_FILTER_ID = "FIELD_FILTER_ID"
- public static String FIELD_PROJECT_ID = "FIELD_PROJECT_ID"
-
- ComponentManager componentManager = ComponentManager.getInstance()
- JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
- JiraServiceContext ctx = new JiraServiceContextImpl(authenticationContext.getUser());
- SearchProvider searchProvider = componentManager.getSearchProvider()
- SearchRequestService searchRequestService = componentManager.getSearchRequestService()
- ProjectManager projectManager = componentManager.getProjectManager()
-
- Category log = Category.getInstance(IssueEventGenerator.class)
-
- public String getName() {
- "Generate events"
- }
-
- List getCategories() {
- ["ADMIN"]
- }
-
- public String getDescription() {
- """Generate Issue Created events to be consumed by listeners.
- """
- }
-
- public String getHelpUrl() {
- null
- }
-
- public List getParameters(Map params) {
- [
- [
- Name:FIELD_FILTER_ID,
- Label:"Filter ID",
- Description:"""All issues returned by this filter will have an event generated.""",
- Type:"list",
- Values: CannedScriptUtils.getAllOwnedFilters(true),
- ],
- [
- Name:FIELD_PROJECT_ID,
- Label:"Project Key",
- Description:"""All issues for this project will have an event generated.""",
- Type:"list",
- Values: CannedScriptUtils.getProjectOptions(true),
- ],
- ]
- }
-
- public ErrorCollection doValidate(Map params, boolean forPreview) {
- ErrorCollection errorCollection = new SimpleErrorCollection()
- if (! (params[FIELD_FILTER_ID] as Boolean ^ (params[FIELD_PROJECT_ID]) as Boolean)) {
- errorCollection.addErrorMessage("Please enter a project OR filter ID")
- return errorCollection
- }
-
- if (params[FIELD_FILTER_ID]) {
- long filterId = params[FIELD_FILTER_ID] as Long
- SearchRequest sr = searchRequestService.getFilter(ctx, filterId)
- if (! sr) {
- errorCollection.addError(FIELD_FILTER_ID, "Invalid filter ID... do you own this?")
- }
- }
-
- return errorCollection
- }
-
- Map doScript(Map params) {
- SearchRequest sr = getOrCreateSearchRequest(params)
- SearchResults results = getSearchResults(sr)
- List issues = results.getIssues();
-
- for (Issue issue in issues)
- {
- // todo: monkey patch event to get the most recent changes
- log.debug("Dispatch event for $issue")
- IssueEvent event = new IssueEvent(issue, null, null, EventType.ISSUE_CREATED_ID, false)
- IssueEventDispatcher.dispatchEvent(event);
- }
-
- ["output":"${issues.size()} issues had an event fired."]
- }
-
- SearchRequest getOrCreateSearchRequest(Map params) {
- FilterUtils.getOrCreateSearchRequest(params)
- }
-
- String getDescription(Map params, boolean forPreview) {
- SearchRequest sr = getOrCreateSearchRequest(params)
- String projectId = params[FIELD_PROJECT_ID]
-
- SearchResults results = getSearchResults(sr)
- """Will operate on ${results.getTotal()} issue(s) from the \"${sr.getName() ?: projectId}\" filter... """
- }
-
- private SearchResults getSearchResults(SearchRequest sr) {
- return FilterUtils.getSearchResults(sr)
- }
-
- public Boolean isFinalParamsPage(Map params) {
- true
- }
- }