From: Michele Silva Date: Tue, 22 Nov 2011 03:28:06 +0000 (-0200) Subject: Upload de arquivo da Rede Bayesiana. X-Git-Url: http://200.18.67.61/gitweb/?a=commitdiff_plain;h=69e26a066d97680c38da32891a2400b853e1c35c;p=simdecs_seam.git Upload de arquivo da Rede Bayesiana. --- diff --git a/SimDeCS/WebContent/seguro/admin/rede/ArquivoRede.xhtml b/SimDeCS/WebContent/seguro/admin/rede/ArquivoRede.xhtml index a92d378..4e863b1 100644 --- a/SimDeCS/WebContent/seguro/admin/rede/ArquivoRede.xhtml +++ b/SimDeCS/WebContent/seguro/admin/rede/ArquivoRede.xhtml @@ -45,7 +45,7 @@
+

+ + + diff --git a/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeHome.java b/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeHome.java index 361c9d4..dfdbdf9 100644 --- a/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeHome.java +++ b/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeHome.java @@ -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 +public class ArquivoRedeHome extends SimDeCSEntityHome { - @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 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 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(); + } } diff --git a/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeList.java b/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeList.java index 9a502cf..369a218 100644 --- a/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeList.java +++ b/SimDeCS/src/hot/org/ufcspa/simdecs/session/crud/admin/ArquivoRedeList.java @@ -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 +public class ArquivoRedeList extends SimDeCSEntityQuery { 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 index 0000000..a05a2bc --- /dev/null +++ b/SimDeCS/src/main/org/ufcspa/simdecs/entities/BayesianNetworkParser.java @@ -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 getBayesianNetworkNodes() throws Exception { + ArrayList namesList = new ArrayList(); + 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 nodes = parser.getBayesianNetworkNodes(); + System.out.println(bn); + System.out.println(nodes); + } +} diff --git a/SimDeCS/src/main/org/ufcspa/simdecs/entities/Rede.java b/SimDeCS/src/main/org/ufcspa/simdecs/entities/Rede.java index bf75f8d..25451b2 100644 --- a/SimDeCS/src/main/org/ufcspa/simdecs/entities/Rede.java +++ b/SimDeCS/src/main/org/ufcspa/simdecs/entities/Rede.java @@ -11,10 +11,13 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; +import javax.persistence.OneToOne; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.UniqueConstraint; +import org.hibernate.annotations.Index; + @Entity //Short name: "rede" @Table(name="Rede") @@ -30,8 +33,10 @@ public class Rede implements Serializable { @Column(nullable=false, length=50) private String nome; - @Column(nullable=false, length=50) - private String arquivo; + @OneToOne + @JoinColumn(name = "arquivoRede_id", referencedColumnName = "id", nullable = true) + @Index(name="rede_arquivoRede_fk_i") + private ArquivoRede arquivo; @Column(length=1, nullable=false) private boolean aplicavelSexoMasculino; @@ -63,11 +68,11 @@ public class Rede implements Serializable { this.nome = nome; } - public String getArquivo() { + public ArquivoRede getArquivo() { return arquivo; } - public void setArquivo(String arquivo) { + public void setArquivo(ArquivoRede arquivo) { this.arquivo = arquivo; } public boolean isAplicavelSexoMasculino() {