Author: tfennelly
Date: 2010-11-10 13:13:11 -0500 (Wed, 10 Nov 2010)
New Revision: 26423
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/ModelBuilder.java
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/xml/XMLSampleModelBuilder.java
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/xml/XMLFreeMarkerTemplateBuilder.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/RuntimeMetadata.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/Codegenerator.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XMLObjectAnalyzer.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XSDObjectAnalyzer.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/edimap/editor/Test.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/graphical/editors/model/InputDataTreeNodeModel.java
Log:
https://jira.jboss.org/browse/JBIDE-7539
When mapping from input to template (xml to csv) get NPE
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/ModelBuilder.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/ModelBuilder.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/ModelBuilder.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -198,6 +198,10 @@
}
public static boolean isCollection(Element element) {
+ if(element == null) {
+ return false;
+ }
+
int maxOccurs = getMaxOccurs(element);
return (maxOccurs > 1 || maxOccurs == -1);
@@ -288,6 +292,18 @@
return false;
}
+
+ /**
+ * Does the model element have child content of any kind.
+ * <p/>
+ * Does it have child elements or attributes.
+ *
+ * @param element The element to test.
+ * @return true if the element contains child content of any kind, otherwise false.
+ */
+ public static boolean hasChildContent(Element element) {
+ return (element.hasAttributes() || hasChildElements(element));
+ }
/**
* Set the model as being strict, or not.
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/xml/XMLSampleModelBuilder.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/xml/XMLSampleModelBuilder.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/model/xml/XMLSampleModelBuilder.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -23,9 +23,12 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@@ -94,15 +97,30 @@
registerNamepsaces(documentElement);
}
- private void trimNonModelNodes(Element element) {
+ public static void trimNonModelNodes(Element element) {
NodeList children = element.getChildNodes();
List<Node> removeableChildren = new ArrayList<Node>();
+ Set<QName> childElementSet = new HashSet<QName>();
for(int i = 0; i < children.getLength(); i++) {
- Node child = children.item(i);
+ Node child = children.item(i);
if(child.getNodeType() == Node.ELEMENT_NODE) {
- trimNonModelNodes((Element) child);
+ Element childElement = (Element) child;
+ QName childElementQName;
+
+ if(childElement.getPrefix() != null) {
+ childElementQName = new QName(childElement.getNamespaceURI(),
childElement.getLocalName(), childElement.getPrefix());
+ } else {
+ childElementQName = new QName(childElement.getNamespaceURI(),
childElement.getTagName());
+ }
+
+ if(!childElementSet.contains(childElementQName)) {
+ childElementSet.add(childElementQName);
+ trimNonModelNodes((Element) child);
+ } else {
+ removeableChildren.add(child);
+ }
} else {
removeableChildren.add(child);
}
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-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/Mapping.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -23,6 +23,8 @@
import java.util.List;
import org.eclipse.core.runtime.Assert;
+import org.jboss.tools.smooks.templating.model.ModelBuilder;
+import org.w3c.dom.Attr;
import org.w3c.dom.Node;
/**
@@ -74,13 +76,13 @@
}
public boolean isParentNodeMapping(Mapping mapping) {
- Node parentNode = mapping.getMappingNode().getParentNode();
+ Node parentNode = ModelBuilder.getParentNode(mapping.getMappingNode());
while(parentNode != null) {
if(parentNode == getMappingNode()) {
return true;
}
- parentNode = parentNode.getParentNode();
+ parentNode = ModelBuilder.getParentNode(parentNode);
}
return false;
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-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.templating/src/org/jboss/tools/smooks/templating/template/xml/XMLFreeMarkerTemplateBuilder.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -143,12 +143,12 @@
TemplateBuilder.writeIndent(indent, templateWriter);
writeElementStart(element, templateWriter);
- if(writeElementChildren(element, indent + 1, templateWriter) > 0) {
+
+ ChildWriteHistory writeChildHistory = writeElementChildren(element, indent + 1,
templateWriter);
+ if(writeChildHistory.numElementsWritten > 0) {
TemplateBuilder.writeIndent(indent, templateWriter);
- writeElementEnd(element, true, templateWriter);
- } else {
- writeElementEnd(element, false, templateWriter);
}
+ writeElementEnd(element, writeChildHistory.startClosed, templateWriter);
if(collectionMapping != null) {
templateWriter.write("\n"); //$NON-NLS-1$
@@ -206,15 +206,16 @@
templateWriter.write(quoteChar); //$NON-NLS-1$
}
- private int writeElementChildren(Element element, int indent, Writer templateWriter)
throws IOException {
+ private ChildWriteHistory writeElementChildren(Element element, int indent, Writer
templateWriter) throws IOException {
NodeList children = element.getChildNodes();
- int numElementsWritten = 0;
+ ChildWriteHistory writeHistory = new ChildWriteHistory();
if(children.getLength() == 0) {
Mapping mapping = getMapping(element);
- if(ModelBuilder.getElementType(element) == ElementType.simple) {
+ if(ModelBuilder.getElementType(element) == ElementType.simple && mapping
instanceof ValueMapping) {
templateWriter.write(">"); //$NON-NLS-1$
+ writeHistory.startClosed = true;
if(mapping != null) {
templateWriter.write(FreeMarkerUtil.toFreeMarkerVariable((ValueMapping)mapping,
isNodeModelSource()));
} else {
@@ -224,12 +225,17 @@
} else {
if(!ModelBuilder.isInReservedNamespace(element)) {
templateWriter.write(">"); //$NON-NLS-1$
+ 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);
- numElementsWritten++;
+ writeHistory.numElementsWritten++;
}
}
if(!ModelBuilder.isInReservedNamespace(element)) {
@@ -237,11 +243,16 @@
}
}
- return numElementsWritten;
+ return writeHistory;
}
+
+ private class ChildWriteHistory {
+ private int numElementsWritten = 0;
+ private boolean startClosed = false;
+ }
- private void writeElementEnd(Element element, boolean hasChildren, Writer
templateWriter) throws IOException {
- if(hasChildren || ModelBuilder.getElementType(element) == ElementType.simple) {
+ private void writeElementEnd(Element element, boolean startClosed, Writer
templateWriter) throws IOException {
+ if(startClosed) {
templateWriter.write("</"); //$NON-NLS-1$
templateWriter.write(element.getNodeName());
templateWriter.write(">"); //$NON-NLS-1$
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/RuntimeMetadata.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/RuntimeMetadata.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/RuntimeMetadata.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -95,12 +95,16 @@
return Messages.RuntimeMetadata_Error_SmooksFile_Not_Valid;
} else if (inputFile == null) {
return Messages.RuntimeMetadata_Error_Input_Task_No_Input_File;
- } else if (!inputFile.exists()) {
- return Messages.RuntimeMetadata_Error_Input_Task_Input_File_Not_Found;
- } else if (!inputFile.isFile()) {
- return Messages.RuntimeMetadata_Error_Input_Task_Input_File_Cannot_Be_Read;
+ }
+
+ if(!SmooksModelUtils.INPUT_TYPE_JAVA.equals(inputType)) {
+ if (!inputFile.exists()) {
+ return Messages.RuntimeMetadata_Error_Input_Task_Input_File_Not_Found;
+ } else if (!inputFile.isFile()) {
+ return Messages.RuntimeMetadata_Error_Input_Task_Input_File_Cannot_Be_Read;
+ }
}
-
+
return ""; //$NON-NLS-1$
}
@@ -194,7 +198,7 @@
}
inputFile = new File(resolvedFilePath);
- if (inputFile.exists() && inputFile.isFile()) {
+ if (SmooksModelUtils.INPUT_TYPE_JAVA.equals(inputType) || (inputFile.exists()
&& inputFile.isFile())) {
isValidSmooksConfig = true;
}
}
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/Codegenerator.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/Codegenerator.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/Codegenerator.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -65,8 +65,8 @@
continue;
}
File file = new File(basePath + eClass.getName() + "UICreator.java");
//$NON-NLS-1$
- System.out.println("map.put(" + eClass.getName() + "Impl.class, new
" //$NON-NLS-1$ //$NON-NLS-2$
- + eClass.getName() + "UICreator());"); //$NON-NLS-1$
+// System.out.println("map.put(" + eClass.getName() + "Impl.class, new
" //$NON-NLS-1$ //$NON-NLS-2$
+// + eClass.getName() + "UICreator());"); //$NON-NLS-1$
if (!file.exists()) {
file.createNewFile();
FileWriter writer = new FileWriter(file);
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XMLObjectAnalyzer.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XMLObjectAnalyzer.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XMLObjectAnalyzer.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -19,6 +19,7 @@
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
+import org.jboss.tools.smooks.templating.model.xml.XMLSampleModelBuilder;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -59,6 +60,9 @@
IOException {
DocumentBuilder builder = createDocumentBuildingFactory();
Document doc = builder.parse(stream);
+
+ XMLSampleModelBuilder.trimNonModelNodes(doc.getDocumentElement());
+
return analyze(doc, ignoreNodeNames, tagObjectClass);
}
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XSDObjectAnalyzer.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XSDObjectAnalyzer.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/configuration/editors/xml/XSDObjectAnalyzer.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -208,7 +208,7 @@
resource.load(Collections.EMPTY_MAP);
XSDSchema schema = (XSDSchema) resource.getContents().get(0);
TagObject rootTag = new XSDObjectAnalyzer().loadElement(schema,
"smooks-resource-list"); //$NON-NLS-1$
- System.out.println(rootTag);
+// System.out.println(rootTag);
// List<XSDElementDeclaration> elements =
// schema.getElementDeclarations();
// for (Iterator<?> iterator = elements.iterator(); iterator.hasNext();)
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/edimap/editor/Test.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/edimap/editor/Test.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/edimap/editor/Test.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -72,8 +72,8 @@
generateChildrenTag(tag, ss, separators, 0);
}
}
-
- System.out.println(rootTag);
+//
+// System.out.println(rootTag);
}
private String getSeparator(String s){
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-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/gef/tree/model/TreeNodeConnection.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -177,10 +177,12 @@
}
if(builder.length() > 0) {
- builder.insert(0, '.');
+ builder.insert(0, '/');
}
if(currentNode.getNodeType() == Node.ATTRIBUTE_NODE) {
builder.insert(0, "@" + ((Attr)currentNode).getNodeName());
+ currentNode = ((Attr)currentNode).getOwnerElement();
+ continue;
} else if(currentNode.getNodeType() == Node.ELEMENT_NODE) {
builder.insert(0, DomUtils.getName((Element)currentNode));
}
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/graphical/editors/model/InputDataTreeNodeModel.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/graphical/editors/model/InputDataTreeNodeModel.java 2010-11-10
16:45:43 UTC (rev 26422)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/graphical/editors/model/InputDataTreeNodeModel.java 2010-11-10
18:13:11 UTC (rev 26423)
@@ -109,8 +109,10 @@
Object sourceData = AdapterFactoryEditingDomain.unwrap(this.getData());
if(sourceData instanceof AbstractXMLObject) {
Element sourceElement = ((AbstractXMLObject)sourceData).getReferenceElement();
- if(ModelBuilder.isCollection(sourceElement) ||
(!ModelBuilder.isStrictModel(sourceElement.getOwnerDocument()) &&
ModelBuilder.hasChildElements(sourceElement))) {
- return true;
+ if(sourceElement != null) {
+ if(ModelBuilder.isCollection(sourceElement) ||
(!ModelBuilder.isStrictModel(sourceElement.getOwnerDocument()) &&
ModelBuilder.hasChildContent(sourceElement))) {
+ return true;
+ }
}
}
return false;