Upload de arquivo da Rede Bayesiana.
authorMichele Silva <michele.silva@gmail.com>
Tue, 22 Nov 2011 03:28:06 +0000 (01:28 -0200)
committerMichele Silva <michele.silva@gmail.com>
Tue, 22 Nov 2011 03:28:06 +0000 (01:28 -0200)
SimDeCS/WebContent/seguro/admin/rede/ArquivoRede.xhtml
SimDeCS/WebContent/seguro/admin/rede/ArquivoRedeList.xhtml
SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeHome.java
SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeList.java
SimDeCS/src/main/org/ufcspa/simdecs/entities/BayesianNetworkParser.java [new file with mode: 0644]
SimDeCS/src/main/org/ufcspa/simdecs/entities/Rede.java

index a92d378..4e863b1 100644 (file)
@@ -45,7 +45,7 @@
                        
                        <div class="actionButtons">
                                <h:commandButton value="Upload" 
-                                                action="#{arquivoRedeHome.persist}"  
+                                                action="#{arquivoRedeHome.saveNetwork}"  
                                                 rendered="#{!arquivoRedeHome.managed}"/>
                                <h:commandButton value="Delete" 
                                                 action="#{arquivoRedeHome.remove}"
index c183bd1..9e45e6a 100644 (file)
                                <s:link value="Delete" action="#{arquivoRedeHome.remove}">
                                    <f:param name="arquivoRedeId" value="${arquivoRede.id}" />
                                </s:link>
+                               <br></br>
+                               <s:link value="Perguntas e Respostas"  view="/seguro/admin/rede/PerguntaEdit.xhtml">
+                                   <f:param name="arquivoRedeId" value="${arquivoRede.id}" />
+                               </s:link>
                        </rich:column>
                    </rich:dataTable>
                    
index 361c9d4..dfdbdf9 100644 (file)
@@ -1,17 +1,34 @@
 package org.ufcspa.simdecs.session.crud.admin;
 
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+
+import javax.persistence.EntityManager;
+
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Logger;
 import org.jboss.seam.annotations.Name;
 import org.jboss.seam.annotations.Begin;
 import org.jboss.seam.annotations.web.RequestParameter;
-import org.jboss.seam.framework.EntityHome;
+import org.jboss.seam.log.Log;
 
 import org.ufcspa.simdecs.entities.ArquivoRede;
+import org.ufcspa.simdecs.entities.BayesianNetworkParser;
+import org.ufcspa.simdecs.entities.Nodo;
+import org.ufcspa.simdecs.entities.Rede;
+import org.ufcspa.simdecs.session.crud.defaults.SimDeCSEntityHome;
 
 @Name("arquivoRedeHome")
-public class ArquivoRedeHome extends EntityHome<ArquivoRede>
+public class ArquivoRedeHome extends SimDeCSEntityHome<ArquivoRede>
 {
-    @RequestParameter Long arquivoRedeId;
+       private static final long serialVersionUID = 1L;
 
+       @Logger private Log log;
+       @In
+       private EntityManager entityManager;
+               
+       @RequestParameter Long arquivoRedeId;
+       
     @Override
     public Object getId()
     {
@@ -29,5 +46,27 @@ public class ArquivoRedeHome extends EntityHome<ArquivoRede>
     public void create() {
         super.create();
     }
+    
+    public void saveNetwork() throws Exception {
+       BayesianNetworkParser parser = new BayesianNetworkParser();
+               parser.parseBayesianNetwork(new ByteArrayInputStream(super.getInstance().getData()));
+               String name = parser.getBayesianNetworkName();
+               ArrayList<String> nodes = parser.getBayesianNetworkNodes();
+               log.info(name + ": " + nodes);
+               
+               Rede rede = new Rede();
+               rede.setNome(name);
+               rede.setArquivo(super.getInstance());
+               entityManager.persist(rede);
+               
+               for (int i = 0; i < nodes.size(); i++){
+                       Nodo nodo = new Nodo();
+                       nodo.setNome(nodes.get(i));
+                       nodo.setRede(rede);
+                       entityManager.persist(nodo);
+               }
+               
+       super.persist();
+    }
 
 }
index 9a502cf..369a218 100644 (file)
@@ -1,11 +1,11 @@
 package org.ufcspa.simdecs.session.crud.admin;
 
 import org.jboss.seam.annotations.Name;
-import org.jboss.seam.framework.EntityQuery;
 import org.ufcspa.simdecs.entities.ArquivoRede;
+import org.ufcspa.simdecs.session.crud.defaults.SimDeCSEntityQuery;
 
 @Name("arquivoRedeList")
-public class ArquivoRedeList extends EntityQuery<ArquivoRede>
+public class ArquivoRedeList extends SimDeCSEntityQuery<ArquivoRede>
 {
     public ArquivoRedeList()
     {
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);
+       }
+}
index bf75f8d..25451b2 100644 (file)
@@ -11,10 +11,13 @@ import javax.persistence.Id;
 import javax.persistence.JoinColumn;\r
 import javax.persistence.JoinTable;\r
 import javax.persistence.ManyToMany;\r
+import javax.persistence.OneToOne;\r
 import javax.persistence.SequenceGenerator;\r
 import javax.persistence.Table;\r
 import javax.persistence.UniqueConstraint;\r
 \r
+import org.hibernate.annotations.Index;\r
+\r
 @Entity\r
 //Short name: "rede"\r
 @Table(name="Rede")\r
@@ -30,8 +33,10 @@ public class Rede implements Serializable {
        @Column(nullable=false, length=50)\r
        private String nome;\r
        \r
-       @Column(nullable=false, length=50)\r
-       private String arquivo;\r
+    @OneToOne\r
+    @JoinColumn(name = "arquivoRede_id", referencedColumnName = "id", nullable = true)\r
+    @Index(name="rede_arquivoRede_fk_i")       \r
+    private ArquivoRede arquivo;\r
 \r
        @Column(length=1, nullable=false)\r
        private boolean aplicavelSexoMasculino;\r
@@ -63,11 +68,11 @@ public class Rede implements Serializable {
                this.nome = nome;\r
        }\r
 \r
-       public String getArquivo() {\r
+       public ArquivoRede getArquivo() {\r
                return arquivo;\r
        }\r
 \r
-       public void setArquivo(String arquivo) {\r
+       public void setArquivo(ArquivoRede arquivo) {\r
                this.arquivo = arquivo;\r
        }\r
        public boolean isAplicavelSexoMasculino() {\r