From 9d20f79087eb1abf4d613b4a88788c272fde10fb Mon Sep 17 00:00:00 2001 From: Ariel Backenroth Date: Sat, 9 Dec 2006 03:42:08 +0000 Subject: [PATCH] scrubbing repeat prototypes from generated xml git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4563 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../web/forms/xforms/SchemaFormBuilder.java | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java b/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java index a5cb843c36..79b07973ba 100644 --- a/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java +++ b/source/java/org/alfresco/web/forms/xforms/SchemaFormBuilder.java @@ -648,7 +648,44 @@ public class SchemaFormBuilder public void removePrototypeNodes(final Element instanceDocumentElement) { - + final Map> prototypes = + new HashMap>(); + final NodeList children = instanceDocumentElement.getChildNodes(); + for (int i = 0; i < children.getLength(); i++) + { + if (! (children.item(i) instanceof Element)) + { + continue; + } + final String nodeName = children.item(i).getNodeName(); + if (! prototypes.containsKey(nodeName)) + { + prototypes.put(nodeName, new LinkedList()); + } + prototypes.get(nodeName).add((Element)children.item(i)); + } + + for (LinkedList l : prototypes.values()) + { + for (Element e : l) + { + if (e.hasAttributeNS(SchemaFormBuilder.ALFRESCO_NS, "prototype")) + { + assert "true".equals(e.getAttributeNS(SchemaFormBuilder.ALFRESCO_NS, + "prototype")); + e.removeAttributeNS(SchemaFormBuilder.ALFRESCO_NS, "prototype"); + + if (l.getLast().equals(e)) + { + e.getParentNode().removeChild(e); + } + } + if (e.getParentNode() != null) + { + this.removePrototypeNodes(e); + } + } + } }