PageRenderTime 27ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/resources/com/onresolve/jira/groovy/canned/utils/CannedScriptUtils.groovy

https://bitbucket.org/sorin/jira-plugin-intellij
Groovy | 259 lines | 205 code | 45 blank | 9 comment | 20 complexity | 72c62770a35190ed71c3a75928a2f76b MD5 | raw file
  1. package com.onresolve.jira.groovy.canned.utils
  2. import com.atlassian.jira.issue.resolution.Resolution
  3. import com.atlassian.jira.ComponentManager
  4. import com.atlassian.jira.workflow.JiraWorkflow
  5. import com.atlassian.jira.issue.priority.Priority
  6. import com.atlassian.jira.event.type.EventTypeManager
  7. import com.atlassian.jira.event.type.EventType
  8. import org.ofbiz.core.entity.GenericValue
  9. import com.opensymphony.workflow.loader.ActionDescriptor
  10. import com.atlassian.jira.issue.link.IssueLinkTypeManager
  11. import com.atlassian.jira.issue.link.IssueLinkType
  12. import com.atlassian.jira.config.ConstantsManager
  13. import com.atlassian.jira.issue.issuetype.IssueType
  14. import com.atlassian.jira.workflow.WorkflowManager
  15. import org.apache.log4j.Category
  16. import com.atlassian.jira.bc.filter.SearchRequestService
  17. import com.atlassian.jira.security.JiraAuthenticationContext
  18. import com.atlassian.jira.issue.search.SearchRequest
  19. import com.atlassian.jira.issue.fields.FieldManager
  20. import com.atlassian.jira.issue.fields.Field
  21. import com.atlassian.jira.issue.fields.CustomField
  22. import com.atlassian.jira.issue.customfields.impl.SelectCFType
  23. import com.atlassian.jira.issue.customfields.impl.MultiSelectCFType
  24. import com.atlassian.jira.issue.customfields.impl.CascadingSelectCFType
  25. /**
  26. * User: jechlin2
  27. * Date: 13-Dec-2010
  28. * Time: 18:52:50
  29. */
  30. class CannedScriptUtils {
  31. public static Category log = Category.getInstance(CannedScriptUtils.class)
  32. static final String OUTWARD_FIELD_NAME = "outward";
  33. static final String INWARD_FIELD_NAME = "inward";
  34. public static Map getResolutionOptions(boolean withBlankFirstEntry) {
  35. Map<String,String> rt = new LinkedHashMap()
  36. if (withBlankFirstEntry) {
  37. rt.put("", "None")
  38. }
  39. ComponentManager.getInstance().getConstantsManager().getResolutionObjects().collect {Resolution r ->
  40. rt.put(r.getId(), r.getName())
  41. }
  42. rt
  43. }
  44. public static Map getProjectOptions(boolean withBlankFirstEntry) {
  45. Map<String,String> rt = new LinkedHashMap()
  46. if (withBlankFirstEntry) {
  47. rt.put("", "")
  48. }
  49. ComponentManager.getInstance().getProjectManager().getProjects().collect {GenericValue gv ->
  50. rt.put(gv.key, gv.name)
  51. }
  52. rt
  53. }
  54. public static Map getPriorityOptions(boolean withBlankFirstEntry) {
  55. Map<String,String> rt = new LinkedHashMap()
  56. if (withBlankFirstEntry) {
  57. rt.put("", "")
  58. }
  59. ComponentManager.getInstance().getConstantsManager().getPriorityObjects().collect {Priority p ->
  60. rt.put(p.getId(), p.getName())
  61. }
  62. rt
  63. }
  64. public static Map getEvents(boolean withBlankFirstEntry) {
  65. Map<String,String> rt = new LinkedHashMap()
  66. if (withBlankFirstEntry) {
  67. rt.put("", "")
  68. }
  69. EventTypeManager eventTypeManager = ComponentManager.getInstance().getEventTypeManager()
  70. eventTypeManager.getEventTypes().each {EventType eventType ->
  71. rt.put(eventType.id as String, eventType.name)
  72. }
  73. rt
  74. }
  75. public static Map getAllWorkflowActions(boolean withBlankFirstEntry) {
  76. Map<String,String> rt = new LinkedHashMap<String,String>()
  77. if (withBlankFirstEntry) {
  78. rt.put("", "")
  79. }
  80. Map actions = new HashMap()
  81. WorkflowManager workflowManager = ComponentManager.getInstance().getWorkflowManager()
  82. workflowManager.getWorkflows().each {JiraWorkflow workflow ->
  83. if (workflow.hasDraftWorkflow()) {
  84. workflow = workflowManager.getDraftWorkflow(workflow.name)
  85. }
  86. workflow.getAllActions().each {ActionDescriptor ad ->
  87. String v = "${ad.name} ($ad.id)"
  88. if (! rt.values().contains(v)) {
  89. rt.put("$ad.id ${ad.name}", v)
  90. }
  91. }
  92. }
  93. rt.putAll(actions)
  94. rt.sort {it.value}
  95. }
  96. public static Map getAllIssueTypes(boolean withBlankFirstEntry, boolean includingSubtasks = false) {
  97. Map<String,String> rt = [:] as Map<String,String>
  98. if (withBlankFirstEntry) {
  99. rt.put("", "")
  100. }
  101. ComponentManager componentManager = ComponentManager.getInstance()
  102. ConstantsManager constantsManager = componentManager.getConstantsManager()
  103. constantsManager.getAllIssueTypeObjects().each {IssueType issueType ->
  104. if (includingSubtasks || ! issueType.isSubTask()) {
  105. rt.put(issueType.getId(), issueType.getName())
  106. }
  107. }
  108. rt
  109. }
  110. public static Map getAllSubTaskIssueTypes(boolean withBlankFirstEntry) {
  111. Map<String,String> rt = [:] as Map<String,String>
  112. if (withBlankFirstEntry) {
  113. rt.put("", "")
  114. }
  115. ComponentManager componentManager = ComponentManager.getInstance()
  116. ConstantsManager constantsManager = componentManager.getConstantsManager()
  117. constantsManager.getAllIssueTypeObjects().each {IssueType issueType ->
  118. if (issueType.isSubTask()) {
  119. rt.put(issueType.getId(), issueType.getName())
  120. }
  121. }
  122. rt
  123. }
  124. // Not used at the moment
  125. public static Map getAllWorkflowActions(String workflowNameOrNull) {
  126. Map<Integer,String> rt = [:] as Map<Integer,String>
  127. JiraWorkflow workflow = ComponentManager.getInstance().getWorkflowManager().getWorkflow(workflowNameOrNull)
  128. for (Object o in workflow.getAllActions()) {
  129. ActionDescriptor ad = (ActionDescriptor) o;
  130. rt.put(ad.getId(), "${ad.getName()} (${ad.getId()})")
  131. }
  132. rt.sort()
  133. }
  134. public static Map getAllLinkTypes(boolean withBlankFirstEntry) {
  135. Map<String,String> rt = [:] as Map<String,String>
  136. if (withBlankFirstEntry) {
  137. rt.put("", "")
  138. }
  139. IssueLinkTypeManager issueLinkTypeManager = ComponentManager.getComponentInstanceOfType(IssueLinkTypeManager.class) as IssueLinkTypeManager
  140. issueLinkTypeManager.getIssueLinkTypes().each {IssueLinkType issueLinkType ->
  141. rt.put(issueLinkType.getId() as String, issueLinkType.getName())
  142. }
  143. rt
  144. }
  145. public static Map getAllLinkTypesWithDirections(boolean withBlankFirstEntry) {
  146. Map<String,String> rt = [:] as Map<String,String>
  147. if (withBlankFirstEntry) {
  148. rt.put("", "")
  149. }
  150. IssueLinkTypeManager issueLinkTypeManager = ComponentManager.getComponentInstanceOfType(IssueLinkTypeManager.class) as IssueLinkTypeManager
  151. issueLinkTypeManager.getIssueLinkTypes().each {IssueLinkType issueLinkType ->
  152. // Don't bother with inward links for the moment - can't see the use right now
  153. rt.put("${issueLinkType.getId()} $OUTWARD_FIELD_NAME", issueLinkType.getOutward())
  154. rt.put("${issueLinkType.getId()} $INWARD_FIELD_NAME", issueLinkType.getInward())
  155. }
  156. rt
  157. }
  158. public static Map getAllOwnedFilters(boolean withBlankFirstEntry) {
  159. ComponentManager componentManager = ComponentManager.getInstance()
  160. SearchRequestService searchRequestService = componentManager.getSearchRequestService()
  161. JiraAuthenticationContext authenticationContext = componentManager.getJiraAuthenticationContext()
  162. Map<String,String> rt = [:] as Map<String,String>
  163. if (withBlankFirstEntry) {
  164. rt.put("", "")
  165. }
  166. searchRequestService.getOwnedFilters(authenticationContext.getUser()).each {SearchRequest sr ->
  167. rt.put(sr.id as String, sr.name)
  168. }
  169. rt
  170. }
  171. public static Map getAllFields (boolean withBlankFirstEntry) {
  172. // return a list of custom and system fields
  173. // No need to subtract the current field list? But it's acceptable to include the same field twice
  174. ComponentManager componentManager = ComponentManager.getInstance()
  175. FieldManager fieldManager = componentManager.getFieldManager()
  176. Set<Field> fields = fieldManager.getAllAvailableNavigableFields()
  177. Map<String,String> rt = [:] as Map<String,String>
  178. if (withBlankFirstEntry) {
  179. rt.put("", "")
  180. }
  181. fields.findAll {Field field ->
  182. !field.getName().startsWith("?")
  183. }
  184. .sort {Field a, Field b ->
  185. if (a.getName() && b.getName())
  186. return a.getName().compareToIgnoreCase(b.getName())
  187. else
  188. return -1
  189. }
  190. .each {
  191. rt.put(it.id, it.name)
  192. }
  193. rt
  194. }
  195. static boolean isSettableCFType(CustomField cf) {
  196. cf.getCustomFieldType() instanceof SelectCFType ||
  197. cf.getCustomFieldType() instanceof MultiSelectCFType ||
  198. cf.getCustomFieldType() instanceof CascadingSelectCFType
  199. }
  200. public static Map getFieldConfigSchemesByCustomField(boolean withBlankFirstEntry /*todo*/) {
  201. Map rt = [:]
  202. def customFieldManager = ComponentManager.getInstance().getCustomFieldManager()
  203. customFieldManager.getCustomFieldObjects().each {cf ->
  204. if (isSettableCFType(cf)) {
  205. Map configs = [:]
  206. cf.getConfigurationSchemes().each {fcs ->
  207. configs.put(fcs.id, fcs.name)
  208. }
  209. rt.put(cf.name, configs)
  210. }
  211. }
  212. rt
  213. }
  214. }