public VisualGraph importFromXML(File file) { // holds the current key of the graph int currentKey = this.getKeyGenerator(); myNodes = new ArrayList<VisualNode>(); String nKey = null; String nName = null; String nType = null; int nID = 0; String eKey = null; String eName = null; String eType = null; String eFromNode = null; String eToNode = null; String nSQLDefinition = null; try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse(file); // normalize text representation doc.getDocumentElement().normalize(); NodeList listOfNodes = doc.getElementsByTagName("HNodes"); Element NodesElement = (Element) listOfNodes.item(0); listOfNodes = NodesElement.getElementsByTagName("HNode"); for (int s = 0; s < listOfNodes.getLength(); s++) { Node firstNode = listOfNodes.item(s); if (firstNode.getNodeType() == Node.ELEMENT_NODE) { Element firstNodeElement = (Element) firstNode; double nodeX = new Double(firstNodeElement.getAttribute("x")); double nodeY = new Double(firstNodeElement.getAttribute("y")); // ------- NodeList KeyList = firstNodeElement.getElementsByTagName("Key"); Element KeyElement = (Element) KeyList.item(0); NodeList textKeyList = KeyElement.getChildNodes(); nKey = ((Node) textKeyList.item(0)).getNodeValue(); // ------- NodeList NameList = firstNodeElement.getElementsByTagName("Name"); Element NameElement = (Element) NameList.item(0); NodeList textNameList = NameElement.getChildNodes(); nName = ((Node) textNameList.item(0)).getNodeValue(); // ---- NodeList TypeList = firstNodeElement.getElementsByTagName("Type"); Element TypeElement = (Element) TypeList.item(0); NodeList textTypeList = TypeElement.getChildNodes(); nType = ((Node) textTypeList.item(0)).getNodeValue(); /** @author pmanousi ID NOW NOT NEEDED (TopologicalTravel) */ // NodeList IDList = firstNodeElement.getElementsByTagName("ID"); // Element IDElement = (Element)IDList.item(0); // NodeList textIDList = IDElement.getChildNodes(); // nID = Integer.parseInt(((Node)textIDList.item(0)).getNodeValue()); // ---- NodeList SQLDefinitionList = firstNodeElement.getElementsByTagName("SQLDefinition"); Element SQLDefinitionElement = (Element) SQLDefinitionList.item(0); if (SQLDefinitionElement != null) { NodeList textSQLDefinitionList = SQLDefinitionElement.getChildNodes(); nSQLDefinition = ((Node) textSQLDefinitionList.item(0)).getNodeValue(); } else nSQLDefinition = ""; // add node VisualNode v = new VisualNode(); v.setName(nName); v.setType(NodeType.valueOf(nType)); // v.setLocation(new Point2D.Double(nodeX,nodeY)); this.setLocation(v, new Point2D.Double(nodeX, nodeY)); v.setSQLDefinition(nSQLDefinition); this.addVertex(v); // shift node key by current key this.setKey(v, currentKey + new Integer(nKey)); v.ID = nID; myNodes.add(v); } // end of if clause } // end of for loop for nodes NodeList listOfEdges = doc.getElementsByTagName("HEdges"); Element EdgesElement = (Element) listOfEdges.item(0); listOfEdges = EdgesElement.getElementsByTagName("HEdge"); for (int s = 0; s < listOfEdges.getLength(); s++) { Node firstEdge = listOfEdges.item(s); if (firstEdge.getNodeType() == Node.ELEMENT_NODE) { Element firstEdgeElement = (Element) firstEdge; // ------- NodeList KeyList = firstEdgeElement.getElementsByTagName("Key"); Element KeyElement = (Element) KeyList.item(0); NodeList textKeyList = KeyElement.getChildNodes(); eKey = ((Node) textKeyList.item(0)).getNodeValue(); // ------- NodeList NameList = firstEdgeElement.getElementsByTagName("Name"); Element NameElement = (Element) NameList.item(0); NodeList textNameList = NameElement.getChildNodes(); eName = ((Node) textNameList.item(0)).getNodeValue(); // ---- NodeList TypeList = firstEdgeElement.getElementsByTagName("Type"); Element TypeElement = (Element) TypeList.item(0); NodeList textTypeList = TypeElement.getChildNodes(); eType = ((Node) textTypeList.item(0)).getNodeValue(); NodeList FromNodeList = firstEdgeElement.getElementsByTagName("FromNode"); Element FromNodeElement = (Element) FromNodeList.item(0); NodeList textFromNodeList = FromNodeElement.getChildNodes(); eFromNode = ((Node) textFromNodeList.item(0)).getNodeValue(); NodeList ToNodeList = firstEdgeElement.getElementsByTagName("ToNode"); Element ToNodeElement = (Element) ToNodeList.item(0); NodeList textToNodeList = ToNodeElement.getChildNodes(); eToNode = ((Node) textToNodeList.item(0)).getNodeValue(); // add edge VisualEdge e = new VisualEdge( eName, EdgeType.toEdgeType(eType), this.findVertex(currentKey + new Integer(eFromNode)), this.findVertex(currentKey + new Integer(eToNode))); this.addEdge(e); this.setKey(e, currentKey + new Integer(eKey)); } // end of if clause } // end of for loop for edges /* // find the policies (if any exists) for nodes NodeList listOfPolicies = doc.getElementsByTagName("HPolicies"); Element PoliciesElement = (Element)listOfPolicies.item(0); listOfPolicies = PoliciesElement.getElementsByTagName("HPolicy"); if (listOfPolicies.getLength()>0) { for(int i=0; i<listOfPolicies.getLength() ; i++){ Node firstPolicy = listOfPolicies.item(i); if(firstPolicy.getNodeType() == Node.ELEMENT_NODE){ Element firstPolicyElement = (Element)firstPolicy; //------- NodeList HNodeList = firstPolicyElement.getElementsByTagName("HNode"); Element HNodeElement = (Element)HNodeList.item(0); NodeList textHNodeList = HNodeElement.getChildNodes(); String nHNode = ((Node)textHNodeList.item(0)).getNodeValue(); //------- NodeList HEventList = firstPolicyElement.getElementsByTagName("HEvent"); Element HEventElement = (Element)HEventList.item(0); NodeList HEventNodeList = HEventElement.getElementsByTagName("HEventNode"); Element HEventNodeElement = (Element)HEventNodeList.item(0); NodeList textHEventNodeList = HEventNodeElement.getChildNodes(); String nHEventNode = ((Node)textHEventNodeList.item(0)).getNodeValue(); NodeList HEventTypeList = HEventElement.getElementsByTagName("HEventType"); Element HEventTypeElement = (Element)HEventTypeList.item(0); NodeList textHEventTypeList = HEventTypeElement.getChildNodes(); String nHEventType = ((Node)textHEventTypeList.item(0)).getNodeValue(); //---- NodeList HPolicyTypeList = firstPolicyElement.getElementsByTagName("HPolicyType"); Element HPolicyTypeElement = (Element)HPolicyTypeList.item(0); NodeList textHPolicyTypeList = HPolicyTypeElement.getChildNodes(); String nHPolicyType = ((Node)textHPolicyTypeList.item(0)).getNodeValue(); VisualNode HNode = this.findVertex(currentKey+new Integer(nHNode)); VisualNode HEventNode = this.findVertex(currentKey+new Integer(nHEventNode)); EventType HEventType = EventType.toEventType(nHEventType); PolicyType HPolicyType = PolicyType.toPolicyType(nHPolicyType); HNode.addPolicy(HEventType, HEventNode, HPolicyType); }//end of if clause }//end of for loop for policies }//end of if policies exist //get events NodeList listOfEvents = doc.getElementsByTagName("HEvents"); Element EventsElement = (Element)listOfEvents.item(0); listOfEvents = EventsElement.getElementsByTagName("HEvent"); if (listOfEvents.getLength()>0) { for(int i=0; i<listOfEvents.getLength() ; i++){ Node firstEvent = listOfEvents.item(i); if(firstEvent.getNodeType() == Node.ELEMENT_NODE){ Element firstEventElement = (Element)firstEvent; //------- NodeList HNodeList = firstEventElement.getElementsByTagName("HNode"); Element HNodeElement = (Element)HNodeList.item(0); NodeList textHNodeList = HNodeElement.getChildNodes(); String nHNode = ((Node)textHNodeList.item(0)).getNodeValue(); //------- NodeList HEventNodeList = firstEventElement.getElementsByTagName("HEventNode"); Element HEventNodeElement = (Element)HEventNodeList.item(0); NodeList textHEventNodeList = HEventNodeElement.getChildNodes(); String nHEventNode = ((Node)textHEventNodeList.item(0)).getNodeValue(); //------- NodeList HEventTypeList = firstEventElement.getElementsByTagName("HEventType"); Element HEventTypeElement = (Element)HEventTypeList.item(0); NodeList textHEventTypeList = HEventTypeElement.getChildNodes(); String nHEventType = ((Node)textHEventTypeList.item(0)).getNodeValue(); VisualNode HNode = this.findVertex(currentKey+new Integer(nHNode)); VisualNode HEventNode = this.findVertex(currentKey+new Integer(nHEventNode)); EventType HEventType = EventType.toEventType(nHEventType); HNode.addEvent(HEventType); } }//end of for loop for events }//end of if events exist */ // get the last element - graph keygenerator NodeList keyGen = doc.getElementsByTagName("HKeyGen"); Element keyGenElement = (Element) keyGen.item(0); NodeList textkeyGen = keyGenElement.getChildNodes(); nKey = ((Node) textkeyGen.item(0)).getNodeValue(); // set the key this.setKeyGenerator(currentKey + new Integer(nKey)); return this; } catch (SAXParseException err) { System.out.println( "** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId()); System.out.println(" " + err.getMessage()); return null; } catch (SAXException e) { Exception x = e.getException(); ((x == null) ? e : x).printStackTrace(); return null; } catch (Throwable t) { t.printStackTrace(); return null; } }