/** * This method serialises the information contained within a PerformanceTreeNode and recurses down * to serialise info about its arcs */ private static void createNodeElement( final PerformanceTreeNode inputNode, final Element parentElement, final Document document) { Element nodeElement = document.createElement("node"); // common data to serialise for all PT nodes String nodeID = inputNode.getId(); Double nodePositionX = inputNode.getPositionXObject(); Double nodePositionY = inputNode.getPositionYObject(); PTNode nodeType = inputNode.getNodeType(); String nodeIncomingArcID = inputNode.getIncomingArcID(); nodeElement.setAttribute("id", nodeID); nodeElement.setAttribute("type", nodeType.toString()); nodeElement.setAttribute("x", String.valueOf(nodePositionX)); nodeElement.setAttribute("y", String.valueOf(nodePositionY)); nodeElement.setAttribute("incomingArc", nodeIncomingArcID); // indicate that this node has been processed already MacroWriter.nodesProcessed.put(nodeID, "true"); if (nodeIncomingArcID == null || nodeIncomingArcID.equals("")) { Element tree = document.createElement("tree"); parentElement.appendChild(tree); tree.appendChild(nodeElement); } else { parentElement.appendChild(nodeElement); } // special cases if (inputNode instanceof ValueNode) { String nodeLabel; if (((ValueNode) inputNode).getNodeLabelObject() != null) nodeLabel = ((ValueNode) inputNode).getNodeLabel(); else nodeLabel = ""; nodeElement.setAttribute("label", nodeLabel); } else if (inputNode instanceof OperationNode) { String nodeOperation = ((OperationNode) inputNode).getOperation(); nodeElement.setAttribute("operation", nodeOperation); Element outgoingArcsElement = document.createElement("outgoingArcs"); nodeElement.appendChild(outgoingArcsElement); Collection nodeOutgoingArcIDs = ((OperationNode) inputNode).getOutgoingArcIDs(); Iterator i = nodeOutgoingArcIDs.iterator(); while (i.hasNext()) { String outgoingArcID = (String) i.next(); PerformanceTreeArc nodeArc = MacroWriter.macro.getMacroArc(outgoingArcID); MacroWriter.createArcElement(nodeArc, outgoingArcsElement, document); } Element childNodesElement = document.createElement("childNodes"); nodeElement.appendChild(childNodesElement); i = nodeOutgoingArcIDs.iterator(); while (i.hasNext()) { String outgoingArcID = (String) i.next(); PerformanceTreeArc nodeArc = MacroWriter.macro.getMacroArc(outgoingArcID); if (nodeArc.getTarget() != null) { PerformanceTreeNode childNode = nodeArc.getTarget(); boolean nodeProcessedAlready = false; if ((MacroWriter.nodesProcessed.get(childNode.getId())).equals("true")) { nodeProcessedAlready = true; } else if ((MacroWriter.nodesProcessed.get(childNode.getId())).equals("false")) { nodeProcessedAlready = false; } if (!nodeProcessedAlready) MacroWriter.createNodeElement(childNode, childNodesElement, document); } } } }