Upload de arquivo da Rede Bayesiana.
[simdecs_seam.git] / SimDeCS / src / main / org / ufcspa / simdecs / entities / BayesianNetworkParser.java
diff --git a/SimDeCS/src/main/org/ufcspa/simdecs/entities/BayesianNetworkParser.java b/SimDeCS/src/main/org/ufcspa/simdecs/entities/BayesianNetworkParser.java
new file mode 100644 (file)
index 0000000..a05a2bc
--- /dev/null
@@ -0,0 +1,101 @@
+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);
+       }
+}