/** * Parses a Genie Network from an inputstream pointing to an XDSL file * * @param inputStream * @throws SAXException * @throws ParserConfigurationException * @throws IOException */ private void parseNetworkFromXDSL(InputStream inputStream) throws SAXException, ParserConfigurationException, IOException { // get a SAX parser factory SAXParserFactory spf = SAXParserFactory.newInstance(); // get a new instance of parser SAXParser sp = spf.newSAXParser(); // Parses the file (this method blocks until parsing is complete) sp.parse(inputStream, this); System.out.println("Parsed Genie file and completed Network setup."); Iterator i = searchSpace.getNodeIterator(); while (i.hasNext()) { BayesNode temp = (BayesNode) i.next(); System.out.println("Node " + temp.label); Matrix matrix = temp.getMatrix(); matrix.print(3, 6); } }
@Override public void endElement(String uri, String localName, String qName) throws SAXException { // Do nothing when we've finished reading an XML tag element // if(qName.equalsIgnoreCase("href")) { // //Save Href link, and replace "&" with "&" // //href = temp.replace("&", "&"); // href = temp; // } // When we reache the end of the 'cpt' element, we have all the information for one node if (qName.equalsIgnoreCase("cpt")) { // Create a node based on the currently saved information System.out.println("----------------------"); System.out.println(nodeName + " node is being created..."); // nextInt is normally exclusive of the top value, // so add 1 to make it inclusive int randomX = rand.nextInt(max - min + 1) + min; int randomY = rand.nextInt(max - min + 1) + min; // Create new node with parsed information (label, x, y) BayesNode newNode = new BayesNode(nodeName, randomX, randomY); LinkXY link = null; // Convert probabilities to Matrix System.out.println("Node probabilities: " + probabilities.toString().trim()); String parsedProb[] = probabilities.toString().trim().split(" "); double numProb[] = new double[parsedProb.length]; // System.out.println("Parsed probs:"); for (int i = 0; i < parsedProb.length; i++) { // System.out.println(Double.valueOf(parsedProb[i])); numProb[i] = Double.valueOf(parsedProb[i]); } Matrix matrix = new Matrix(numProb, rowCount); newNode.setMatrix(matrix); // System.out.println("Row Names (total of " + rowCount + "):"); // Iterator iterator = rowNames.iterator(); // while(iterator.hasNext()) // System.out.println(iterator.next().toString()); newNode.setRowNames((ArrayList) rowNames.clone()); // Gets parents of this new node if (parents.length() != 0) { System.out.println("Parents = " + parents.toString().trim()); String parsedParents[] = parents.toString().trim().split(" "); for (int i = 0; i < parsedParents.length; i++) { if (!parsedParents[i].trim().equals("")) { // System.out.println(parsedParents[i]); // Since parents should always proceed children in teh XDSL file, the below line should // always return a node BayesNode parentNode = (BayesNode) searchSpace.findNode(parsedParents[i]); newNode.addConnToParent(parentNode); // Connect new node to parent parentNode.addConnToChild(newNode); // Connect parent to new node // Create link for drawing the graph link = new LinkXY(parentNode, newNode); } } } else { System.out.println("No parents for " + newNode.label); } // Add new node to search space list searchSpace.add(newNode); if (link != null) { searchSpace.add(link); } // Reset row count rowCount = 0; rowNames.clear(); // Reset parents parents.setLength(0); } // System.out.println("endElement: " + uri + ", " + localName + ", " + qName); }