Modificações antes do git
authormaroni <maroni@192.168.1.103>
Tue, 14 Feb 2012 18:34:55 +0000 (16:34 -0200)
committermaroni <maroni@192.168.1.103>
Tue, 14 Feb 2012 18:34:55 +0000 (16:34 -0200)
15 files changed:
.gitignore
nbproject/project.properties
src/java/org/ufcspa/simdecs/entities/Caso.java
src/java/org/ufcspa/simdecs/entities/Paciente.java
src/java/org/ufcspa/simdecs/mb/bn/RedeUploadBean.java
src/java/org/ufcspa/simdecs/mb/editarcasos/EditarCasoBean.java
src/java/org/ufcspa/simdecs/mb/editarcasos/LoginBean.java
src/java/org/ufcspa/simdecs/mb/editarcasos/SelecioneCasoBean.java
src/java/org/ufcspa/simdecs/test/Teste.java
src/java/org/ufcspa/simdecs/util/NodoBean.java [new file with mode: 0644]
src/java/org/ufcspa/simdecs/util/UnBUtil.java [new file with mode: 0644]
web/editarcasos/editarCaso.xhtml
web/editarcasos/selecioneCaso.xhtml
web/img/patientNew.png [new file with mode: 0644]
web/style.css

index 838458f..315ea15 100644 (file)
@@ -1 +1,3 @@
-/dist/
\ No newline at end of file
+/dist/
+/build/
+/nbproject/private/
\ No newline at end of file
index 00bfdb4..fbd2862 100644 (file)
@@ -52,7 +52,7 @@ includes=**
 j2ee.compile.on.save=true
 j2ee.deploy.on.save=true
 j2ee.platform=1.6-web
-j2ee.platform.classpath=${j2ee.server.home}/modules/jstl-impl.jar:${j2ee.server.home}/modules/javax.resource.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.ejb.jar:${j2ee.server.home}/modules/jsf-impl.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.security.auth.message.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.management.j2ee.jar:${j2ee.server.home}/modules/jsf-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/javax.enterprise.deploy.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar:${j2ee.server.home}/modules/javax.security.jacc.jar:${j2ee.server.home}/modules/javax.transaction.jar:${j2ee.server.home}/modules/jersey-core.jar:${j2ee.server.home}/modules/javax.servlet.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.jms.jar
+j2ee.platform.classpath=${j2ee.server.home}/modules/jaxrpc-api-osgi.jar:${j2ee.server.home}/modules/javax.jms.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/jsf-impl.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/jaxr-api-osgi.jar:${j2ee.server.home}/modules/javax.security.jacc.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/javax.resource.jar:${j2ee.server.home}/modules/javax.enterprise.deploy.jar:${j2ee.server.home}/modules/endorsed/javax.annotation.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar:${j2ee.server.home}/modules/javax.management.j2ee.jar:${j2ee.server.home}/modules/javax.ejb.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/jsf-api.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.servlet.jar:${j2ee.server.home}/modules/javax.security.auth.message.jar:${j2ee.server.home}/modules/javax.transaction.jar:${j2ee.server.home}/modules/jersey-core.jar:${j2ee.server.home}/modules/jstl-impl.jar
 j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar
 j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar
 j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar:${j2ee.server.home}/modules/javax.ejb.jar
index 68d963c..a0e26ab 100644 (file)
@@ -47,6 +47,9 @@ public class Caso implements Serializable {
     @Column(nullable=false, length=4000)
     private String resumo;
     
+    @Column(nullable=false, length=20)
+    private String modelo;
+    
     @ManyToOne
     @JoinColumn(name="usu_id", nullable=false)    
     private Usuario usuario;
@@ -128,4 +131,14 @@ public class Caso implements Serializable {
     public void setPacientes(List<Paciente> pacientes) {
         this.pacientes = pacientes;
     }
+
+    public String getModelo() {
+        return modelo;
+    }
+
+    public void setModelo(String modelo) {
+        this.modelo = modelo;
+    }
+    
+    
 }
index 47cd958..1f40e86 100644 (file)
@@ -53,6 +53,9 @@ public class Paciente implements Serializable {
     
     @Column(length=1, nullable=false)
     private String sexo;
+
+    @Column(length=20, nullable=false)
+    private String modelo;
     
     @OneToMany(mappedBy="paciente")
     private List<NodoPaciente> nodos;
@@ -65,6 +68,14 @@ public class Paciente implements Serializable {
         this.id = id;
     }
 
+    public String getModelo() {
+        return modelo;
+    }
+
+    public void setModelo(String modelo) {
+        this.modelo = modelo;
+    } 
+    
     @Override
     public int hashCode() {
         int hash = 0;
index c683379..a96e6ff 100644 (file)
@@ -25,10 +25,11 @@ public class RedeUploadBean extends DefaultManagedBean {
     private Rede[] selectedItems;
 
     public List<Rede> getItems() {
-        CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
-        cq.select(cq.from(Rede.class));
-        Query q = em.createQuery(cq);
-        return q.getResultList();
+        //CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
+        //cq.select(cq.from(Rede.class));
+        //Query q = em.createQuery(cq);
+        return em.createQuery("From Rede").getResultList();
+        //return q.getResultList();
     }
         
     public Rede getSelectedItem() {
index 959808a..824c7bf 100644 (file)
@@ -4,17 +4,26 @@
  */
 package org.ufcspa.simdecs.mb.editarcasos;
 
+import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
+import org.primefaces.component.commandbutton.CommandButton;
+import org.primefaces.model.DualListModel;
 import org.ufcspa.simdecs.entities.Caso;
 import org.ufcspa.simdecs.entities.Nodo;
+import org.ufcspa.simdecs.entities.NodoPaciente;
 import org.ufcspa.simdecs.entities.Paciente;
+import org.ufcspa.simdecs.entities.PerguntaNodo;
 import org.ufcspa.simdecs.entities.Rede;
 import org.ufcspa.simdecs.mb.DefaultManagedBean;
+import org.ufcspa.simdecs.util.NodoBean;
+import org.ufcspa.simdecs.util.UnBUtil;
+import unbbayes.prs.bn.ProbabilisticNode;
 
 /**
  *
@@ -30,12 +39,20 @@ public class EditarCasoBean extends DefaultManagedBean {
     private Float pesoPaciente;
     private Float alturaPaciente;
     private String sexoPaciente;
+    private String modeloPaciente;
     private Long redePaciente;
     private Map<String, String> listaRedesPaciente;
     private List<Paciente> listaPacientes;
     private String relato;
-    private Map<String, String> listaSinaisSintomas;
-    private List<String> sinaisSintomasSelecionados;
+    private DualListModel<Nodo> sinaisSintomas;
+    private DualListModel<Nodo> historicos;
+    private DualListModel<Nodo> examesFisicos;
+    private DualListModel<Nodo> examesComplementares;
+    private String xml;
+
+    
+    private List<NodoBean> diagnosticos;
+    private List<NodoBean> condutas;
 
     private Caso caso;
 
@@ -52,9 +69,16 @@ public class EditarCasoBean extends DefaultManagedBean {
             Rede rede = it.next();
             listaRedesPaciente.put(rede.getNome(), String.valueOf(rede.getId()));
         }
-        
+            
         // Popula Lista de Pacientes
-        listaPacientes = caso.getPacientes();
+        listaPacientes = em.createQuery("From Paciente where caso.id=:pIDCaso")
+                           .setParameter("pIDCaso", caso.getId())
+                           .getResultList();
+        
+        sinaisSintomas       = new DualListModel<Nodo>();
+        historicos           = new DualListModel<Nodo>();
+        examesFisicos        = new DualListModel<Nodo>();
+        examesComplementares = new DualListModel<Nodo>();
     }
     
     /** Creates a new instance of EditarCasoBean */
@@ -62,13 +86,272 @@ public class EditarCasoBean extends DefaultManagedBean {
         populate();
     }
 
+    public String voltar() {
+        return "/editarcasos/selecioneCaso.jsf?faces-redirect=true";
+    }
+    
     public void prepareAdicionarPaciente() {
         redePaciente = idPaciente = null;
         sexoPaciente = nomePaciente = "";
         pesoPaciente = null;
         idadePaciente= null;
+
+        CommandButton buttonCriar    = (CommandButton) getComponentById("fEditarPaciente:criar");
+        CommandButton buttonEditar   = (CommandButton) getComponentById("fEditarPaciente:editar");
+        CommandButton buttonExcluir  = (CommandButton) getComponentById("fEditarPaciente:excluir");
+
+        buttonCriar.setRendered(true);
+        buttonEditar.setRendered(false);
+        buttonExcluir.setRendered(false);
+    }
+
+    public void prepareEditarPaciente() {
+        Paciente paciente = em.find(Paciente.class, Long.valueOf(getTextParameter("pIdPaciente")));
+        Rede rede = paciente.getRede();
+
+        
+        redePaciente = rede.getId();
+        idPaciente = paciente.getId();
+        sexoPaciente = paciente.getSexo();
+        nomePaciente = paciente.getNome();
+        pesoPaciente = paciente.getPeso();
+        idadePaciente= paciente.getIdade();
+        alturaPaciente  = paciente.getAltura();
+        modeloPaciente = paciente.getModelo();
+
+        CommandButton buttonCriar    = (CommandButton) getComponentById("fEditarPaciente:criar");
+        CommandButton buttonEditar   = (CommandButton) getComponentById("fEditarPaciente:editar");
+        CommandButton buttonExcluir  = (CommandButton) getComponentById("fEditarPaciente:excluir");
+
+        buttonCriar.setRendered(false);
+        buttonEditar.setRendered(true);
+        buttonExcluir.setRendered(true);
+        
+    
+    }
+
+    private Nodo getNodoByNome(String nome) {
+        return (Nodo) em.createQuery("From Nodo where nome=:pNome")
+          .setParameter("pNome", nome)
+          .getSingleResult();
     }
+    
+    public void salvarCaso() {
+        em.getTransaction().begin();
+        
+        idPaciente = Long.valueOf(getTextParameter("pIdPaciente"));
+        
+        em.createQuery("Delete From NodoPaciente where paciente.id=:pIDPaciente")
+          .setParameter("pIDPaciente", idPaciente)
+          .executeUpdate();
+        
+        // Sinais e Sintomas
+        for (Object nomeNodo : sinaisSintomas.getTarget()) {
+            Nodo nodo = getNodoByNome((String) nomeNodo);
+            Paciente paciente = em.find(Paciente.class, idPaciente);
+            
+            NodoPaciente nodoPaciente = new NodoPaciente();
+            nodoPaciente.setPaciente(paciente);
+            nodoPaciente.setNodo(nodo);
+            em.persist(nodoPaciente);
+        }
+
+        // Historicos
+        for (Object nomeNodo : historicos.getTarget()) {
+            Nodo nodo = getNodoByNome((String) nomeNodo);
+            Paciente paciente = em.find(Paciente.class, idPaciente);
+            
+            NodoPaciente nodoPaciente = new NodoPaciente();
+            nodoPaciente.setPaciente(paciente);
+            nodoPaciente.setNodo(nodo);
+            em.persist(nodoPaciente);
+        }
 
+        // Exames Físicos
+        for (Object nomeNodo : examesFisicos.getTarget()) {
+            Nodo nodo = getNodoByNome((String) nomeNodo);
+            Paciente paciente = em.find(Paciente.class, idPaciente);
+            
+            NodoPaciente nodoPaciente = new NodoPaciente();
+            nodoPaciente.setPaciente(paciente);
+            nodoPaciente.setNodo(nodo);
+            em.persist(nodoPaciente);
+        }
+        // Exames Complementares
+        for (Object nomeNodo : examesComplementares.getTarget()) {
+            Nodo nodo = getNodoByNome((String) nomeNodo);
+            Paciente paciente = em.find(Paciente.class, idPaciente);
+            
+            NodoPaciente nodoPaciente = new NodoPaciente();
+            nodoPaciente.setPaciente(paciente);
+            nodoPaciente.setNodo(nodo);
+            em.persist(nodoPaciente);
+        }
+        em.getTransaction().commit();
+        addInfoMessage("Salvo com Sucesso!", "Caso clínico salvo com sucesso!");
+    }
+    
+    public void processaRede() {
+        UnBUtil unBUtil = UnBUtil.getInstance();
+        unBUtil.abreRede();
+
+        // Sinais e Sintomas
+        for (Object nodo : sinaisSintomas.getSource()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.desativarNodo(pn);
+        }
+
+        for (Object nodo : sinaisSintomas.getTarget()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.ativarNodo(pn);
+        }
+        
+        // Historicos
+        for (Object nodo : historicos.getSource()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.desativarNodo(pn);
+        }
+
+        for (Object nodo : historicos.getTarget()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.ativarNodo(pn);
+        }
+
+        // Exames Físicos
+        for (Object nodo : examesFisicos.getSource()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.desativarNodo(pn);
+        }
+
+        for (Object nodo : examesFisicos.getTarget()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.ativarNodo(pn);
+        }
+        
+        // Exames Complementares
+        for (Object nodo : examesComplementares.getSource()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.desativarNodo(pn);
+        }
+
+        for (Object nodo : examesComplementares.getTarget()) {
+            ProbabilisticNode pn = unBUtil.getNodeByName((String) nodo);
+            unBUtil.ativarNodo(pn);
+        }
+
+        diagnosticos = unBUtil.getProbabilidadeDiagnosticos();
+        condutas     = unBUtil.getProbabilidadeCondutas();
+    }
+    
+    
+    private String getPerguntaNodo(Long idNodo) {
+        List <PerguntaNodo> perguntas = em.createQuery("From PerguntaNodo where nodo.id=:pIdNodo")
+                                         .setParameter("pIdNodo", idNodo)
+                                         .getResultList();
+        
+        int random = (int) (1+Math.random()*perguntas.size());
+        int i=1;
+        
+        for(PerguntaNodo pergunta : perguntas) {
+            if (i++ == random)
+                return pergunta.getTexto();
+        }
+                
+        return "";
+    }
+    
+    public void gerarXML() throws IOException {
+        
+        StringBuilder str = new StringBuilder();
+        str.append("<caso uid=\"caso-" + caso.getId() + "\" titulo=\"" + caso.getNome() + "\" modelo=\"" + caso.getModelo() + "\" descricaoAmbiente=\"" + caso.getTextoInicial() + "\">\n");
+
+        Iterator<Paciente> itPac = em.createQuery("From Paciente where caso.id=:pIdCaso")
+                                     .setParameter("pIdCaso", caso.getId())
+                                     .getResultList()
+                                     .iterator();
+        while(itPac.hasNext()) {
+            Paciente paciente = itPac.next();
+            str.append("    <ator uid=\"paciente-" + paciente.getId() + "\" tipo=\"paciente\" nome=\"" + paciente.getNome() + "\" modelo=\"" + paciente.getModelo() + "\" idade=\"" + paciente.getIdade() + "\" peso=\"" + paciente.getPeso() + "\" altura=\"" + paciente.getAltura() + "\" >\n");
+
+            str.append("        <etapa uid=\"etapa-1\" nome=\"Investigação\" sequencia=\"1\" tipo=\"investigacao\">\n");
+
+            // Sinais e sintomas
+            str.append("            <perguntar_sintoma uid=\"perguntar-sintoma-" + paciente.getId() + "\" descricao=\"Perguntar Sinais/Sintomas\">\n");                        
+            List<NodoPaciente> nodos = em.createQuery("From NodoPaciente Where paciente.id=:pIDPaciente")
+                                         .setParameter("pIDPaciente", paciente.getId())                
+                                         .getResultList();
+            for(NodoPaciente nodo : nodos) {
+                if (!nodo.getNodo().getTipo().equals(Nodo.SINAL_SINTOMA))
+                    continue;
+                
+                str.append("                <sintoma uid=\"sintoma-" + nodo.getId() + "\" nomeCientifico=\"" + nodo.getNodo().getNome() + "\" nomePopular=\"" + nodo.getNodo().getNomeAmigavel() + "\" imagem=\"\" som=\"\" video=\"\" falaPaciente=\"" + getPerguntaNodo(nodo.getNodo().getId())  + "\">\n");
+            }
+            str.append("            </perguntar_sintoma>\n");
+
+            // Exame Físico
+            str.append("            <realiza_exame_fisico uid=\"realiza-exame-fisico-" + paciente.getId() + "\" descricao=\"Realizar Exame Físico\">\n");                     
+            for(NodoPaciente nodo : nodos) {
+                if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_FISICO))
+                    continue;
+                
+                str.append("                <exame_fisico uid=\"exame-fisico-" + nodo.getId() + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\">\n");
+            }
+            str.append("            </realiza_exame_fisico>\n");
+
+            // Exame Complementar
+            str.append("            <solicitar_exames_complementar uid=\"solicitar-exame-complementar-" + paciente.getId() + "\" descricao=\"Solicitar Exame Complementar\">\n");                      
+            for(NodoPaciente nodo : nodos) {
+                if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_COMPLEMENTAR))
+                    continue;
+                
+                str.append("                <exame_complementar uid=\"exame-complementar-" + nodo.getId() + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\">\n");
+            }
+            str.append("            </solicitar_exames_complementar>\n");
+
+            // historico
+            for(NodoPaciente nodo : nodos) {
+                if (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO))
+                    continue;
+                
+                str.append("        <historico_medico uid=\"historico-medico-" + nodo.getId() + "\" descricao=\"Histórico Médico\" historico=\"" + nodo.getNodo().getNomeAmigavel() + "\" falaPaciente=\"" + getPerguntaNodo(nodo.getNodo().getId())  + "\" imagem=\"\" som=\"\" video=\"\">\n");
+            }
+            
+            
+            str.append("        </etapa>\n");
+            
+            str.append("        <etapa uid=\"etapa-2\" nome=\"Diagnóstico\" sequencia=\"2\" tipo=\"diagnostico\">\n");           
+            Iterator<Nodo> itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo")
+                                              .setParameter("pTipo", Nodo.DIAGNOSTICO)
+                                              .getResultList()
+                                              .iterator();            
+            while(itDiagnosticos.hasNext()) {
+                Nodo nodo = itDiagnosticos.next();
+                str.append("            <diagnostico uid=\"diagnostico-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" />\n");
+            }
+            str.append("        </etapa>\n");
+            
+            str.append("        <etapa uid=\"etapa-3\" nome=\"Conduta\" sequencia=\"3\" tipo=\"conduta\">\n");           
+            Iterator<Nodo> itConduta = em.createQuery("From Nodo where tipo=:pTipo")
+                                              .setParameter("pTipo", Nodo.CONDUTA)
+                                              .getResultList()
+                                              .iterator();            
+            while(itConduta.hasNext()) {
+                Nodo nodo = itConduta.next();
+                str.append("            <conduta uid=\"conduta-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" />\n");
+            }
+            str.append("        </etapa>\n");
+            
+                   
+            str.append("    </ator>\n");
+            
+        }
+       
+        
+        str.append("</caso>\n");
+        xml = str.toString();
+        addInfoMessage("Arquivo gerado!", "XML gerado com sucesso!");        
+    }
+    
     public void adicionarPaciente() {
         Rede rede = em.find(Rede.class, redePaciente);
         em.getTransaction().begin();
@@ -79,6 +362,7 @@ public class EditarCasoBean extends DefaultManagedBean {
         paciente.setSexo(sexoPaciente);
         paciente.setAltura(alturaPaciente);
         paciente.setRede(rede);
+        paciente.setModelo(modeloPaciente);
         paciente.setCaso(caso);
         em.persist(paciente);
         em.getTransaction().commit();
@@ -86,19 +370,101 @@ public class EditarCasoBean extends DefaultManagedBean {
         populate();
     }
     
+    public void editarPaciente() {
+        Paciente paciente = em.find(Paciente.class, idPaciente);
+        Rede rede = em.find(Rede.class, redePaciente);
+        em.getTransaction().begin();
+        paciente.setNome(nomePaciente);
+        paciente.setIdade(idadePaciente);
+        paciente.setPeso(pesoPaciente);
+        paciente.setSexo(sexoPaciente);
+        paciente.setAltura(alturaPaciente);
+        paciente.setRede(rede);
+        paciente.setCaso(caso);
+        paciente.setModelo(modeloPaciente);
+        em.persist(paciente);
+        em.getTransaction().commit();
+        addInfoMessage("Paciente Alterado!", "Paciente alterado com sucesso!");
+        populate();
+    }
+    
+    public void excluirPaciente() {
+        Paciente paciente = em.find(Paciente.class, idPaciente);
+        em.getTransaction().begin();
+        
+         em.createQuery("Delete From NodoPaciente Where paciente.id=:pIDPaciente")
+          .setParameter("pIDPaciente", paciente.getId())
+          .executeUpdate();
+       
+        
+        em.remove(paciente);
+        em.getTransaction().commit();
+        addInfoMessage("Paciente Excluído!", "Paciente excluido com sucesso!");
+        populate();
+    }
+
     public void selecionaPaciente() {
         Paciente paciente = em.find(Paciente.class, Long.valueOf(getTextParameter("pIdPaciente")));
         
-        Iterator<Nodo> it = em.createQuery("From Nodo Where rede.id=:pRedeID and tipo=:pTipo")
-                                .setParameter("pRedeID", paciente.getId())
-                                .setParameter("pTipo", Nodo.SINAL_SINTOMA)
+        idPaciente = paciente.getId();
+        
+        // Lista de Nodos - Origem
+        Iterator<Nodo> itOrg = em.createQuery("From Nodo Where rede.id=:pRedeID and id not in (select nodo.id from NodoPaciente where paciente.id=:pIDPaciente)")
+                                .setParameter("pRedeID", paciente.getRede().getId())
+                                .setParameter("pIDPaciente", paciente.getId())
                                 .getResultList()
                                 .iterator();
-        listaSinaisSintomas = new HashMap<String, String>();
-        while(it.hasNext()) {
-            Nodo nodo = it.next();
-            listaSinaisSintomas.put(nodo.getNomeAmigavel(), nodo.getNome());
+        
+        List<Nodo> origemSinaisSintomas = new ArrayList<Nodo>();
+        List<Nodo> destinoSinaisSintomas = new ArrayList<Nodo>();
+        List<Nodo> origemHistoricos  = new ArrayList<Nodo>();
+        List<Nodo> destinoHistoricos = new ArrayList<Nodo>();
+        List<Nodo> origemExamesFisicos  = new ArrayList<Nodo>();
+        List<Nodo> destinoExamesFisicos = new ArrayList<Nodo>();
+        List<Nodo> origemExamesComplementares  = new ArrayList<Nodo>();
+        List<Nodo> destinoExamesComplementares = new ArrayList<Nodo>();
+        
+        while(itOrg.hasNext()) {
+            Nodo nodo = itOrg.next();
+
+            if (nodo.getTipo().equals(Nodo.SINAL_SINTOMA))
+                origemSinaisSintomas.add(nodo);
+            if (nodo.getTipo().equals(Nodo.HISTORICO))
+                origemHistoricos.add(nodo);
+            if (nodo.getTipo().equals(Nodo.EXAME_FISICO))
+                origemExamesFisicos.add(nodo);
+            if (nodo.getTipo().equals(Nodo.EXAME_COMPLEMENTAR))
+                origemExamesComplementares.add(nodo);
         }
+        
+        // Lista de Nodos - Destino
+        Iterator<NodoPaciente> itDes = em.createQuery("From NodoPaciente Where paciente.id=:pIDPaciente")
+                                .setParameter("pIDPaciente", paciente.getId())                
+                                .getResultList()
+                                .iterator();
+        while(itDes.hasNext()) {
+            NodoPaciente nodoPaciente = itDes.next();
+            Nodo nodo = nodoPaciente.getNodo();
+            if (nodo.getTipo().equals(Nodo.SINAL_SINTOMA))
+                destinoSinaisSintomas.add(nodo);
+            if (nodo.getTipo().equals(Nodo.HISTORICO))
+                destinoHistoricos.add(nodo);
+            if (nodo.getTipo().equals(Nodo.EXAME_FISICO))
+                destinoExamesFisicos.add(nodo);
+            if (nodo.getTipo().equals(Nodo.EXAME_COMPLEMENTAR))
+                destinoExamesComplementares.add(nodo);
+        }
+        
+        
+        sinaisSintomas = new DualListModel<Nodo>(origemSinaisSintomas, destinoSinaisSintomas);
+        historicos = new DualListModel<Nodo>(origemHistoricos, destinoHistoricos);
+        examesFisicos = new DualListModel<Nodo>(origemExamesFisicos, destinoExamesFisicos);
+        examesComplementares = new DualListModel<Nodo>(origemExamesComplementares, destinoExamesComplementares);
+    
+        UnBUtil unBUtil = UnBUtil.getInstance();
+
+        diagnosticos = unBUtil.getProbabilidadeDiagnosticos();
+        condutas     = unBUtil.getProbabilidadeCondutas();
     }
     
     public Caso getCaso() {
@@ -174,22 +540,6 @@ public class EditarCasoBean extends DefaultManagedBean {
         this.listaPacientes = listaPacientes;
     }
 
-    public Map<String, String> getListaSinaisSintomas() {
-        return listaSinaisSintomas;
-    }
-
-    public void setListaSinaisSintomas(Map<String, String> listaSinaisSintomas) {
-        this.listaSinaisSintomas = listaSinaisSintomas;
-    }
-
-    public List<String> getSinaisSintomasSelecionados() {
-        return sinaisSintomasSelecionados;
-    }
-
-    public void setSinaisSintomasSelecionados(List<String> sinaisSintomasSelecionados) {
-        this.sinaisSintomasSelecionados = sinaisSintomasSelecionados;
-    }
-
 
     public String getRelato() {
         return relato;
@@ -207,5 +557,68 @@ public class EditarCasoBean extends DefaultManagedBean {
         this.alturaPaciente = alturaPaciente;
     }
 
-    
+    public DualListModel<Nodo> getSinaisSintomas() {
+        return sinaisSintomas;
+    }
+
+    public void setSinaisSintomas(DualListModel<Nodo> sinaisSintomas) {
+        this.sinaisSintomas = sinaisSintomas;
+    }
+
+    public List<NodoBean> getDiagnosticos() {
+        return diagnosticos;
+    }
+
+    public void setDiagnosticos(List<NodoBean> diagnosticos) {
+        this.diagnosticos = diagnosticos;
+    }
+
+    public DualListModel<Nodo> getExamesComplementares() {
+        return examesComplementares;
+    }
+
+    public void setExamesComplementares(DualListModel<Nodo> examesComplementares) {
+        this.examesComplementares = examesComplementares;
+    }
+
+    public DualListModel<Nodo> getExamesFisicos() {
+        return examesFisicos;
+    }
+
+    public void setExamesFisicos(DualListModel<Nodo> examesFisicos) {
+        this.examesFisicos = examesFisicos;
+    }
+
+    public DualListModel<Nodo> getHistoricos() {
+        return historicos;
+    }
+
+    public void setHistoricos(DualListModel<Nodo> historicos) {
+        this.historicos = historicos;
+    }
+
+    public List<NodoBean> getCondutas() {
+        return condutas;
+    }
+
+    public void setCondutas(List<NodoBean> condutas) {
+        this.condutas = condutas;
+    }
+
+    public String getXml() {
+        return xml;
+    }
+
+    public void setXml(String xml) {
+        this.xml = xml;
+    }
+
+    public String getModeloPaciente() {
+        return modeloPaciente;
+    }
+
+    public void setModeloPaciente(String modeloPaciente) {
+        this.modeloPaciente = modeloPaciente;
+    }
+        
 }
index 7600b1c..c8d0893 100644 (file)
@@ -6,12 +6,10 @@ package org.ufcspa.simdecs.mb.editarcasos;
 
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
-import javax.persistence.EntityManager;
 import javax.persistence.NoResultException;
 import javax.servlet.http.HttpSession;
 import org.ufcspa.simdecs.entities.Usuario;
 import org.ufcspa.simdecs.mb.DefaultManagedBean;
-import org.ufcspa.simdecs.util.DbUtil;
 
 /**
  *
@@ -51,6 +49,36 @@ public class LoginBean extends DefaultManagedBean {
             HttpSession session = getSession();
             session.setAttribute("usuario", usuario);
             session.setMaxInactiveInterval(-1);
+ /*           
+        UnBUtil unBUtil = UnBUtil.getInstance();
+        
+        ProbabilisticNode pn = unBUtil.getNodeByDescription("Photophobia");
+        unBUtil.ativarNodo(pn);
+
+        ProbabilisticNode pn2 = unBUtil.getNodeByDescription("Hemicranial Pain");
+        unBUtil.ativarNodo(pn2);
+
+        Rede rede = em.find(Rede.class, 1L);
+        for (int j = 0; j < unBUtil.getRede().getNodeCount(); j++) {
+            ProbabilisticNode nodoAtual = (ProbabilisticNode) unBUtil.getRede().getNodeAt(j);
+            
+            em.getTransaction().begin();
+            Nodo nodo = new Nodo();
+            nodo.setBogus("N");
+            nodo.setRede(rede);
+            nodo.setCusto(0f);
+            nodo.setNome(nodoAtual.getDescription());
+            nodo.setNomeAmigavel(nodoAtual.getDescription());
+            nodo.setTempo(0);
+            nodo.setTipo("nao classificado");
+            em.persist(nodo);
+            em.getTransaction().commit();
+            
+            
+            System.out.println(nodoAtual.getDescription());
+        }
+         */
+            
             return "editarcasos/selecioneCaso.jsf?faces-redirect=true";
         } catch (NoResultException e) {
                 addInfoMessage("Usuário/Senha Inválidos", "Usuário/Senha Inválidos");
index 96df97a..31f3db0 100644 (file)
@@ -26,6 +26,7 @@ public class SelecioneCasoBean extends DefaultManagedBean {
     private String nomeCaso;
     private String textoInicial;
     private String resumo;
+    private String modelo;
     private List<Caso> listaCasos;
 
     public String getNomeUsuario() {
@@ -58,6 +59,7 @@ public class SelecioneCasoBean extends DefaultManagedBean {
         caso.setResumo(resumo);
         caso.setTextoInicial(textoInicial);
         caso.setUsuario(usuario);
+        caso.setModelo(modelo);
         em.persist(caso);
         
         em.getTransaction().commit();
@@ -76,6 +78,7 @@ public class SelecioneCasoBean extends DefaultManagedBean {
             caso.setNome(nomeCaso);
             caso.setResumo(resumo);
             caso.setTextoInicial(textoInicial);
+            caso.setModelo(modelo);
             em.persist(caso);
 
             em.getTransaction().commit();
@@ -96,6 +99,7 @@ public class SelecioneCasoBean extends DefaultManagedBean {
         nomeCaso = caso.getNome();
         textoInicial = caso.getTextoInicial();
         resumo = caso.getResumo();
+        modelo = caso.getModelo();
         
         CommandButton buttonCriar   = (CommandButton) getComponentById("fEditarCaso:criar");
         CommandButton buttonEditar  = (CommandButton) getComponentById("fEditarCaso:editar");
@@ -108,12 +112,21 @@ public class SelecioneCasoBean extends DefaultManagedBean {
     
     public void excluirCasoClinico() {
         Long id = Long.valueOf(getTextParameter("pIDCaso"));
-        Caso caso = (Caso) em.createQuery("From Caso Where id=:pIDCaso")
-          .setParameter("pIDCaso", id)
-          .getSingleResult();
         
         em.getTransaction().begin();
-        em.remove(caso);
+
+        em.createQuery("Delete From NodoPaciente Where paciente.id in (Select id from Paciente where caso.id=:pIDCaso)")
+          .setParameter("pIDCaso", id)
+          .executeUpdate();
+
+        em.createQuery("Delete From Paciente Where caso.id=:pIDCaso")
+          .setParameter("pIDCaso", id)
+          .executeUpdate();
+
+        em.createQuery("Delete From Caso Where id=:pIDCaso")
+          .setParameter("pIDCaso", id)
+          .executeUpdate();
+
         em.getTransaction().commit();
         populateCasosClinicos();
         addInfoMessage("Excluido!", "Caso clínico excluido com sucesso!");
@@ -170,4 +183,12 @@ public class SelecioneCasoBean extends DefaultManagedBean {
         this.idCaso = idCaso;
     }
 
+    public String getModelo() {
+        return modelo;
+    }
+
+    public void setModelo(String modelo) {
+        this.modelo = modelo;
+    }
+
 }
index 2754040..878dd2b 100644 (file)
@@ -5,7 +5,8 @@
 package org.ufcspa.simdecs.test;
 
 import java.io.File;
-import unbbayes.io.xmlbif.version4.XMLBIFIO;
+import unbbayes.io.xmlbif.version6.XMLBIFIO;
+import unbbayes.prs.Node;
 import unbbayes.prs.bn.ProbabilisticNetwork;
 import unbbayes.prs.bn.ProbabilisticNode;
 
@@ -15,28 +16,8 @@ import unbbayes.prs.bn.ProbabilisticNode;
  */
 public class Teste {
 
-    /**
-     * @param args
-     */
     public static void main(String[] args) {
-        /*
-         * Carregando uma rede espec’fica
-         */
-        ProbabilisticNetwork rede = new ProbabilisticNetwork(null);
-        try {
-            XMLBIFIO.loadXML(new File("/Users/maroni/teste.xml"), rede);
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            System.exit(1);
-        }
-
-        /*
-         * Lendo um nodo espec’fico
-         * Pegando um nodo. Para trabalhar com a tabela de probabilidades,
-         * preciso que este nodo seja um ProbabilisticNode. Repare no typecasting 
-         */
-
-        ProbabilisticNode nodo = (ProbabilisticNode) rede.getNode("seizure");
+        int i = (int) (1+Math.random()*10);
+        System.out.println("i: " + i);
     }
 }
diff --git a/src/java/org/ufcspa/simdecs/util/NodoBean.java b/src/java/org/ufcspa/simdecs/util/NodoBean.java
new file mode 100644 (file)
index 0000000..a95dd68
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.ufcspa.simdecs.util;
+
+import org.ufcspa.simdecs.entities.Nodo;
+import unbbayes.prs.bn.ProbabilisticNode;
+
+/**
+ *
+ * @author maroni
+ */
+public class NodoBean {
+
+    private Nodo nodo;
+    private ProbabilisticNode probabilisticNode;
+
+    public NodoBean(Nodo nodo, ProbabilisticNode probabilisticNode) {
+        this.nodo = nodo;
+        this.probabilisticNode = probabilisticNode;
+    }
+    
+    public Nodo getNodo() {
+        return nodo;
+    }
+
+    public void setNodo(Nodo nodo) {
+        this.nodo = nodo;
+    }
+
+    public ProbabilisticNode getProbabilisticNode() {
+        return probabilisticNode;
+    }
+
+    public void setProbabilisticNode(ProbabilisticNode probabilisticNode) {
+        this.probabilisticNode = probabilisticNode;
+    }
+    
+    public float getProbabilidade() {
+        for (int pb = 0; pb < probabilisticNode.getStatesSize(); pb++) {
+                if (probabilisticNode.getStateAt(pb).toLowerCase().equals("yes"))
+                    return probabilisticNode.getMarginalAt(pb);
+        }
+        return 0;
+    }
+
+    public float getPercentualProbabilidade() {
+        return Math.round(getProbabilidade() * 100);
+    }
+}
diff --git a/src/java/org/ufcspa/simdecs/util/UnBUtil.java b/src/java/org/ufcspa/simdecs/util/UnBUtil.java
new file mode 100644 (file)
index 0000000..74b1987
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.ufcspa.simdecs.util;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import javax.persistence.EntityManager;
+import org.ufcspa.simdecs.entities.Nodo;
+import unbbayes.io.xmlbif.version6.XMLBIFIO;
+import unbbayes.prs.Node;
+import unbbayes.prs.bn.JunctionTreeAlgorithm;
+import unbbayes.prs.bn.ProbabilisticNetwork;
+import unbbayes.prs.bn.ProbabilisticNode;
+
+/**
+ *
+ * @author maroni
+ */
+public class UnBUtil {
+
+    
+    private static UnBUtil unBUtil;
+    private ProbabilisticNetwork rede;
+    
+    private UnBUtil() {
+        abreRede();
+    }
+    
+    public final void abreRede() {
+        try {
+            // required to run unbbayes gui classes on server
+            System.setProperty("java.awt.headless", "false"); 
+
+            rede = new ProbabilisticNetwork(null);
+            XMLBIFIO.loadXML(new File("/Users/maroni/NetBeansProjects/SimDeCS/samples/headache.xml"), rede);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.exit(1);
+        }
+        
+        compilar();
+    }
+    
+    public static UnBUtil getInstance() {
+        if (unBUtil == null) 
+            unBUtil = new UnBUtil();
+        
+        return unBUtil;
+    }
+
+    public ProbabilisticNode getNodeByName(String name) {
+        for(Node node : rede.getNodes()) {
+            if (node.getName().equals(name))
+                return (ProbabilisticNode) node;
+        }
+        
+        return null;
+    }
+    
+    public ProbabilisticNetwork getRede() {
+        return rede;
+    }
+
+    public void compilar() {
+        JunctionTreeAlgorithm jt = new JunctionTreeAlgorithm();
+       jt.setNet(rede);            
+       jt.run();
+    }
+    
+    public void setProbablidadeNodo(ProbabilisticNode pn, float sim, float nao) {
+       float likelihood[] = new float[pn.getStatesSize()]; //nr. de estados do nodo
+       likelihood[0] = sim;
+       likelihood[1] = nao;
+
+        pn.addLikeliHood(likelihood);
+       try {
+            unBUtil.getRede().updateEvidences();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }      
+    }
+    
+    public void ativarNodo(ProbabilisticNode pn) {
+        setProbablidadeNodo(pn, 1f, 0.0f);
+    }
+
+    public void desativarNodo(ProbabilisticNode pn) {
+        setProbablidadeNodo(pn, 0.0f, 1f);
+    }
+    
+    
+    public List<NodoBean> getProbabilidadeNodos(String tipo) {
+        EntityManager em = DbUtil.getInstance().getEntityManager();
+        List<NodoBean> nodos = new ArrayList<NodoBean>();
+        
+        for (int j = 0; j < rede.getNodeCount(); j++) {
+            ProbabilisticNode nodoAtual = (ProbabilisticNode) rede.getNodeAt(j);
+
+            
+            Nodo nodo = (Nodo) em.createQuery("From Nodo where nome=:pNome")
+                          .setParameter("pNome", nodoAtual.getName())
+                          .getSingleResult();
+            
+            
+            if (!nodo.getTipo().equals(tipo))
+                continue;
+            
+            nodos.add(new NodoBean(nodo, nodoAtual));                  
+       }
+
+        Collections.sort(nodos, new Comparator() {
+            @Override
+            public int compare(Object o1, Object o2) {
+                NodoBean nodo1 = (NodoBean) o1;
+                NodoBean nodo2 = (NodoBean) o2;
+                
+                if (nodo1.getProbabilidade() < nodo2.getProbabilidade())
+                    return 1;
+                else if (nodo1.getProbabilidade() > nodo2.getProbabilidade())
+                    return -1;
+                else
+                    return 0;
+            }
+        });
+
+        return nodos;
+    }
+
+    public List<NodoBean> getProbabilidadeDiagnosticos() {
+        return getProbabilidadeNodos(Nodo.DIAGNOSTICO);
+    }
+
+    public List<NodoBean> getProbabilidadeCondutas() {
+        return getProbabilidadeNodos(Nodo.CONDUTA);
+    }
+    
+    public void print() {
+           for (int j = 0; j < rede.getNodeCount(); j++) {
+               ProbabilisticNode nodoAtual = (ProbabilisticNode) rede.getNodeAt(j);
+               System.out.println(nodoAtual.getName());
+               
+               // Verificando a tabela de probabilidades do nodo
+                for (int pb = 0; pb < nodoAtual.getStatesSize(); pb++) {
+                        System.out.println(nodoAtual.getStateAt(pb)+":"+nodoAtual.getMarginalAt(pb));
+                }
+                 System.out.println("");
+           }
+    }
+}
index 0542a4a..07063b1 100644 (file)
@@ -1,11 +1,10 @@
 <?xml version='1.0' encoding='UTF-8' ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:p="http://primefaces.prime.com.tr/ui"
+      xmlns:p="http://primefaces.org/ui"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core"
-      xmlns:ui="http://java.sun.com/jsf/facelets"
-      xmlns:c="http://java.sun.com/jsp/jstl/core">
+      xmlns:ui="http://java.sun.com/jsf/facelets">
     <h:head>
         <title>SimDeCS - Selecione o Caso</title>
         <link type="text/css" rel="stylesheet" href="../style.css" />
   
         <p:panel id="pSelecionarPaciente" header="Seleção de Pacientes">
             <h:form id="fPaciente">
+                <h:inputHidden value="#{editarCasoBean.idPaciente}" />
+                
                 Bem vindo ao caso clínico "<h:outputText value="#{editarCasoBean.caso.nome}" />"!<br/><br/>
                 Selecione abaixo um dos pacientes ou clique em "Adicionar novo paciente" para montagem do caso clínico.
-                <br/><br/>
-                <p:commandLink value="Adicionar novo paciente" oncomplete="pEditarPaciente.show()" actionListener="#{editarCasoBean.prepareAdicionarPaciente()}" />
+                <br/>
 
-                <ui:repeat id="listaPacientes" value="#{editarCasoBean.listaPacientes}" var="paciente">
-                    <table border="0">
-                        <tr>
+                <table border="0">
+                    <tr>
+                        <ui:repeat id="listaPacientes" value="#{editarCasoBean.listaPacientes}" var="paciente">
                             <td align="center">
                                 <p:commandLink update="fMontarCaso" oncomplete="pMontarCaso.show();" actionListener="#{editarCasoBean.selecionaPaciente()}">
                                     <f:param name="pIdPaciente" value="#{paciente.id}" />
                                 <p:commandLink update="fMontarCaso" value="#{paciente.nome}" oncomplete="pMontarCaso.show();" actionListener="#{editarCasoBean.selecionaPaciente()}">
                                     <f:param name="pIdPaciente" value="#{paciente.id}" />
                                 </p:commandLink>
+                                <br/>
+                                <p:commandLink update="pEditarPaciente" value="(editar)" oncomplete="pEditarPaciente.show();" actionListener="#{editarCasoBean.prepareEditarPaciente()}">
+                                    <f:param name="pIdPaciente" value="#{paciente.id}" />
+                                </p:commandLink>
                             </td>
-                        </tr>
-                    </table>
-                </ui:repeat>
+                        </ui:repeat>
+                        <td align="center">
+                           <p:commandLink  oncomplete="pEditarPaciente.show()" update="pEditarPaciente" actionListener="#{editarCasoBean.prepareAdicionarPaciente()}">
+                               <img src="../img/patientNew.png" border="0"/>
+                           </p:commandLink>
+                           <br/>
+                           <p:commandLink value="Adicionar novo paciente" oncomplete="pEditarPaciente.show()" actionListener="#{editarCasoBean.prepareAdicionarPaciente()}"  />
+                        </td>
+                    </tr>
+                </table>
+                <br/><br/>
+                <p:inputTextarea id="xmlText" value="#{editarCasoBean.xml}" rows="18" autoResize="false" cols="200"/>
+                <br/>
+                <p:commandButton id="gerarXML" update="xmlText, messageGrow"  action="#{editarCasoBean.gerarXML()}" value="Gerar XML" />
+                 &nbsp;&nbsp;&nbsp;
+                 <p:commandButton id="voltar" value="Voltar" immediate="true" action="#{editarCasoBean.voltar()}" />
+                <br/>
             </h:form>
         </p:panel>
         <br/>
         
-        <p:dialog id="pMontarCaso" modal="true" width="800" height="500" header="Montagem do Caso" widgetVar="pMontarCaso">
+        <p:dialog id="pMontarCaso" modal="true" width="950" height="630" header="Montagem do Caso" widgetVar="pMontarCaso">
             <h:form id="fMontarCaso">
-                <table border="0" width="100%">
-                    <tr>
-                        <th>Relato Inicial do Paciente</th>
-                    </tr>
-                    <tr>
-                        <td width="100%">
-                            <p:inputTextarea value="#{editarCasoBean.relato}" rows="4" style="width:100%;"/>
-                        </td>
-                    </tr>
-                    <tr>
-                        <th>Sinais e Sintomas apresentados</th>
-                    </tr>
-                    <tr>
-                        <td width="100%">                            
-                            <h:selectManyCheckbox value="#{editarCasoBean.sinaisSintomasSelecionados}" >
-                                <f:selectItems value="#{editarCasoBean.listaSinaisSintomas}" />
-                            </h:selectManyCheckbox>
-                        </td>
-                    </tr>
-                </table>
+                <p:panel id="pMontaInvestigacao" widgetVar="pMontaInvestigacao">
+                    <table border="0" width="95%">
+                        <tr>
+                            <th colspan="2">Relato Inicial do Paciente</th>
+                        </tr>
+                        <tr>
+                            <td width="100%" colspan="2">
+                                <p:inputTextarea value="#{editarCasoBean.relato}" rows="4" style="width:891px; height: 40px;"/>
+                            </td>
+                        </tr>
+                        <tr>
+                            <th align="left">Sinais e Sintomas apresentados</th>
+                            <th align="left">Históricos</th>
+                        </tr>
+                        <tr>
+                            <td width="100%">
+                                <p:pickList id="selectSinalSintoma" value="#{editarCasoBean.sinaisSintomas}"
+                                            var="sinalSintoma"
+                                            itemValue="#{sinalSintoma.nome}"
+                                            itemLabel="#{sinalSintoma.nomeAmigavel}"
+                                            onTransfer="document.getElementById('fMontarCaso:atualizarRede').click();"
+                                            />                           
+                            </td>
+                            <td width="100%">
+                                <p:pickList id="selectHistorico" value="#{editarCasoBean.historicos}"
+                                            var="historico"
+                                            itemValue="#{historico.nome}"
+                                            itemLabel="#{historico.nomeAmigavel}"
+                                            onTransfer="document.getElementById('fMontarCaso:atualizarRede').click();"
+                                            />
+                            </td>
+                        </tr>
+                        <tr>
+                        </tr>
+                        <tr>
+                            <th align="left">Exames Físicos</th>
+                            <th align="left">Exames Complementares</th>
+                        </tr>
+                        <tr>
+                            <td width="100%">
+                                <p:pickList id="selectExameFisico" value="#{editarCasoBean.examesFisicos}"
+                                            var="exameFisico"
+                                            itemValue="#{exameFisico.nome}"
+                                            itemLabel="#{exameFisico.nomeAmigavel}"
+                                            onTransfer="document.getElementById('fMontarCaso:atualizarRede').click();"
+                                            />
+                            </td>
+                            <td width="100%">
+                                <p:pickList id="selectExameComplementar" value="#{editarCasoBean.examesComplementares}"
+                                            var="exameComplementar"
+                                            itemValue="#{exameComplementar.nome}"
+                                            itemLabel="#{exameComplementar.nomeAmigavel}"
+                                            onTransfer="document.getElementById('fMontarCaso:atualizarRede').click();"
+                                            />
+                            </td>
+                        </tr>
+                    </table>
+                </p:panel>
+                <br/>
+                
+                <p:panel id="pResultadoRede" widgetVar="pResultadoRede">
+                    <table width="100%">
+                        <tr>
+                            <th align="left"><h:outputText rendered="#{editarCasoBean.diagnosticos.size()>0}" value="Diagnósticos" /></th>
+                            <th align="left"><h:outputText rendered="#{editarCasoBean.diagnosticos.size()>0}" value="Condutas" /></th>
+                        </tr>
+                        <tr>
+                            <td width="50%">
+                                <table>
+                                    <ui:repeat value="#{editarCasoBean.diagnosticos}" var="diagnostico" >
+                                        <tr>
+                                            <td><h:outputText value="#{diagnostico.nodo.nomeAmigavel}"/></td>
+                                            <td><h:outputText value="#{diagnostico.percentualProbabilidade}" />%</td>
+                                        </tr>
+                                    </ui:repeat>                    
+                                </table>
+                            </td>
+                            <td width="50%">
+                                <table>
+                                    <ui:repeat value="#{editarCasoBean.condutas}" var="conduta">
+                                        <tr>
+                                            <td><h:outputText value="#{conduta.nodo.nomeAmigavel}"/></td>
+                                            <td><h:outputText value="#{conduta.percentualProbabilidade}" />%</td>
+                                        </tr>
+                                    </ui:repeat>                    
+                                </table>
+                            </td>
+                        </tr>
+                    </table>
+                </p:panel>
+                <center>
+                    <p:commandButton id="salvarCaso" update="messageGrow" oncomplete="pMontarCaso.hide();" action="#{editarCasoBean.salvarCaso()}" value="Salvar">
+                        <f:param name="pIdPaciente" value="#{editarCasoBean.idPaciente}" />
+                    </p:commandButton>
+                    &nbsp;&nbsp;&nbsp;
+                    <p:commandButton onclick="pMontarCaso.hide();" value="Cancelar" type="button" />
+                </center>
+                
+                <p:commandButton id="atualizarRede" style="visibility: hidden;" update="pResultadoRede, messageGrow" action="#{editarCasoBean.processaRede()}" value="Atualizar" />
             </h:form>            
         </p:dialog>
-        
+
         <p:dialog id="pEditarPaciente" widgetVar="pEditarPaciente" header="Paciente" modal="true" width="500" height="400">
             <h:form id="fEditarPaciente">
+                <h:inputHidden value="#{editarCasoBean.idPaciente}" />
                 <table border="0" width="100%">
                     <tr>
                         <th align="left">Nome:</th>
                     </tr>
                     <tr>
-                        <td><h:inputText value="#{editarCasoBean.nomePaciente}" style="width:100%" /></td>
+                        <td>
+                            <h:inputText value="#{editarCasoBean.nomePaciente}" style="width:100%" required="true" />
+                        </td>
                     </tr>
                     <tr>
                         <th align="left">Idade</th>
                     </tr>
                     <tr>
-                        <td><h:inputText value="#{editarCasoBean.idadePaciente}" style="width:20%" /></td>
+                        <td>
+                            <h:inputText value="#{editarCasoBean.idadePaciente}" style="width:20%" required="true" />
+                        </td>
                     </tr>
                     <tr>
                         <th align="left">Peso</th>
                     </tr>
                     <tr>
-                        <td><h:inputText value="#{editarCasoBean.pesoPaciente}" style="width:20%" /></td>
+                        <td><h:inputText value="#{editarCasoBean.pesoPaciente}" style="width:20%" required="true" /></td>
                     </tr>
                     <tr>
                         <th align="left">Altura</th>
                     </tr>
                     <tr>
-                        <td><h:inputText value="#{editarCasoBean.alturaPaciente}" style="width:20%" /></td>
+                        <td><h:inputText value="#{editarCasoBean.alturaPaciente}" style="width:20%" required="true" /></td>
                     </tr>
                     <tr>
                         <th align="left">Assunto Clínico</th>
                             </h:selectOneMenu>
                         </td>
                     </tr>
+                    <tr>
+                        <th align="left">Modelo</th>
+                    </tr>
+                    <tr>
+                        <td>
+                            <h:selectOneMenu value="#{editarCasoBean.modeloPaciente}" required="true">
+                                <f:selectItem itemValue="homem2030" itemLabel="Homem" />  
+                                <f:selectItem itemValue="mulher4050" itemLabel="Mulher" />  
+                                <f:selectItem itemValue="crianca510" itemLabel="Criança" />  
+                            </h:selectOneMenu>
+                        </td>
+                    </tr>
                 </table>
                 <p:commandButton id="criar" update="pSelecionarPaciente, listaPacientes, messageGrow" oncomplete="pEditarPaciente.hide();" action="#{editarCasoBean.adicionarPaciente()}" value="Criar o novo paciente" />
                 &nbsp;&nbsp;&nbsp;
+                <p:commandButton id="editar" update="pSelecionarPaciente, listaPacientes, messageGrow" oncomplete="pEditarPaciente.hide();" action="#{editarCasoBean.editarPaciente()}" value="Salvar" />
+                &nbsp;&nbsp;&nbsp;
+                <p:commandButton id="excluir" update="pSelecionarPaciente, listaPacientes, messageGrow" oncomplete="pEditarPaciente.hide();" action="#{editarCasoBean.excluirPaciente()}" value="Excluir" />
+                &nbsp;&nbsp;&nbsp;
                 <p:commandButton onclick="pEditarPaciente.hide();" value="Cancelar" type="button" />
                 
             </h:form>
index 8a694cd..ef61ec9 100644 (file)
                 <ul>
                     <ui:repeat id="listaCasos" var="caso" value="#{selecioneCasoBean.listaCasos}">
                         <li>
-                            <p:commandLink update=":fEditarCaso" oncomplete="dialogEditarCaso.show()" actionListener="#{selecioneCasoBean.prepararEditarCasoClinico()}" value="#{caso.nome}" title="Editar Caso Clínico">
+                            <p:commandLink update="fEditarCaso" oncomplete="dialogEditarCaso.show()" actionListener="#{selecioneCasoBean.prepararEditarCasoClinico()}" value="#{caso.nome}" title="Editar Caso Clínico">
                                 <f:param name="pIDCaso" value="#{caso.id}" />
                             </p:commandLink>
                         </li>
                     </ui:repeat>
                     <li>
-                        <p:commandLink oncomplete="dialogEditarCaso.show();" actionListener="#{selecioneCasoBean.preparaNovoCaso()}" update=":fEditarCaso" >
+                        <p:commandLink oncomplete="dialogEditarCaso.show();" actionListener="#{selecioneCasoBean.preparaNovoCaso()}" update="fEditarCaso" >
                             Criar um novo caso clínico
                         </p:commandLink>
                     </li>
                 <table border="0" width="100%">
                     <tr>
                         <th align="left">Nome do Caso</th>
+                        <th align="left">Cenário</th>
                     </tr>
                     <tr>
-                        <td><h:inputText value="#{selecioneCasoBean.nomeCaso}" style="width:100%" /></td>
+                        <td><h:inputText value="#{selecioneCasoBean.nomeCaso}" style="width:98%" /></td>
+                        <td>
+                            <p:selectOneMenu value="#{selecioneCasoBean.modelo}" style="width:100%" >
+                                <f:selectItem itemValue="cenario_casa" itemLabel="Casa" />  
+                                <f:selectItem itemValue="cenario_consultorio" itemLabel="Consultório" />  
+                            </p:selectOneMenu>
+                        </td>
                     </tr>
                     <tr>
-                        <th align="left">Resumo</th>
+                        <th align="left" colspan="2">Resumo</th>
                     </tr>
                     <tr>
-                        <td><h:inputTextarea value="#{selecioneCasoBean.resumo}" rows="5" style="width:100%" /></td>
-                    </tr>
+                        <td colspan="2"><h:inputTextarea value="#{selecioneCasoBean.resumo}" rows="5" style="width:100%" /></td>
+                   </tr>
                     <tr>
-                        <th align="left">Texto Inicial</th>
+                        <th align="left" colspan="2">Texto Inicial</th>
                     </tr>
                     <tr>
-                        <td><h:inputTextarea value="#{selecioneCasoBean.textoInicial}" rows="5" style="width:100%" /></td>
+                        <td colspan="2"><h:inputTextarea value="#{selecioneCasoBean.textoInicial}" rows="5" style="width:100%" /></td>
                     </tr>
                 </table>
                 <center>                 
-                    <p:commandButton id="criar" action="#{selecioneCasoBean.criarNovoCaso()}" value="Criar o novo caso" />
+                    <p:commandButton id="criar" action="#{selecioneCasoBean.criarNovoCaso()}" oncomplete="dialogEditarCaso.hide();" value="Criar o novo caso" />
                     &nbsp;&nbsp;&nbsp;
-                    <p:commandButton id="editar" action="#{selecioneCasoBean.editarCaso()}" value="Editar o Caso" ajax="false" />
+                    <p:commandButton id="editar" action="#{selecioneCasoBean.editarCaso()}" oncomplete="dialogEditarCaso.hide();" value="Editar o Caso" ajax="false" />
                     &nbsp;&nbsp;&nbsp;
                     <p:commandButton onclick="dialogEditarCaso.hide();" value="Cancelar" type="button" />
                     &nbsp;&nbsp;&nbsp;
-                    <p:commandButton id="excluir" update=":fSelecionaCaso:listaCasos" actionListener="#{selecioneCasoBean.excluirCasoClinico()}" value="Excluir" title="Excluir Caso Clínico" ajax="false">  
+                    <p:commandButton id="excluir" update="listaCasos" oncomplete="dialogEditarCaso.hide();" actionListener="#{selecioneCasoBean.excluirCasoClinico()}" value="Excluir" title="Excluir Caso Clínico" ajax="false">  
                         <f:param name="pIDCaso" value="#{selecioneCasoBean.idCaso}" />
                     </p:commandButton>
                 </center>
diff --git a/web/img/patientNew.png b/web/img/patientNew.png
new file mode 100644 (file)
index 0000000..841cf36
Binary files /dev/null and b/web/img/patientNew.png differ
index 14727ef..2a765cf 100644 (file)
@@ -53,4 +53,31 @@ h2 {
 .site-title{
     font-size: 40px;
     color: gray;
-}
\ No newline at end of file
+}
+
+.ui-picklist .ui-picklist-list {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    overflow:auto;
+    height:125px;
+    width:200px;
+}
+
+.ui-picklist .ui-picklist-list li {
+    margin: 1px;
+    padding: 2px;
+}
+
+.ui-picklist .ui-picklist-button {
+    display:block;
+    margin-bottom:0.3em;
+}
+
+.ui-picklist .ui-picklist-button.ui-button-text-icon-primary {
+    width:100%;
+}
+
+.ui-picklist .ui-picklist-item {
+    cursor:pointer;
+}