Beispiel #1
0
  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;
    }
  }