diff --git a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java index 5f35be646d..6b6791b1c5 100644 --- a/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/CreateFormWizard.java @@ -583,11 +583,13 @@ public class CreateFormWizard */ public String removeUploadedSchemaFile() { + LOGGER.debug("removing uploaded rendering engine template file " + + this.getRenderingEngineTemplateFileName()); this.clearUpload(FILE_SCHEMA); this.schemaRootElementNameChoices = null; this.schema = null; this.schemaFileName = null; - + assert this.getSchemaFileName() == null; // refresh the current page return null; } @@ -597,8 +599,11 @@ public class CreateFormWizard */ public String removeUploadedRenderingEngineTemplateFile() { - clearUpload(FILE_RENDERING_ENGINE_TEMPLATE); - + LOGGER.debug("removing uploaded rendering engine template file " + + this.getRenderingEngineTemplateFileName()); + this.clearUpload(FILE_RENDERING_ENGINE_TEMPLATE); + this.renderingEngineTemplateFileName = null; + assert this.getRenderingEngineTemplateFileName() == null; // refresh the current page return null; } diff --git a/source/java/org/alfresco/web/bean/wcm/EditFormWizard.java b/source/java/org/alfresco/web/bean/wcm/EditFormWizard.java index ae62bddab6..7defb102d0 100644 --- a/source/java/org/alfresco/web/bean/wcm/EditFormWizard.java +++ b/source/java/org/alfresco/web/bean/wcm/EditFormWizard.java @@ -137,6 +137,7 @@ public class EditFormWizard this.new RenderingEngineTemplateData(ret); this.renderingEngineTemplates.add(data); } + this.removedRenderingEngineTemplates = null; } /** @@ -192,7 +193,7 @@ public class EditFormWizard if (this.getSchemaFile() != null) { - FileInfo fileInfo = + final FileInfo fileInfo = this.fileFolderService.create(formNodeRef, this.getSchemaFileName(), ContentModel.TYPE_CONTENT); @@ -211,13 +212,16 @@ public class EditFormWizard if (this.removedRenderingEngineTemplates != null) { - for (RenderingEngineTemplateData retd : this.removedRenderingEngineTemplates) + for (final RenderingEngineTemplateData retd : this.removedRenderingEngineTemplates) { + LOGGER.debug("removing rendering engine template " + retd); + assert retd != null; + assert retd.getNodeRef() != null; this.nodeService.removeChild(formNodeRef, retd.getNodeRef()); } } - for (RenderingEngineTemplateData retd : this.renderingEngineTemplates) + for (final RenderingEngineTemplateData retd : this.renderingEngineTemplates) { if (retd.getFile() != null) { diff --git a/source/java/org/alfresco/web/forms/RenderingEngineTemplateImpl.java b/source/java/org/alfresco/web/forms/RenderingEngineTemplateImpl.java index a5fc18e72b..deb23f42c4 100644 --- a/source/java/org/alfresco/web/forms/RenderingEngineTemplateImpl.java +++ b/source/java/org/alfresco/web/forms/RenderingEngineTemplateImpl.java @@ -32,6 +32,7 @@ import freemarker.template.TemplateModelException; import java.io.*; import java.net.URI; import java.net.URISyntaxException; +import java.net.URLEncoder; import java.text.MessageFormat; import java.util.*; import javax.faces.context.FacesContext; @@ -57,6 +58,7 @@ import org.alfresco.service.cmr.remote.AVMRemote; import org.alfresco.web.app.Application; import org.alfresco.web.bean.repository.Repository; import org.alfresco.web.bean.wcm.AVMConstants; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.web.context.WebApplicationContext; @@ -378,10 +380,15 @@ public class RenderingEngineTemplateImpl } } - URI uri = null; try { - uri = new URI(webappUrl + (name.charAt(0) == '/' ? name : '/' + name)); + final String[] path = (name.startsWith("/") ? name.substring(1) : name).split("/"); + for (int i = 0; i < path.length; i++) + { + path[i] = URLEncoder.encode(path[i], "utf-8").replace("+", "%20"); + } + + final URI uri = new URI(webappUrl + '/' + StringUtils.join(path, '/')); if (LOGGER.isDebugEnabled()) LOGGER.debug("loading " + uri); return uri.toURL().openStream(); diff --git a/source/java/org/alfresco/web/forms/XMLUtil.java b/source/java/org/alfresco/web/forms/XMLUtil.java index 1c56404ca0..71da4c06a9 100644 --- a/source/java/org/alfresco/web/forms/XMLUtil.java +++ b/source/java/org/alfresco/web/forms/XMLUtil.java @@ -149,10 +149,15 @@ public class XMLUtil throws SAXException, IOException { - final DocumentBuilder db = XMLUtil.getDocumentBuilder(); - final Document result = db.parse(source); - source.close(); - return result; + try + { + final DocumentBuilder db = XMLUtil.getDocumentBuilder(); + return db.parse(source); + } + finally + { + source.close(); + } } /** provides a document builder that is namespace aware but not validating by default */ diff --git a/source/test-resources/xforms/unit-tests/rendering-engine-test/form-data-functions-test.ftl b/source/test-resources/xforms/unit-tests/rendering-engine-test/form-data-functions-test.ftl index 3e20f0bf11..cbaeaf0462 100644 --- a/source/test-resources/xforms/unit-tests/rendering-engine-test/form-data-functions-test.ftl +++ b/source/test-resources/xforms/unit-tests/rendering-engine-test/form-data-functions-test.ftl @@ -54,7 +54,7 @@
Values from xml files generated by in ${alf.parent_path}: