/src/main/groovy/com/onresolve/jira/groovy/CannedScriptListener.groovy
Groovy | 190 lines | 157 code | 32 blank | 1 comment | 27 complexity | eea7ba72d19a1dcbec715097dad712f6 MD5 | raw file
- package com.onresolve.jira.groovy
-
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.config.properties.PropertiesManager
- import com.atlassian.jira.event.ListenerManager
- import com.atlassian.jira.util.json.JSONArray
- import com.atlassian.jira.util.json.JSONObject
- import com.opensymphony.util.TextUtils
- import javax.servlet.ServletRequest
- import webwork.action.ServletActionContext
-
- class CannedScriptListener extends CannedScriptRunner {
-
- PropertiesManager pm = ComponentManager.getComponentInstanceOfType(PropertiesManager)
- private String id
- private String[] events
- private String[] projects
- ListenerManager listenerManager = (ListenerManager) ComponentManager.getInstance().getContainer().getComponentInstance(ListenerManager.class)
- private final String LISTENER_NAME = "Script Runner Uber-Listener";
-
- CannedScriptListener(ScriptManager scriptManager) {
- super(scriptManager)
- }
-
- @Override
- protected String doExecute() {
- ServletRequest servletRequest = ServletActionContext.getRequest();
- String rt = super.doExecute()
- Integer i = servletRequest.getParameter("id") ? servletRequest.getParameter("id") as Integer : null
- if (i != null) {
- setId(i.toString())
- }
-
- List configs = scriptManager.getListenerConfigs()
-
- boolean isAdd = TextUtils.stringSet(servletRequest.getParameter("AddListener"))
- boolean isEdit = TextUtils.stringSet(servletRequest.getParameter("EditListener"))
-
- if (isAdd && rt == SUCCESS) {
- if (!getEvents()?.toList()) {
- getErrorCollection().addError("events", "You must choose at least one event for that will fire this configuration")
- }
-
- if (!getProjects()?.toList()) {
- getErrorCollection().addError("projects", "You must choose at least one project, or All Projects, that will fire this configuration")
- }
-
- if (getErrorCollection().hasAnyErrors()) {
- return ERROR
- }
- }
-
- if (isAdd && rt == SUCCESS) {
- // add listener now
-
- if (i != null) {
- configs.remove(i)
- configs.add(i, [
- events: getEvents().toList(),
- projects : getProjects().toList(),
- params: getCannedScriptArgs(),
- clazz: getCannedScript(),
- ]
- )
- }
- else {
- configs.add(
- events: getEvents()?.toList(),
- projects : getProjects().toList(),
- params: getCannedScriptArgs(),
- clazz: getCannedScript(),
- )
- }
-
- saveConfig(configs)
- setCannedScript(null)
- return getRedirect("CannedScriptListener.jspa")
- }
- else if (isEdit) {
- Object config = configs.get(i)
- log.debug("config: " + config)
- setCannedScript(config["clazz"] as String)
- setCannedScriptArgs(config["params"] as Map)
- setProjects(config['projects'] as String[])
- setEvents(config["events"] as String[])
- }
- else if (["DeleteListener", "MoveDown", "MoveUp"].any {servletRequest.getParameter(it)}) {
- Object t = configs.remove(i)
- if (servletRequest.getParameter("MoveUp")) {
- configs.add(i - 1, t)
- }
- else if (servletRequest.getParameter("MoveDown")) {
- configs.add(i + 1, t)
- }
-
- saveConfig(configs)
-
- return getRedirect("CannedScriptListener.jspa")
- }
- return rt
- }
-
- public void getRedirect(String redirect) {
- ServletActionContext.getResponse().sendRedirect(redirect)
- }
-
- public def saveConfig(List configs) {
- pm.getPropertySet().setText(ScriptManagerImpl.CONFIG_LISTENERS, (configs as JSONArray).toString())
- }
-
- public List getConfig() {
- scriptManager.getListenerConfigs()
- }
-
- @Override
- String getCannedScriptHumanDesc(String className, Map actualArgs, boolean forPreview) {
- GroovyClassLoader gcl = getGcl();
- def script = gcl.loadClass(className, true, false).newInstance();
- if (script.respondsTo("getDescription", [Map, boolean] as Object[])) {
- return script.getDescription(actualArgs, forPreview)
- }
- else {
- return "Custom script: $className"
- }
- }
-
-
-
- public List getEventNames(List eventIds) {
- getEventTypesMap().entrySet().findAll {Map.Entry entry ->
- eventIds*.toLong()?.contains(entry.key)
- }.sort()*.value.name
- }
-
- public Map getEventTypesMap() {
- ComponentManager.getInstance().getEventTypeManager().getEventTypesMap()
- }
-
- public String getId() {
- this.id
- }
-
- public setId(String id) {
- this.id = id
- }
-
- public String[] getEvents() {
- return events;
- }
-
- public String[] getProjects() {
- return projects
- }
-
- public void setProjects(String[] projects) {
- this.projects = projects;
- }
-
- public void setEvents(String[] events) {
- this.events = events;
- }
-
- public boolean isEventSelected(String id) {
- getEvents()?.toList()?.contains(id)
- }
-
- public boolean isProjectSelected(String pkey) {
- getProjects()?.toList()?.contains(pkey)
- }
-
- public Object getAsActualType(Object o) {
- Object n = null
- if (o instanceof JSONArray) {
- n = []
- (0..o.length() - 1).each {int i ->
- n.add getAsActualType(o.get(i))
- }
- }
- else if (o instanceof JSONObject) {
- n = [:]
- o.keys().each {String k ->
- n.put(k, getAsActualType(o.get(k)))
- }
- }
- else {
- return o
- }
- return n
- }
- }