/src/main/groovy/com/onresolve/jira/groovy/ViewScriptedFields.groovy
Groovy | 154 lines | 120 code | 27 blank | 7 comment | 8 complexity | 8a661e51632702111e367dbc88cb26aa MD5 | raw file
- package com.onresolve.jira.groovy
-
- import com.atlassian.core.util.ClassLoaderUtils
- import com.atlassian.jira.ComponentManager
- import com.atlassian.jira.issue.CustomFieldManager
- import com.atlassian.jira.issue.fields.CustomField
- import com.atlassian.jira.issue.fields.config.FieldConfigScheme
- import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager
- import com.atlassian.jira.util.json.JSONObject
- import com.atlassian.plugin.webresource.WebResourceManager
- import com.onresolve.jira.groovy.customfield.CustomFieldConfiguration
- import com.opensymphony.util.TextUtils
- import groovy.util.slurpersupport.GPathResult
- import javax.servlet.http.HttpServletRequest
- import webwork.action.ServletActionContext
-
- class ViewScriptedFields extends CannedScriptRunner {
-
- private String id = ""
- ComponentManager componentManager = ComponentManager.getInstance()
- CustomFieldManager customFieldManager = componentManager.getCustomFieldManager()
-
- ViewScriptedFields(ScriptManager scriptManager) {
- super(scriptManager)
- }
-
- @Override
- protected String doExecute() {
- WebResourceManager webResourceManager = ComponentManager.getInstance().getWebResourceManager()
- webResourceManager.requireResource("com.onresolve.jira.groovy.groovyrunner:adminPluginResources")
- HttpServletRequest request = ServletActionContext.getRequest()
- setId(request.getParameter("id"))
- boolean isEdit = TextUtils.stringSet(request.getParameter("EditField"))
- log.debug("id: " + request.getParameter("id"))
-
- // scriptManager.setupConfig()
-
- if (isEdit) {
- Map<Long, CustomFieldConfiguration> configs = getConfigs()
- CustomFieldConfiguration cfc = configs.get(getId() as Long)
- cfc.setScript(request.getParameter("script"))
- if (!request.getParameter("modelTemplate")) {
- addError("modelTemplate", "You must enter the name of the template to use.")
- // todo: codemirror does not work
- }
-
- if (! (request.getParameter("script") as Boolean ^ request.getParameter("scriptFile") as Boolean)) {
- def scriptError = "Enter either a script or a script file."
- addErrorMessage(scriptError)
- }
-
- if (hasAnyErrors()) {
- log.debug(getErrors())
- return ERROR
- }
-
- cfc.setTemplate(request.getParameter("template"))
- cfc.setModelTemplate(request.getParameter("modelTemplate"))
- cfc.setScriptFile(request.getParameter("scriptFile"))
- cfc.setCustomTemplate(request.getParameter("customTemplate"))
- configs.put(getId() as Long, cfc)
- Map mapToSave = new HashMap()
- configs.each {Long k, CustomFieldConfiguration v ->
- mapToSave.put(k as String, v.asMap())
- }
- JSONObject jSONObject = new JSONObject(mapToSave)
- log.debug("mapToSave: ${mapToSave}")
- log.debug("Saving: ${jSONObject.toString()}")
- scriptManager.saveConfig(jSONObject)
- return ServletActionContext.getResponse().sendRedirect(("ViewScriptedFields.jspa"))
- }
- return super.doExecute()
- }
-
-
- public Map<Long, CustomFieldConfiguration> getConfigs() {
- Map<Long, CustomFieldConfiguration> rt = [:]
-
- // populate with all possible fields then overlay
- FieldConfigSchemeManager fieldConfigSchemeManager = ComponentManager.getComponentInstanceOfType(FieldConfigSchemeManager.class)
-
- // log.debug("applicable cfs")
- // log.debug(customFieldManager.getCustomFieldObjects().findAll{cf -> cf.customFieldType.getClass().getName() == "com.onresolve.jira.groovy.GroovyCustomField"})
-
- customFieldManager.getCustomFieldObjects().findAll {CustomField cf ->
- // more classloader silliness
- cf.customFieldType.getClass().getName() == "com.onresolve.jira.groovy.GroovyCustomField"
- }.each {CustomField cf ->
- List<FieldConfigScheme> configSchemes = fieldConfigSchemeManager.getConfigSchemesForField(cf)
- configSchemes.each {FieldConfigScheme fcs ->
- CustomFieldConfiguration cfc = new CustomFieldConfiguration(cf.name, fcs.name, cf.idAsLong)
- rt.put(fcs.id as Long, cfc)
- }
- }
-
- scriptManager.getConfigs().each {Long k, CustomFieldConfiguration v ->
- if (rt.containsKey(k)) {
- CustomFieldConfiguration fieldConfiguration = rt.get(k)
- fieldConfiguration.setTemplate(v.getTemplate())
- fieldConfiguration.setScript(v.getScript())
- fieldConfiguration.setModelTemplate(v.getModelTemplate())
- fieldConfiguration.setCustomTemplate(v.getCustomTemplate())
- fieldConfiguration.setScriptFile(v.getScriptFile())
- }
- else {
- log.warn("Configuration for deleted field - remove")
- }
- }
-
- rt
- }
-
- public Map getTemplateModels() {
- GPathResult gpath = new XmlSlurper().parse(ClassLoaderUtils.getResourceAsStream("system-customfieldtypes-plugin.xml", getClass()))
- Map templateModels = new LinkedHashMap()
-
- List allowedTemplates = ["textarea", "datetime", "float", "userpicker"]
-
- gpath."customfield-type".each {cft ->
- // for the time being we need to restrict this
- if (allowedTemplates.contains(cft."@key".text())) {
- templateModels.put(cft."@key".text(), cft."@name".text())
- }
- }
- templateModels.put("html", "HTML")
- templateModels.put("custom", "Custom")
- templateModels
- }
-
- public String getDisplayNameForSearcher(String key) {
- getTemplateModels().get(key)
- }
-
- public preview() {
- new JSONObject(["a":"b"])
-
- }
-
- public String getConfiguredSearcherClass(Long cfId) {
- customFieldManager.getCustomFieldObject(cfId).getCustomFieldSearcher()?.getClass()?.getName() ?: "None"
- }
-
- public String getConfiguredSearcherName(Long cfId) {
- customFieldManager.getCustomFieldObject(cfId).getCustomFieldSearcher()?.getDescriptor()?.getName() ?: "None"
- }
-
- public String getId() {
- this.id
- }
-
- public setId(String id) {
- this.id = id
- }
- }