--- /dev/null
+package org.ufcspa.simdecs.entities;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public class BayesianNetworkParser {
+
+ private Document dom;
+
+ public void parseBayesianNetwork(String filename) {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ try {
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ dom = db.parse(filename);
+ } catch(ParserConfigurationException pce) {
+ pce.printStackTrace();
+ } catch(SAXException se) {
+ se.printStackTrace();
+ } catch(IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
+
+ public void parseBayesianNetwork(InputStream input) {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ try {
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ dom = db.parse(input);
+ } catch(ParserConfigurationException pce) {
+ pce.printStackTrace();
+ } catch(SAXException se) {
+ se.printStackTrace();
+ } catch(IOException ioe) {
+ ioe.printStackTrace();
+ }
+ }
+
+ public String getBayesianNetworkName() throws Exception {
+ String bayesianNetworkName = "";
+ Element docElement = dom.getDocumentElement();
+
+ NodeList headerElements = docElement.getElementsByTagName("xbifns:header");
+ if(headerElements != null && headerElements.getLength() > 0) {
+ Element header = (Element)headerElements.item(0);
+ NodeList nameElements = header.getElementsByTagName("xbifns:name");
+ if (nameElements != null && nameElements.getLength() > 0) {
+ Element name = (Element)nameElements.item(0);
+ bayesianNetworkName = name.getTextContent();
+ } else {
+ throw new Exception("Document not well formed.");
+ }
+ }
+ else {
+ throw new Exception("Document not well formed.");
+ }
+ return bayesianNetworkName;
+ }
+
+ public ArrayList<String> getBayesianNetworkNodes() throws Exception {
+ ArrayList<String> namesList = new ArrayList<String>();
+ Element docElement = dom.getDocumentElement();
+
+ NodeList variablesElements = docElement.getElementsByTagName("xbifns:variables");
+ if(variablesElements != null && variablesElements.getLength() > 0) {
+ Element variablesElement = (Element)variablesElements.item(0);
+ NodeList variables = variablesElement.getElementsByTagName("xbifns:variable");
+ if (variables != null && variables.getLength() > 0) {
+ for (int i = 0; i < variables.getLength(); i++){
+ Element variable = (Element)variables.item(i);
+ namesList.add(variable.getAttribute("name"));
+ }
+ } else {
+ throw new Exception("Document not well formed.");
+ }
+ }
+ else {
+ throw new Exception("Document not well formed.");
+ }
+ return namesList;
+ }
+
+ /* Testing */
+ public static void main(String[] args) throws Exception {
+ BayesianNetworkParser parser = new BayesianNetworkParser();
+ parser.parseBayesianNetwork("test_bn.xml");
+ String bn = parser.getBayesianNetworkName();
+ ArrayList<String> nodes = parser.getBayesianNetworkNodes();
+ System.out.println(bn);
+ System.out.println(nodes);
+ }
+}