/src/main/resources/com/onresolve/jira/groovy/canned/admin/BulkFixResolutions.groovy
Groovy | 144 lines | 121 code | 23 blank | 0 comment | 7 complexity | 1525da11f0bb751d162a5eee802f1f13 MD5 | raw file
- package com.onresolve.jira.groovy.canned.admin
-
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.ManagerFactory
- import com.atlassian.jira.bc.JiraServiceContext
- import com.atlassian.jira.bc.JiraServiceContextImpl
- import com.atlassian.jira.bc.filter.SearchRequestService
- import com.atlassian.jira.config.ConstantsManager
- import com.atlassian.jira.issue.Issue
- import com.atlassian.jira.issue.IssueManager
- import com.atlassian.jira.issue.index.IssueIndexManager
- 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.security.JiraAuthenticationContext
- import com.atlassian.jira.util.ErrorCollection
- import com.atlassian.jira.util.ImportUtils
- 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
- import com.atlassian.jira.util.BuildUtils
-
- public class BulkFixResolutions implements CannedScript {
-
- public static String FIELD_FILTER_ID = "FIELD_FILTER_ID"
- public static String FIELD_RESOLUTION_ID = "FIELD_RESOLUTION_ID"
-
- ComponentManager componentManager = ComponentManager.getInstance()
- JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
- JiraServiceContext ctx = new JiraServiceContextImpl(authenticationContext.getUser());
- SearchProvider searchProvider = componentManager.getSearchProvider()
- IssueManager issueManager = componentManager.getIssueManager()
- IssueIndexManager indexManager = ComponentManager.getInstance().getIndexManager()
- ConstantsManager constantsManager = componentManager.getConstantsManager()
- def searchRequestService = componentManager.getSearchRequestService()
-
- Category log = Category.getInstance(BulkFixResolutions.class)
-
- public String getName() {
- "Bulk Fix Resolutions"
- }
-
- List getCategories() {
- ["ADMIN"]
- }
-
- public String getDescription() {
- """Modify resolution field in bulk, without creating a change entry. Useful after a bad import.
- """
- }
-
- public String getHelpUrl() {
- "https://studio.plugins.atlassian.com/wiki/display/GRV/Built-In+Scripts#Built-InScripts-BulkFixResolutions"
- }
-
- public List getParameters(Map params) {
- [
- [
- Name:FIELD_FILTER_ID,
- Label:"Filter ID",
- Description:"""All issues returned by this filter will be modified.""",
- Type:"list",
- Values: CannedScriptUtils.getAllOwnedFilters(true),
- ],
- [
- Name:FIELD_RESOLUTION_ID,
- Label:"New resolution",
- Description:"""Resolution to set.""",
- Type: "list",
- Values: CannedScriptUtils.getResolutionOptions(true),
- ],
- ]
- }
-
- public ErrorCollection doValidate(Map params, boolean forPreview) {
- ErrorCollection errorCollection = new SimpleErrorCollection()
- if (! params[FIELD_FILTER_ID]) {
- errorCollection.addError(FIELD_FILTER_ID, "Please enter the filter ID")
- }
- else {
- 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 = searchRequestService.getFilter(ctx, params[FIELD_FILTER_ID] as Long)
- SearchResults results = getSearchResults(sr)
- List issues = results.getIssues();
-
- Long nModIssues = 0
-
- for (Issue issue in issues)
- {
- issue = issueManager.getIssueObject(issue.getId())
-
- if (issue.resolutionId != params[FIELD_RESOLUTION_ID]) {
- log.debug "Fix resolution on issue: ${issue.key} - ${issue.summary}"
- boolean wasIndexing = ImportUtils.isIndexIssues();
- ImportUtils.setIndexIssues(true);
-
- try {
-
- issue.setResolutionId(params[FIELD_RESOLUTION_ID] as String)
- issue.store()
- nModIssues++
- }
- finally {
- if ((BuildUtils.getCurrentBuildNumber() as Long) < 614) {
- ManagerFactory.getCacheManager().flush(com.atlassian.jira.issue.cache.CacheManager.ISSUE_CACHE, issue)
- }
- indexManager.reIndex(issue);
- ImportUtils.setIndexIssues(wasIndexing);
- }
- }
- }
-
- ["output":"$nModIssues issue(s) modified."]
- }
-
- String getDescription(Map params, boolean forPreview) {
- SearchRequest sr = searchRequestService.getFilter(ctx, params[FIELD_FILTER_ID] as Long)
- SearchResults results = getSearchResults(sr)
-
- """Will operate on ${results.getTotal()} issue(s) from the \"${sr.getName()}\" filter...
- setting the resolution to
- ${params[FIELD_RESOLUTION_ID] ? constantsManager.getResolutionObject(params[FIELD_RESOLUTION_ID]).name : "None"}."""
- }
-
- private SearchResults getSearchResults(SearchRequest sr) {
- return FilterUtils.getSearchResults(sr)
- }
-
- public Boolean isFinalParamsPage(Map params) {
- true
- }
- }