PageRenderTime 38ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/resources/examples/RollbackCompentsCockup.groovy

https://bitbucket.org/sorin/scriptrunner-public-sorin
Groovy | 111 lines | 85 code | 22 blank | 4 comment | 11 complexity | 85eb33e77ad826e57f3e77b6566e9242 MD5 | raw file
  1. package examples
  2. import com.atlassian.jira.web.bean.PagerFilter
  3. import com.atlassian.core.ofbiz.CoreFactory
  4. import com.atlassian.jira.ComponentManager
  5. import com.atlassian.jira.issue.IssueManager
  6. import com.atlassian.jira.issue.MutableIssue
  7. import com.atlassian.jira.issue.fields.option.OptionSetManager
  8. import org.ofbiz.core.entity.GenericValue
  9. import com.atlassian.jira.issue.search.SearchRequest
  10. import com.atlassian.query.Query
  11. import com.atlassian.jira.jql.builder.JqlQueryBuilder
  12. import com.atlassian.jira.project.ProjectManager
  13. import com.atlassian.jira.project.Project
  14. import com.atlassian.jira.issue.search.SearchResults
  15. import com.atlassian.jira.issue.search.SearchProvider
  16. import com.atlassian.jira.security.JiraAuthenticationContext
  17. import com.atlassian.jira.bc.filter.SearchRequestService
  18. import com.atlassian.jira.bc.JiraServiceContext
  19. import com.atlassian.jira.bc.JiraServiceContextImpl
  20. import com.atlassian.jira.issue.Issue
  21. import org.apache.log4j.Category
  22. import org.apache.log4j.Level
  23. import com.atlassian.jira.bc.project.component.ProjectComponentManager
  24. import com.atlassian.jira.project.AssigneeTypes
  25. import com.atlassian.jira.bc.project.component.ProjectComponent
  26. import com.atlassian.jira.issue.util.IssueUpdater
  27. import com.atlassian.jira.issue.util.IssueUpdateBean
  28. import com.atlassian.jira.event.type.EventType
  29. import webwork.dispatcher.ActionResult
  30. import com.atlassian.core.action.ActionUtils
  31. import com.sun.deploy.net.HttpRequest
  32. // CONFIG
  33. String projectKey = "TITAN"
  34. // END CONFIG
  35. log.setLevel(Level.WARN)
  36. ComponentManager componentManager = ComponentManager.getInstance()
  37. OptionSetManager optionSetManager = ComponentManager.getComponentInstanceOfType(OptionSetManager.class)
  38. IssueUpdater updater = componentManager.getIssueUpdater()
  39. SearchProvider searchProvider = componentManager.getSearchProvider()
  40. JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
  41. SearchRequestService searchRequestService = componentManager.getSearchRequestService()
  42. JiraServiceContext ctx = new JiraServiceContextImpl(authenticationContext.getUser());
  43. ProjectComponentManager pcManager = componentManager.getProjectComponentManager()
  44. IssueManager issueManager = componentManager.getIssueManager()
  45. ProjectManager projectManager = componentManager.getProjectManager()
  46. Project project = projectManager.getProjectObjByKey(projectKey)
  47. JqlQueryBuilder jqlQueryBuilder = JqlQueryBuilder.newBuilder()
  48. Query query = jqlQueryBuilder.where().project(project.id).buildQuery()
  49. def sr = new SearchRequest(query)
  50. SearchResults results
  51. results = searchProvider.search(sr.getQuery(), authenticationContext.getUser(), PagerFilter.getUnlimitedFilter())
  52. log.debug results
  53. List issues = results.getIssues();
  54. Map fixIssues = [:]
  55. Set<String> allComponents = []
  56. for (Issue issue in issues) {
  57. Collection<GenericValue> changeGroups = CoreFactory.getGenericDelegator().findByAnd("ChangeGroup", ["issue": issue.id]);
  58. GenericValue badChange = (changeGroups as List).reverse().find {GenericValue changeGroup ->
  59. changeGroup.getRelated("ChildChangeItem").find {GenericValue changeItem ->
  60. changeItem.get("field") == "Component" && changeItem.get("newstring") == null && changeItem.get("oldstring") != null
  61. }
  62. } as GenericValue
  63. if (badChange) {
  64. List comps = badChange.getRelated("ChildChangeItem").findAll {GenericValue changeItem ->
  65. changeItem.get("field") == "Component"
  66. }*.get("oldstring")
  67. comps.remove(null)
  68. log.debug("Issue ${issue.key} had commpoents $comps")
  69. fixIssues.put(issue.key, comps)
  70. allComponents.addAll(comps)
  71. }
  72. }
  73. log.debug("Create components $allComponents")
  74. allComponents.each {String compName ->
  75. if (compName != null && !pcManager.findByComponentName(project.id, compName)) {
  76. pcManager.create(compName, "", null, AssigneeTypes.PROJECT_DEFAULT, project.id)
  77. }
  78. }
  79. fixIssues.each {String key, List comps ->
  80. MutableIssue issue = issueManager.getIssueObject(key)
  81. log.debug("Fix issue ${issue.key}")
  82. List<ProjectComponent> compObjects = comps.collect {pcManager.findByComponentName(project.id, it)}
  83. issue.setComponents(compObjects*.genericValue)
  84. // IssueUpdateBean iub = new IssueUpdateBean(issue, issueManager.getIssueObject(key), EventType.ISSUE_UPDATED_ID, authenticationContext.getUser(), false, false)
  85. // updater.doUpdate(iub, false)
  86. Map parameters = ["issueObject": issue, "issue" : issue.getGenericValue(), "remoteUser": authenticationContext.getUser(), "sendMail": false]
  87. ActionResult aResult = CoreFactory.getActionDispatcher().execute(com.atlassian.jira.action.ActionNames.ISSUE_UPDATE, parameters );
  88. ActionUtils.checkForErrors( aResult );
  89. }