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

/src/main/groovy/com/onresolve/jira/groovy/CannedScriptListener.groovy

https://bitbucket.org/sorin/jira-plugin-intellij
Groovy | 190 lines | 157 code | 32 blank | 1 comment | 27 complexity | eea7ba72d19a1dcbec715097dad712f6 MD5 | raw file
  1. package com.onresolve.jira.groovy
  2. import com.atlassian.jira.ComponentManager
  3. import com.atlassian.jira.config.properties.PropertiesManager
  4. import com.atlassian.jira.event.ListenerManager
  5. import com.atlassian.jira.util.json.JSONArray
  6. import com.atlassian.jira.util.json.JSONObject
  7. import com.opensymphony.util.TextUtils
  8. import javax.servlet.ServletRequest
  9. import webwork.action.ServletActionContext
  10. class CannedScriptListener extends CannedScriptRunner {
  11. PropertiesManager pm = ComponentManager.getComponentInstanceOfType(PropertiesManager)
  12. private String id
  13. private String[] events
  14. private String[] projects
  15. ListenerManager listenerManager = (ListenerManager) ComponentManager.getInstance().getContainer().getComponentInstance(ListenerManager.class)
  16. private final String LISTENER_NAME = "Script Runner Uber-Listener";
  17. CannedScriptListener(ScriptManager scriptManager) {
  18. super(scriptManager)
  19. }
  20. @Override
  21. protected String doExecute() {
  22. ServletRequest servletRequest = ServletActionContext.getRequest();
  23. String rt = super.doExecute()
  24. Integer i = servletRequest.getParameter("id") ? servletRequest.getParameter("id") as Integer : null
  25. if (i != null) {
  26. setId(i.toString())
  27. }
  28. List configs = scriptManager.getListenerConfigs()
  29. boolean isAdd = TextUtils.stringSet(servletRequest.getParameter("AddListener"))
  30. boolean isEdit = TextUtils.stringSet(servletRequest.getParameter("EditListener"))
  31. if (isAdd && rt == SUCCESS) {
  32. if (!getEvents()?.toList()) {
  33. getErrorCollection().addError("events", "You must choose at least one event for that will fire this configuration")
  34. }
  35. if (!getProjects()?.toList()) {
  36. getErrorCollection().addError("projects", "You must choose at least one project, or All Projects, that will fire this configuration")
  37. }
  38. if (getErrorCollection().hasAnyErrors()) {
  39. return ERROR
  40. }
  41. }
  42. if (isAdd && rt == SUCCESS) {
  43. // add listener now
  44. if (i != null) {
  45. configs.remove(i)
  46. configs.add(i, [
  47. events: getEvents().toList(),
  48. projects : getProjects().toList(),
  49. params: getCannedScriptArgs(),
  50. clazz: getCannedScript(),
  51. ]
  52. )
  53. }
  54. else {
  55. configs.add(
  56. events: getEvents()?.toList(),
  57. projects : getProjects().toList(),
  58. params: getCannedScriptArgs(),
  59. clazz: getCannedScript(),
  60. )
  61. }
  62. saveConfig(configs)
  63. setCannedScript(null)
  64. return getRedirect("CannedScriptListener.jspa")
  65. }
  66. else if (isEdit) {
  67. Object config = configs.get(i)
  68. log.debug("config: " + config)
  69. setCannedScript(config["clazz"] as String)
  70. setCannedScriptArgs(config["params"] as Map)
  71. setProjects(config['projects'] as String[])
  72. setEvents(config["events"] as String[])
  73. }
  74. else if (["DeleteListener", "MoveDown", "MoveUp"].any {servletRequest.getParameter(it)}) {
  75. Object t = configs.remove(i)
  76. if (servletRequest.getParameter("MoveUp")) {
  77. configs.add(i - 1, t)
  78. }
  79. else if (servletRequest.getParameter("MoveDown")) {
  80. configs.add(i + 1, t)
  81. }
  82. saveConfig(configs)
  83. return getRedirect("CannedScriptListener.jspa")
  84. }
  85. return rt
  86. }
  87. public void getRedirect(String redirect) {
  88. ServletActionContext.getResponse().sendRedirect(redirect)
  89. }
  90. public def saveConfig(List configs) {
  91. pm.getPropertySet().setText(ScriptManagerImpl.CONFIG_LISTENERS, (configs as JSONArray).toString())
  92. }
  93. public List getConfig() {
  94. scriptManager.getListenerConfigs()
  95. }
  96. @Override
  97. String getCannedScriptHumanDesc(String className, Map actualArgs, boolean forPreview) {
  98. GroovyClassLoader gcl = getGcl();
  99. def script = gcl.loadClass(className, true, false).newInstance();
  100. if (script.respondsTo("getDescription", [Map, boolean] as Object[])) {
  101. return script.getDescription(actualArgs, forPreview)
  102. }
  103. else {
  104. return "Custom script: $className"
  105. }
  106. }
  107. public List getEventNames(List eventIds) {
  108. getEventTypesMap().entrySet().findAll {Map.Entry entry ->
  109. eventIds*.toLong()?.contains(entry.key)
  110. }.sort()*.value.name
  111. }
  112. public Map getEventTypesMap() {
  113. ComponentManager.getInstance().getEventTypeManager().getEventTypesMap()
  114. }
  115. public String getId() {
  116. this.id
  117. }
  118. public setId(String id) {
  119. this.id = id
  120. }
  121. public String[] getEvents() {
  122. return events;
  123. }
  124. public String[] getProjects() {
  125. return projects
  126. }
  127. public void setProjects(String[] projects) {
  128. this.projects = projects;
  129. }
  130. public void setEvents(String[] events) {
  131. this.events = events;
  132. }
  133. public boolean isEventSelected(String id) {
  134. getEvents()?.toList()?.contains(id)
  135. }
  136. public boolean isProjectSelected(String pkey) {
  137. getProjects()?.toList()?.contains(pkey)
  138. }
  139. public Object getAsActualType(Object o) {
  140. Object n = null
  141. if (o instanceof JSONArray) {
  142. n = []
  143. (0..o.length() - 1).each {int i ->
  144. n.add getAsActualType(o.get(i))
  145. }
  146. }
  147. else if (o instanceof JSONObject) {
  148. n = [:]
  149. o.keys().each {String k ->
  150. n.put(k, getAsActualType(o.get(k)))
  151. }
  152. }
  153. else {
  154. return o
  155. }
  156. return n
  157. }
  158. }