<div class="actionButtons">
<h:commandButton value="Upload"
- action="#{arquivoRedeHome.persist}"
+ action="#{arquivoRedeHome.saveNetwork}"
rendered="#{!arquivoRedeHome.managed}"/>
<h:commandButton value="Delete"
action="#{arquivoRedeHome.remove}"
<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>
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()
{
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();
+ }
}
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()
{
--- /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);
+ }
+}
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
@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
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