Author: tfennelly
Date: 2010-11-12 15:05:03 -0500 (Fri, 12 Nov 2010)
New Revision: 26530
Added:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/AddCollectionResult.java
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/RemoveResult.java
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/META-INF/MANIFEST.MF
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/Mapping.java
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/TemplateBuilder.java
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/freemarker/FreeMarkerTemplateBuilder.java
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/util/FreeMarkerUtil.java
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/xml/XMLFreeMarkerTemplateBuilder.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/model/AbstractSmooksGraphicalModel.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeConnection.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeModel.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/graphical/editors/model/freemarker/FreemarkerTemplateNodeGraphicalModel.java
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XMLSampleXMLFreeMarkerTemplateBuilderTest.java
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XSDXMLFreeMarkerTemplateBuilderTest.java
Log:
https://jira.jboss.org/browse/JBIDE-7097
Removing a CollectionMapping should also remove all sub-mappings
https://jira.jboss.org/browse/JBIDE-7574
Delete sub mappings on CollectionMapping addition
Modified: trunk/smooks/plugins/org.jboss.tools.smooks.templating/META-INF/MANIFEST.MF
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.templating/META-INF/MANIFEST.MF 2010-11-12
19:00:05 UTC (rev 26529)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.templating/META-INF/MANIFEST.MF 2010-11-12
20:05:03 UTC (rev 26530)
@@ -42,6 +42,7 @@
org.jboss.tools.smooks.templating.template.csv,
org.jboss.tools.smooks.templating.template.exception,
org.jboss.tools.smooks.templating.template.freemarker,
+ org.jboss.tools.smooks.templating.template.result,
org.jboss.tools.smooks.templating.template.util,
org.jboss.tools.smooks.templating.template.xml
Bundle-Activator: org.jboss.tools.smooks.templating.SmooksTemplatingActivator
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/Mapping.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/Mapping.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/Mapping.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -24,7 +24,6 @@
import org.eclipse.core.runtime.Assert;
import org.jboss.tools.smooks.templating.model.ModelBuilder;
-import org.w3c.dom.Attr;
import org.w3c.dom.Node;
/**
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/TemplateBuilder.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/TemplateBuilder.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/TemplateBuilder.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -40,10 +40,13 @@
import org.jboss.tools.smooks.templating.template.exception.InvalidMappingException;
import org.jboss.tools.smooks.templating.template.exception.TemplateBuilderException;
import
org.jboss.tools.smooks.templating.template.exception.UnmappedCollectionNodeException;
+import org.jboss.tools.smooks.templating.template.result.AddCollectionResult;
+import org.jboss.tools.smooks.templating.template.result.RemoveResult;
import org.jboss.tools.smooks.templating.template.util.FreeMarkerUtil;
import org.milyn.xml.DomUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -159,26 +162,29 @@
* @throws InvalidMappingException
* Invalid mapping.
*/
- public CollectionMapping addCollectionMapping(String srcCollectionPath, Element
modelCollectionPath, String collectionItemName)
- throws InvalidMappingException {
+ public AddCollectionResult addCollectionMapping(String srcCollectionPath, Element
modelCollectionPath, String collectionItemName) throws InvalidMappingException {
asserValidMappingNode(modelCollectionPath);
assertCollectionsMapped(modelCollectionPath.getParentNode());
CollectionMapping mapping = new CollectionMapping(srcCollectionPath,
modelCollectionPath, collectionItemName);
mappings.add(mapping);
addHideNodes(modelCollectionPath, mapping);
+
+ List<Mapping> removeMappings = new ArrayList<Mapping>();
+ findChildMappings(modelCollectionPath, mapping, parseSourcePath(mapping),
removeMappings);
+
+ AddCollectionResult result = new AddCollectionResult(mapping, removeMappings);
- return mapping;
+ return result;
}
/**
- * Remove the specified mapping
+ * Remove the specified mapping.
*
- * @param mapping
- * The mapping instance to be removed.
- * @return A list of hidden Nodes that should be shown again.
+ * @param mapping The mapping instance to be removed.
+ * @return The remove mapping result.
*/
- public List<Node> removeMapping(Mapping mapping) {
+ public RemoveResult removeMapping(Mapping mapping) {
List<Node> showNodes = new ArrayList<Node>();
mappings.remove(mapping);
@@ -194,7 +200,13 @@
}
}
- return showNodes;
+ // If the mapping is a collection mapping, we need to remove all child mappings...
+ List<Mapping> removeMappings = new ArrayList<Mapping>();
+ if(mapping instanceof CollectionMapping) {
+ findChildMappings((Element)mapping.getMappingNode(), (CollectionMapping)mapping,
parseSourcePath(mapping), removeMappings);
+ }
+
+ return new RemoveResult(removeMappings, showNodes);
}
private void addHideNodes(Node modelPath, Mapping mapping) {
@@ -214,6 +226,65 @@
}
}
+ private void findChildMappings(Element modelPath, CollectionMapping collectionMapping,
String[] srcPathTokens, List<Mapping> mappings) {
+ // Find any Mappings to nodes inside the collection mapping node,
+ // where that mapping's source path is also inside the mapping source path of
+ // the supplied collection mapping...
+
+ // Check the attributes...
+ NamedNodeMap attributes = modelPath.getAttributes();
+ int attribCount = attributes.getLength();
+ for(int i = 0; i < attribCount; i++) {
+ Node attribNode = attributes.item(i);
+ Mapping attribMapping = getMapping(attribNode);
+
+ if(attribMapping != null && attribMapping != collectionMapping) {
+ String[] attribMappingSrcPathTokens = parseSourcePath(attribMapping);
+ if(isChildSourceMapping(attribMappingSrcPathTokens, srcPathTokens)) {
+ mappings.add(attribMapping);
+ }
+ }
+ }
+
+ // Check the child elements, drilling down recursively ...
+ NodeList childNodes = modelPath.getChildNodes();
+ int childCount = childNodes.getLength();
+ for(int i = 0; i < childCount; i++) {
+ Node childNode = childNodes.item(i);
+
+ if(childNode.getNodeType() == Node.ELEMENT_NODE) {
+ Mapping childMapping = getMapping(childNode);
+
+ if(childMapping != null && childMapping != collectionMapping) {
+ String[] childMappingSrcPathTokens = parseSourcePath(childMapping);
+
+ if(childMappingSrcPathTokens.length > 0 &&
childMappingSrcPathTokens[0].equals(collectionMapping.getCollectionItemName())) {
+ mappings.add(childMapping);
+ } else if(isChildSourceMapping(childMappingSrcPathTokens, srcPathTokens)) {
+ mappings.add(childMapping);
+ }
+ }
+
+ // Drill down recursively...
+ findChildMappings((Element) childNode, collectionMapping, srcPathTokens, mappings);
+ }
+ }
+ }
+
+ private boolean isChildSourceMapping(String[] childSrcPathTokens, String[]
srcPathTokens) {
+ if(childSrcPathTokens.length < srcPathTokens.length) {
+ return false;
+ }
+
+ for(int i = 0; i < srcPathTokens.length; i++) {
+ if(!srcPathTokens[i].equals(childSrcPathTokens[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
private void hideUnmappedPaths(Element compositor, Mapping mapping) {
NodeList children = compositor.getChildNodes();
int numChildren = children.getLength();
@@ -423,6 +494,7 @@
}
protected void addValueMapping(Node modelNode, String dollarVariable) throws
TemplateBuilderException, InvalidMappingException {
+ // TODO: Need to get all FreeMarker specific code out of here and pushed down into the
FreeMarkerTemplateBuilder class
String srcPath = FreeMarkerUtil.extractJavaPath(dollarVariable);
String rawFormatting = FreeMarkerUtil.extractRawFormatting(dollarVariable);
@@ -442,7 +514,7 @@
* @return The fully resolved path.
*/
public String resolveMappingSrcPath(Mapping mapping) {
- String[] srcPathTokens = mapping.getSrcPath().split("/");
+ String[] srcPathTokens = parseSourcePath(mapping);
if(srcPathTokens.length > 1) {
CollectionMapping parentCollection = findParentCollection(srcPathTokens[0], mapping);
@@ -463,6 +535,10 @@
return mapping.getSrcPath();
}
+ protected String[] parseSourcePath(Mapping mapping) {
+ return mapping.getSrcPath().split("/");
+ }
+
public CollectionMapping findParentCollection(String collectionName, Mapping mapping) {
CollectionMapping parentCollection = findCollection(collectionName);
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/freemarker/FreeMarkerTemplateBuilder.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/freemarker/FreeMarkerTemplateBuilder.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/freemarker/FreeMarkerTemplateBuilder.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -13,9 +13,11 @@
import org.jboss.tools.smooks.templating.model.ModelBuilder;
import org.jboss.tools.smooks.templating.model.ModelBuilderException;
import org.jboss.tools.smooks.templating.template.CollectionMapping;
+import org.jboss.tools.smooks.templating.template.Mapping;
import org.jboss.tools.smooks.templating.template.TemplateBuilder;
import org.jboss.tools.smooks.templating.template.ValueMapping;
import org.jboss.tools.smooks.templating.template.exception.InvalidMappingException;
+import org.jboss.tools.smooks.templating.template.result.AddCollectionResult;
import org.jboss.tools.smooks.templating.template.util.FreeMarkerUtil;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -46,9 +48,11 @@
}
@Override
- public CollectionMapping addCollectionMapping(String srcCollectionPath, Element
modelCollectionPath, String collectionItemName) throws InvalidMappingException {
+ public AddCollectionResult addCollectionMapping(String srcCollectionPath, Element
modelCollectionPath, String collectionItemName) throws InvalidMappingException {
return super.addCollectionMapping(FreeMarkerUtil.normalizePath(srcCollectionPath),
modelCollectionPath, collectionItemName);
}
-
+ protected String[] parseSourcePath(Mapping mapping) {
+ return FreeMarkerUtil.toPathTokens(mapping.getSrcPath());
+ }
}
Added:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/AddCollectionResult.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/AddCollectionResult.java
(rev 0)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/AddCollectionResult.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.smooks.templating.template.result;
+
+import java.util.List;
+
+import org.jboss.tools.smooks.templating.template.CollectionMapping;
+import org.jboss.tools.smooks.templating.template.Mapping;
+import org.w3c.dom.Node;
+
+/**
+ * Add collection {@link Mapping} result.
+ *
+ * @author <a
href="mailto:tom.fennelly@gmail.com">tom.fennelly@gmail.com</a>
+ */
+public class AddCollectionResult {
+
+ private CollectionMapping mapping;
+ private List<Mapping> removeMappings;
+
+ public AddCollectionResult(CollectionMapping mapping, List<Mapping>
removeMappings) {
+ this.mapping = mapping;
+ this.removeMappings = removeMappings;
+ }
+
+ public CollectionMapping getMapping() {
+ return mapping;
+ }
+
+ public List<Node> getHideNodes() {
+ return mapping.getHideNodes();
+ }
+
+ public List<Mapping> getRemoveMappings() {
+ return removeMappings;
+ }
+}
Property changes on:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/AddCollectionResult.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Added:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/RemoveResult.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/RemoveResult.java
(rev 0)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/RemoveResult.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2009 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.smooks.templating.template.result;
+
+import java.util.List;
+
+import org.jboss.tools.smooks.templating.template.Mapping;
+import org.w3c.dom.Node;
+
+/**
+ * Remove {@link Mapping} result.
+ *
+ * @author <a
href="mailto:tom.fennelly@gmail.com">tom.fennelly@gmail.com</a>
+ */
+public class RemoveResult {
+
+ private List<Mapping> removeMappings;
+ private List<Node> showNodes;
+
+ public RemoveResult(List<Mapping> removeMappings, List<Node> showNodes) {
+ this.removeMappings = removeMappings;
+ this.showNodes = showNodes;
+ }
+
+ public List<Mapping> getRemoveMappings() {
+ return removeMappings;
+ }
+
+ public List<Node> getShowNodes() {
+ return showNodes;
+ }
+}
Property changes on:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/result/RemoveResult.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/util/FreeMarkerUtil.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/util/FreeMarkerUtil.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/util/FreeMarkerUtil.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -154,4 +154,25 @@
return srcPath;
}
}
+
+ public static String[] toPathTokens(String srcPath) {
+ Matcher matcher = varsPattern.matcher(srcPath);
+ if(matcher.matches()) {
+ return (matcher.group(1) + "/" + matcher.group(2)).split("/");
+ } else if(srcPath.indexOf("/") != -1) {
+ if(srcPath.startsWith("/")) {
+ return srcPath.substring(1).split("/");
+ } else {
+ return srcPath.split("/");
+ }
+ } else {
+ // TODO: Old style used a dot... need to standardize all templating code to use
forward slash.
+ return srcPath.split(".");
+ }
+ }
+
+ public static boolean isVarsFormat(String srcPath) {
+ Matcher matcher = varsPattern.matcher(srcPath);
+ return matcher.matches();
+ }
}
\ No newline at end of file
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/xml/XMLFreeMarkerTemplateBuilder.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/xml/XMLFreeMarkerTemplateBuilder.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/xml/XMLFreeMarkerTemplateBuilder.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -213,7 +213,7 @@
if(children.getLength() == 0) {
Mapping mapping = getMapping(element);
- if(ModelBuilder.getElementType(element) == ElementType.simple && mapping
instanceof ValueMapping) {
+ if(ModelBuilder.getElementType(element) == ElementType.simple) {
templateWriter.write(">"); //$NON-NLS-1$
writeHistory.startClosed = true;
if(mapping != null) {
@@ -223,17 +223,13 @@
}
}
} else {
- if(!ModelBuilder.isInReservedNamespace(element)) {
+ if(!ModelBuilder.isInReservedNamespace(element) && !writeHistory.startClosed)
{
templateWriter.write(">"); //$NON-NLS-1$
- writeHistory.startClosed = true;
}
+ writeHistory.startClosed = true;
for(int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if(child.getNodeType() == Node.ELEMENT_NODE) {
- if(!writeHistory.startClosed) {
- templateWriter.write(">"); //$NON-NLS-1$
- writeHistory.startClosed = true;
- }
writeElement((Element)child, indent, true, templateWriter);
writeHistory.numElementsWritten++;
}
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/model/AbstractSmooksGraphicalModel.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/model/AbstractSmooksGraphicalModel.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/model/AbstractSmooksGraphicalModel.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -96,16 +96,11 @@
}
public AbstractSmooksGraphicalModel getModelRootNode() {
-
- AbstractSmooksGraphicalModel modelRootParent = parent;
- while(true) {
- if(modelRootParent.getParent() == null || modelRootParent.getParent() instanceof
RootModel) {
- break;
- }
- modelRootParent = modelRootParent.getParent();
+ if(parent != null && !(parent instanceof RootModel)) {
+ return parent.getModelRootNode();
}
- return modelRootParent;
+ return this;
}
//
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeConnection.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeConnection.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeConnection.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -15,6 +15,7 @@
import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel;
import org.jboss.tools.smooks.graphical.editors.model.IValidatableModel;
import org.jboss.tools.smooks.templating.template.CollectionMapping;
+import org.jboss.tools.smooks.templating.template.result.RemoveResult;
import org.milyn.xml.DomUtils;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
@@ -89,6 +90,9 @@
public void disconnectTarget() {
targetNode.removeTargetConnection(this);
+ if(data instanceof RemoveResult) {
+ ((TreeNodeModel)targetNode.getModelRootNode()).removeMappingConnections(((RemoveResult)data).getRemoveMappings());
+ }
}
public AbstractSmooksGraphicalModel getSourceNode() {
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeModel.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeModel.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeModel.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -12,7 +12,9 @@
import org.jboss.tools.smooks.configuration.editors.xml.TagObject;
import org.jboss.tools.smooks.configuration.editors.xml.TagPropertyObject;
import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel;
+import
org.jboss.tools.smooks.graphical.editors.model.freemarker.FreemarkerTemplateNodeGraphicalModel;
import org.jboss.tools.smooks.templating.template.CollectionMapping;
+import org.jboss.tools.smooks.templating.template.Mapping;
public class TreeNodeModel extends AbstractSmooksGraphicalModel {
@@ -200,6 +202,35 @@
return parentNode.getParentCollectionConnection();
}
+ public void removeMappingConnections(List<Mapping> removeMappings) {
+ if(removeMappings == null || removeMappings.isEmpty()) {
+ return;
+ }
+
+ // Remove from all the children first...
+ for(AbstractSmooksGraphicalModel child : children) {
+ if(child instanceof TreeNodeModel) {
+ ((TreeNodeModel)child).removeMappingConnections(removeMappings);
+ }
+ }
+
+ // Now remove from this node...
+ if(targetConnections != null && !targetConnections.isEmpty()) {
+ List<TreeNodeConnection> connectionsToRemove = new
ArrayList<TreeNodeConnection>();
+ for(TreeNodeConnection connection : targetConnections) {
+ Object connectionData = connection.getData();
+ if(connectionData instanceof Mapping) {
+ if(removeMappings.contains(connectionData)) {
+ connectionsToRemove.add(connection);
+ }
+ }
+ }
+ for(TreeNodeConnection connection : connectionsToRemove) {
+ connection.disconnect();
+ }
+ }
+ }
+
public void setText(String text) {
// if (text != null && !text.equals(this.text)) {
// String oldtext = this.text;
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/graphical/editors/model/freemarker/FreemarkerTemplateNodeGraphicalModel.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/graphical/editors/model/freemarker/FreemarkerTemplateNodeGraphicalModel.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/graphical/editors/model/freemarker/FreemarkerTemplateNodeGraphicalModel.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -38,6 +38,8 @@
import org.jboss.tools.smooks.templating.template.ValueMapping;
import org.jboss.tools.smooks.templating.template.TemplateBuilder;
import org.jboss.tools.smooks.templating.template.exception.InvalidMappingException;
+import org.jboss.tools.smooks.templating.template.result.AddCollectionResult;
+import org.jboss.tools.smooks.templating.template.result.RemoveResult;
import org.milyn.xml.DomUtils;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -146,7 +148,7 @@
try {
if (isCollectionConnection(connection)) {
- CollectionMapping mapping = null;
+ AddCollectionResult mappingResult = null;
// if it's a directly mapping
if (mappingSourceNode instanceof InputDataTreeNodeModel) {
@@ -157,7 +159,7 @@
Object data = mappingSourceNode.getData();
String mappingString = connection.getTargetConnectionObjectRef();
String collectionItemName = normalizeFreemarkerVariable(DomUtils.getName((Element)
sourceNode));
- mapping = builder.addCollectionMapping(mappingString, (Element) targetNode,
collectionItemName);
+ mappingResult = builder.addCollectionMapping(mappingString, (Element) targetNode,
collectionItemName);
} else {
AbstractSmooksGraphicalModel beanGraph = connection.getSourceNode();
@@ -175,12 +177,12 @@
}
}
BeanType javabeanModel = (BeanType) jobj;
- mapping = builder.addCollectionMapping(javabeanModel.getBeanId(), (Element)
targetNode, collectionName);
+ mappingResult = builder.addCollectionMapping(javabeanModel.getBeanId(), (Element)
targetNode, collectionName);
}
- connection.setData(mapping);
- }
- if (isMappingValueConnection(connection)) {
+ connection.setData(mappingResult.getMapping());
+ ((TreeNodeModel)getModelRootNode()).removeMappingConnections(mappingResult.getRemoveMappings());
+ } else if (isMappingValueConnection(connection)) {
String mappingString = null;
// if it's a directly mapping
@@ -348,14 +350,16 @@
((TreeNodeModel)connection.getSourceNode()).getConnections().remove(connection);
getConnections().remove(connection);
+ RemoveResult removeResult;
try {
TemplateBuilder builder = getTemplateBuilder();
Object mapping = connection.getData();
if (builder == null || mapping == null)
return;
if (mapping instanceof Mapping) {
- builder.removeMapping((Mapping) mapping);
+ removeResult = builder.removeMapping((Mapping) mapping);
changeFreemarkerContents();
+ connection.setData(removeResult);
}
super.removeTargetConnection(connection);
} catch (Exception e) {
Modified:
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XMLSampleXMLFreeMarkerTemplateBuilderTest.java
===================================================================
---
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XMLSampleXMLFreeMarkerTemplateBuilderTest.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XMLSampleXMLFreeMarkerTemplateBuilderTest.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -28,9 +28,12 @@
import junit.framework.TestCase;
import org.jboss.tools.smooks.templating.model.ModelBuilderException;
+import org.jboss.tools.smooks.templating.template.CollectionMapping;
import org.jboss.tools.smooks.templating.template.TemplateBuilder;
import org.jboss.tools.smooks.templating.template.TestUtil;
+import org.jboss.tools.smooks.templating.template.ValueMapping;
import org.jboss.tools.smooks.templating.template.exception.TemplateBuilderException;
+import org.jboss.tools.smooks.templating.template.result.AddCollectionResult;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
@@ -76,4 +79,20 @@
XMLFreeMarkerTemplateBuilder builder2 = new
XMLFreeMarkerTemplateBuilder(builder.getModelBuilder(), theTemplate);
assertEquals(theTemplate, builder2.buildTemplate());
}
+
+ public void testXMLOrder03() throws IOException, ParserConfigurationException,
TemplateBuilderException, SAXException, ModelBuilderException, XPathExpressionException {
+ TemplateBuilder builder = TestUtil.createXMLSampleFreeMarkerTemplateBuilder(new
File("src/org/jboss/tools/smooks/templating/template/xml/order-status-01.xml"));
+
+ Node identNode =
builder.getModelNode("ns0:OrderStatusResult/ns0:OrderStatusResultHeader/ns0:BuyerParty/ns1:PartyID/ns1:Ident");
+ Element resultStatusCollectionNode = (Element)
builder.getModelNode("ns0:OrderStatusResult/ns0:ListOfOrderStatusResultDetail/ns0:OrderStatusResultDetail");
+ Node buyerRefNumberNode =
builder.getModelNode("ns0:OrderStatusResult/ns0:ListOfOrderStatusResultDetail/ns0:OrderStatusResultDetail/ns0:OrderStatusResultReference/ns0:BuyerReferenceNumber");
+
+ builder.addValueMapping("order.status.id", identNode);
+ ValueMapping refNumMapping =
builder.addValueMapping("order.orderItemsStatusList.buyerRefNumber",
buyerRefNumberNode);
+
+ // Adding the collection mapping after the refNumMapping should result in an
instruction (in the collectionMapping)
+ // to remove the refNumMapping...
+ AddCollectionResult collectionMapping =
builder.addCollectionMapping("order.orderItemsStatusList",
resultStatusCollectionNode, "itemStatus");
+ assertTrue(collectionMapping.getRemoveMappings().contains(refNumMapping));
+ }
}
Modified:
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XSDXMLFreeMarkerTemplateBuilderTest.java
===================================================================
---
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XSDXMLFreeMarkerTemplateBuilderTest.java 2010-11-12
19:00:05 UTC (rev 26529)
+++
trunk/smooks/tests/org.jboss.tools.smooks.templating.test/src/org/jboss/tools/smooks/templating/template/xml/XSDXMLFreeMarkerTemplateBuilderTest.java 2010-11-12
20:05:03 UTC (rev 26530)
@@ -59,6 +59,7 @@
"src/org/jboss/tools/smooks/templating/template/xml/simple-person.xsd"),
"person");
String theTemplate = builder.buildTemplate();
+ System.out.println(theTemplate);
TestUtil.assertXMLEquals(theTemplate, "expected/simple-person-01.xml",
getClass());
// Now, test that we can parse the template ....
@@ -182,7 +183,7 @@
// Remove the <dog> mapping... should reshow the <person> and <cat>
// nodes...
- List<Node> showNodes = builder.removeMapping(mapping);
+ List<Node> showNodes = builder.removeMapping(mapping).getShowNodes();
assertEquals(2, showNodes.size());
assertEquals(builder.getModelNode("ns0:creature/smk:compositor/person"),
showNodes.get(0));
assertEquals(builder.getModelNode("ns0:creature/smk:compositor/cat"),
showNodes.get(1));
@@ -208,7 +209,7 @@
// Remove the <cat> mapping... should reshow the <person> and <dog>
// nodes...
- showNodes = builder.removeMapping(mapping);
+ showNodes = builder.removeMapping(mapping).getShowNodes();
assertEquals(2, showNodes.size());
assertEquals(builder.getModelNode("ns0:creature/smk:compositor/dog"),
showNodes.get(0));
assertEquals(builder.getModelNode("ns0:creature/smk:compositor/person"),
showNodes.get(1));