Nova versao do simulador e tratamento de erros das chamadas.
[simdecs2.git] / src / java / org / ufcspa / simdecs / mb / editarcasos / EditarCasoBean.java
index bc6f06a..ecb8819 100644 (file)
@@ -4,11 +4,8 @@
  */
 package org.ufcspa.simdecs.mb.editarcasos;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import org.ufcspa.simdecs.util.NodoBean;
+import java.util.*;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.RequestScoped;
 import org.primefaces.component.commandbutton.CommandButton;
@@ -20,9 +17,11 @@ 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 org.ufcspa.simdecs.util.ProbabilisticBean;
+import org.ufcspa.simdecs.util.UnBBayesUtil;
+import unbbayes.prs.Node;
 import unbbayes.prs.bn.ProbabilisticNode;
+import unbbayes.prs.bn.TreeVariable;
 
 /**
  *
@@ -198,78 +197,135 @@ public class EditarCasoBean extends DefaultManagedBean {
         addInfoMessage("Salvo com Sucesso!", "Caso clínico salvo com sucesso!");
     }
     
-    public void processaRede() {
+    public void processaRede() throws Exception {
         idPaciente = Long.valueOf(getTextParameter("pIdPaciente"));
         Paciente paciente = em.find(Paciente.class, idPaciente);
         
-        UnBUtil unBUtil = UnBUtil.getInstance(paciente.getRede());
-        unBUtil.abreRede(paciente.getRede());
+        UnBBayesUtil unBUtil = new UnBBayesUtil(paciente.getRede());
 
         // Sinais e Sintomas
         Iterator it = sinaisSintomas.getSource().iterator();
         while(it.hasNext()) {            
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.desativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 0, "Not", 1);
         }
         
 
         it = sinaisSintomas.getTarget().iterator();
         while(it.hasNext()) {
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.ativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 1, "Not", 0);
         }
         
         // Historicos
         it = historicos.getSource().iterator();
         while(it.hasNext()) {
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.desativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 0, "Not", 1);
         }
 
         it = historicos.getTarget().iterator();
         while(it.hasNext()) {
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.ativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 1, "Not", 0);
         }
 
         // Exames Físicos
         it = examesFisicos.getSource().iterator();
         while(it.hasNext()) {
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.desativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 0, "Not", 1);
         }
 
         it = examesFisicos.getTarget().iterator();
         while(it.hasNext()) {
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.ativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 1, "Not", 0);
         }
         
         // Exames Complementares
         it = examesComplementares.getSource().iterator();
         while(it.hasNext()) {
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.desativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 0, "Not", 1);
         }
 
         it = examesComplementares.getTarget().iterator();
         while(it.hasNext()) {
-            ProbabilisticNode pn = unBUtil.getNodeByName((String) it.next());
+            ProbabilisticNode pn = (ProbabilisticNode) unBUtil.getNodeByName((String) it.next());
             if (pn != null)
-                unBUtil.ativarNodo(pn);
+                unBUtil.setNodeState(pn, "Yes", 1, "Not", 0);
         }
 
-        diagnosticos = unBUtil.getProbabilidadeDiagnosticos();
-        condutas     = unBUtil.getProbabilidadeCondutas();
+        populaProbabilidadeDiagnosticos(unBUtil);
+        populaProbabilidadeCondutas(unBUtil);        
+    }
+    
+    
+    private void populaProbabilidadeCondutas(UnBBayesUtil unBUtil) {
+        Iterator<Nodo> itConds = em.createNamedQuery("Nodo.getByTipo")
+                                   .setParameter("pTipo", Nodo.CONDUTA)
+                                   .getResultList().iterator();
+        
+        condutas = new ArrayList<NodoBean>();
+
+        while(itConds.hasNext()) {
+            Nodo nodo = itConds.next();
+            NodoBean nodoBean = new NodoBean(nodo, (Float) unBUtil.getProbabilidadeByState((TreeVariable) unBUtil.getNodeByName(nodo.getNome()), "Yes"));
+            condutas.add(nodoBean);
+        }
+        
+        Collections.sort(condutas, 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;
+            }
+        });        
     }
     
+    private void populaProbabilidadeDiagnosticos(UnBBayesUtil unBUtil) {
+        Iterator<Nodo> itDiags = em.createNamedQuery("Nodo.getByTipo")
+                                   .setParameter("pTipo", Nodo.DIAGNOSTICO)
+                                   .getResultList().iterator();
+        
+        diagnosticos = new ArrayList<NodoBean>();
+        
+        while(itDiags.hasNext()) {
+            Nodo nodo = itDiags.next();
+            NodoBean nodoBean = new NodoBean(nodo, (Float) unBUtil.getProbabilidadeByState((TreeVariable) unBUtil.getNodeByName(nodo.getNome()), "Yes"));
+            diagnosticos.add(nodoBean);
+        }
+        
+        Collections.sort(diagnosticos, 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;
+            }
+        });                        
+    }
     
     private String getPerguntaNodo(Long idNodo) {
         List <PerguntaNodo> perguntas = em.createQuery("From PerguntaNodo where nodo.id=:pIdNodo")
@@ -348,7 +404,7 @@ public class EditarCasoBean extends DefaultManagedBean {
         populate();
     }
 
-    public void selecionaPaciente() {
+    public void selecionaPaciente() throws Exception {
         Paciente paciente = em.find(Paciente.class, Long.valueOf(getTextParameter("pIdPaciente")));
         
         idPaciente = paciente.getId();
@@ -406,10 +462,10 @@ public class EditarCasoBean extends DefaultManagedBean {
         examesFisicos = new DualListModel<Nodo>(origemExamesFisicos, destinoExamesFisicos);
         examesComplementares = new DualListModel<Nodo>(origemExamesComplementares, destinoExamesComplementares);
     
-        UnBUtil unBUtil = UnBUtil.getInstance(paciente.getRede());
+       // UnBBayesUtil unBUtil = new UnBBayesUtil(paciente.getRede());
 
-        diagnosticos = unBUtil.getProbabilidadeDiagnosticos();
-        condutas     = unBUtil.getProbabilidadeCondutas();
+       // populaProbabilidadeDiagnosticos(unBUtil);
+       // populaProbabilidadeCondutas(unBUtil);
     }
     
     public Caso getCaso() {