PageRenderTime 52ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://bitbucket.org/sorin/jira-plugin-intellij
Groovy | 154 lines | 120 code | 27 blank | 7 comment | 8 complexity | 8a661e51632702111e367dbc88cb26aa MD5 | raw file
  1. package com.onresolve.jira.groovy
  2. import com.atlassian.core.util.ClassLoaderUtils
  3. import com.atlassian.jira.ComponentManager
  4. import com.atlassian.jira.issue.CustomFieldManager
  5. import com.atlassian.jira.issue.fields.CustomField
  6. import com.atlassian.jira.issue.fields.config.FieldConfigScheme
  7. import com.atlassian.jira.issue.fields.config.manager.FieldConfigSchemeManager
  8. import com.atlassian.jira.util.json.JSONObject
  9. import com.atlassian.plugin.webresource.WebResourceManager
  10. import com.onresolve.jira.groovy.customfield.CustomFieldConfiguration
  11. import com.opensymphony.util.TextUtils
  12. import groovy.util.slurpersupport.GPathResult
  13. import javax.servlet.http.HttpServletRequest
  14. import webwork.action.ServletActionContext
  15. class ViewScriptedFields extends CannedScriptRunner {
  16. private String id = ""
  17. ComponentManager componentManager = ComponentManager.getInstance()
  18. CustomFieldManager customFieldManager = componentManager.getCustomFieldManager()
  19. ViewScriptedFields(ScriptManager scriptManager) {
  20. super(scriptManager)
  21. }
  22. @Override
  23. protected String doExecute() {
  24. WebResourceManager webResourceManager = ComponentManager.getInstance().getWebResourceManager()
  25. webResourceManager.requireResource("com.onresolve.jira.groovy.groovyrunner:adminPluginResources")
  26. HttpServletRequest request = ServletActionContext.getRequest()
  27. setId(request.getParameter("id"))
  28. boolean isEdit = TextUtils.stringSet(request.getParameter("EditField"))
  29. log.debug("id: " + request.getParameter("id"))
  30. // scriptManager.setupConfig()
  31. if (isEdit) {
  32. Map<Long, CustomFieldConfiguration> configs = getConfigs()
  33. CustomFieldConfiguration cfc = configs.get(getId() as Long)
  34. cfc.setScript(request.getParameter("script"))
  35. if (!request.getParameter("modelTemplate")) {
  36. addError("modelTemplate", "You must enter the name of the template to use.")
  37. // todo: codemirror does not work
  38. }
  39. if (! (request.getParameter("script") as Boolean ^ request.getParameter("scriptFile") as Boolean)) {
  40. def scriptError = "Enter either a script or a script file."
  41. addErrorMessage(scriptError)
  42. }
  43. if (hasAnyErrors()) {
  44. log.debug(getErrors())
  45. return ERROR
  46. }
  47. cfc.setTemplate(request.getParameter("template"))
  48. cfc.setModelTemplate(request.getParameter("modelTemplate"))
  49. cfc.setScriptFile(request.getParameter("scriptFile"))
  50. cfc.setCustomTemplate(request.getParameter("customTemplate"))
  51. configs.put(getId() as Long, cfc)
  52. Map mapToSave = new HashMap()
  53. configs.each {Long k, CustomFieldConfiguration v ->
  54. mapToSave.put(k as String, v.asMap())
  55. }
  56. JSONObject jSONObject = new JSONObject(mapToSave)
  57. log.debug("mapToSave: ${mapToSave}")
  58. log.debug("Saving: ${jSONObject.toString()}")
  59. scriptManager.saveConfig(jSONObject)
  60. return ServletActionContext.getResponse().sendRedirect(("ViewScriptedFields.jspa"))
  61. }
  62. return super.doExecute()
  63. }
  64. public Map<Long, CustomFieldConfiguration> getConfigs() {
  65. Map<Long, CustomFieldConfiguration> rt = [:]
  66. // populate with all possible fields then overlay
  67. FieldConfigSchemeManager fieldConfigSchemeManager = ComponentManager.getComponentInstanceOfType(FieldConfigSchemeManager.class)
  68. // log.debug("applicable cfs")
  69. // log.debug(customFieldManager.getCustomFieldObjects().findAll{cf -> cf.customFieldType.getClass().getName() == "com.onresolve.jira.groovy.GroovyCustomField"})
  70. customFieldManager.getCustomFieldObjects().findAll {CustomField cf ->
  71. // more classloader silliness
  72. cf.customFieldType.getClass().getName() == "com.onresolve.jira.groovy.GroovyCustomField"
  73. }.each {CustomField cf ->
  74. List<FieldConfigScheme> configSchemes = fieldConfigSchemeManager.getConfigSchemesForField(cf)
  75. configSchemes.each {FieldConfigScheme fcs ->
  76. CustomFieldConfiguration cfc = new CustomFieldConfiguration(cf.name, fcs.name, cf.idAsLong)
  77. rt.put(fcs.id as Long, cfc)
  78. }
  79. }
  80. scriptManager.getConfigs().each {Long k, CustomFieldConfiguration v ->
  81. if (rt.containsKey(k)) {
  82. CustomFieldConfiguration fieldConfiguration = rt.get(k)
  83. fieldConfiguration.setTemplate(v.getTemplate())
  84. fieldConfiguration.setScript(v.getScript())
  85. fieldConfiguration.setModelTemplate(v.getModelTemplate())
  86. fieldConfiguration.setCustomTemplate(v.getCustomTemplate())
  87. fieldConfiguration.setScriptFile(v.getScriptFile())
  88. }
  89. else {
  90. log.warn("Configuration for deleted field - remove")
  91. }
  92. }
  93. rt
  94. }
  95. public Map getTemplateModels() {
  96. GPathResult gpath = new XmlSlurper().parse(ClassLoaderUtils.getResourceAsStream("system-customfieldtypes-plugin.xml", getClass()))
  97. Map templateModels = new LinkedHashMap()
  98. List allowedTemplates = ["textarea", "datetime", "float", "userpicker"]
  99. gpath."customfield-type".each {cft ->
  100. // for the time being we need to restrict this
  101. if (allowedTemplates.contains(cft."@key".text())) {
  102. templateModels.put(cft."@key".text(), cft."@name".text())
  103. }
  104. }
  105. templateModels.put("html", "HTML")
  106. templateModels.put("custom", "Custom")
  107. templateModels
  108. }
  109. public String getDisplayNameForSearcher(String key) {
  110. getTemplateModels().get(key)
  111. }
  112. public preview() {
  113. new JSONObject(["a":"b"])
  114. }
  115. public String getConfiguredSearcherClass(Long cfId) {
  116. customFieldManager.getCustomFieldObject(cfId).getCustomFieldSearcher()?.getClass()?.getName() ?: "None"
  117. }
  118. public String getConfiguredSearcherName(Long cfId) {
  119. customFieldManager.getCustomFieldObject(cfId).getCustomFieldSearcher()?.getDescriptor()?.getName() ?: "None"
  120. }
  121. public String getId() {
  122. this.id
  123. }
  124. public setId(String id) {
  125. this.id = id
  126. }
  127. }