From 368b48a15f5ab600870f4b4bd4e5a1836a2bf109 Mon Sep 17 00:00:00 2001 From: maroni Date: Tue, 14 Feb 2012 16:34:55 -0200 Subject: [PATCH] =?utf8?q?Modifica=C3=A7=C3=B5es=20antes=20do=20git?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- nbproject/project.properties | 2 +- src/java/org/ufcspa/simdecs/entities/Caso.java | 13 + src/java/org/ufcspa/simdecs/entities/Paciente.java | 11 + .../org/ufcspa/simdecs/mb/bn/RedeUploadBean.java | 9 +- .../simdecs/mb/editarcasos/EditarCasoBean.java | 469 ++++++++++++++++++-- .../ufcspa/simdecs/mb/editarcasos/LoginBean.java | 32 ++- .../simdecs/mb/editarcasos/SelecioneCasoBean.java | 29 +- src/java/org/ufcspa/simdecs/test/Teste.java | 27 +- src/java/org/ufcspa/simdecs/util/NodoBean.java | 51 +++ src/java/org/ufcspa/simdecs/util/UnBUtil.java | 155 +++++++ web/editarcasos/editarCaso.xhtml | 192 +++++++-- web/editarcasos/selecioneCaso.xhtml | 29 +- web/img/patientNew.png | Bin 0 -> 73497 bytes web/style.css | 29 ++- 15 files changed, 940 insertions(+), 112 deletions(-) create mode 100644 src/java/org/ufcspa/simdecs/util/NodoBean.java create mode 100644 src/java/org/ufcspa/simdecs/util/UnBUtil.java create mode 100644 web/img/patientNew.png diff --git a/.gitignore b/.gitignore index 838458f..315ea15 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/dist/ \ No newline at end of file +/dist/ +/build/ +/nbproject/private/ \ No newline at end of file diff --git a/nbproject/project.properties b/nbproject/project.properties index 00bfdb4..fbd2862 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -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 diff --git a/src/java/org/ufcspa/simdecs/entities/Caso.java b/src/java/org/ufcspa/simdecs/entities/Caso.java index 68d963c..a0e26ab 100644 --- a/src/java/org/ufcspa/simdecs/entities/Caso.java +++ b/src/java/org/ufcspa/simdecs/entities/Caso.java @@ -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 pacientes) { this.pacientes = pacientes; } + + public String getModelo() { + return modelo; + } + + public void setModelo(String modelo) { + this.modelo = modelo; + } + + } diff --git a/src/java/org/ufcspa/simdecs/entities/Paciente.java b/src/java/org/ufcspa/simdecs/entities/Paciente.java index 47cd958..1f40e86 100644 --- a/src/java/org/ufcspa/simdecs/entities/Paciente.java +++ b/src/java/org/ufcspa/simdecs/entities/Paciente.java @@ -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 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; diff --git a/src/java/org/ufcspa/simdecs/mb/bn/RedeUploadBean.java b/src/java/org/ufcspa/simdecs/mb/bn/RedeUploadBean.java index c683379..a96e6ff 100644 --- a/src/java/org/ufcspa/simdecs/mb/bn/RedeUploadBean.java +++ b/src/java/org/ufcspa/simdecs/mb/bn/RedeUploadBean.java @@ -25,10 +25,11 @@ public class RedeUploadBean extends DefaultManagedBean { private Rede[] selectedItems; public List 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() { diff --git a/src/java/org/ufcspa/simdecs/mb/editarcasos/EditarCasoBean.java b/src/java/org/ufcspa/simdecs/mb/editarcasos/EditarCasoBean.java index 959808a..824c7bf 100644 --- a/src/java/org/ufcspa/simdecs/mb/editarcasos/EditarCasoBean.java +++ b/src/java/org/ufcspa/simdecs/mb/editarcasos/EditarCasoBean.java @@ -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 listaRedesPaciente; private List listaPacientes; private String relato; - private Map listaSinaisSintomas; - private List sinaisSintomasSelecionados; + private DualListModel sinaisSintomas; + private DualListModel historicos; + private DualListModel examesFisicos; + private DualListModel examesComplementares; + private String xml; + + + private List diagnosticos; + private List 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(); + historicos = new DualListModel(); + examesFisicos = new DualListModel(); + examesComplementares = new DualListModel(); } /** 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 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("\n"); + + Iterator itPac = em.createQuery("From Paciente where caso.id=:pIdCaso") + .setParameter("pIdCaso", caso.getId()) + .getResultList() + .iterator(); + while(itPac.hasNext()) { + Paciente paciente = itPac.next(); + str.append(" \n"); + + str.append(" \n"); + + // Sinais e sintomas + str.append(" \n"); + List 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(" \n"); + } + str.append(" \n"); + + // Exame Físico + str.append(" \n"); + for(NodoPaciente nodo : nodos) { + if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_FISICO)) + continue; + + str.append(" \n"); + } + str.append(" \n"); + + // Exame Complementar + str.append(" \n"); + for(NodoPaciente nodo : nodos) { + if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_COMPLEMENTAR)) + continue; + + str.append(" \n"); + } + str.append(" \n"); + + // historico + for(NodoPaciente nodo : nodos) { + if (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) + continue; + + str.append(" \n"); + } + + + str.append(" \n"); + + str.append(" \n"); + Iterator itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo") + .setParameter("pTipo", Nodo.DIAGNOSTICO) + .getResultList() + .iterator(); + while(itDiagnosticos.hasNext()) { + Nodo nodo = itDiagnosticos.next(); + str.append(" \n"); + } + str.append(" \n"); + + str.append(" \n"); + Iterator itConduta = em.createQuery("From Nodo where tipo=:pTipo") + .setParameter("pTipo", Nodo.CONDUTA) + .getResultList() + .iterator(); + while(itConduta.hasNext()) { + Nodo nodo = itConduta.next(); + str.append(" \n"); + } + str.append(" \n"); + + + str.append(" \n"); + + } + + + str.append("\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 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 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(); - while(it.hasNext()) { - Nodo nodo = it.next(); - listaSinaisSintomas.put(nodo.getNomeAmigavel(), nodo.getNome()); + + List origemSinaisSintomas = new ArrayList(); + List destinoSinaisSintomas = new ArrayList(); + List origemHistoricos = new ArrayList(); + List destinoHistoricos = new ArrayList(); + List origemExamesFisicos = new ArrayList(); + List destinoExamesFisicos = new ArrayList(); + List origemExamesComplementares = new ArrayList(); + List destinoExamesComplementares = new ArrayList(); + + 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 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(origemSinaisSintomas, destinoSinaisSintomas); + historicos = new DualListModel(origemHistoricos, destinoHistoricos); + examesFisicos = new DualListModel(origemExamesFisicos, destinoExamesFisicos); + examesComplementares = new DualListModel(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 getListaSinaisSintomas() { - return listaSinaisSintomas; - } - - public void setListaSinaisSintomas(Map listaSinaisSintomas) { - this.listaSinaisSintomas = listaSinaisSintomas; - } - - public List getSinaisSintomasSelecionados() { - return sinaisSintomasSelecionados; - } - - public void setSinaisSintomasSelecionados(List sinaisSintomasSelecionados) { - this.sinaisSintomasSelecionados = sinaisSintomasSelecionados; - } - public String getRelato() { return relato; @@ -207,5 +557,68 @@ public class EditarCasoBean extends DefaultManagedBean { this.alturaPaciente = alturaPaciente; } - + public DualListModel getSinaisSintomas() { + return sinaisSintomas; + } + + public void setSinaisSintomas(DualListModel sinaisSintomas) { + this.sinaisSintomas = sinaisSintomas; + } + + public List getDiagnosticos() { + return diagnosticos; + } + + public void setDiagnosticos(List diagnosticos) { + this.diagnosticos = diagnosticos; + } + + public DualListModel getExamesComplementares() { + return examesComplementares; + } + + public void setExamesComplementares(DualListModel examesComplementares) { + this.examesComplementares = examesComplementares; + } + + public DualListModel getExamesFisicos() { + return examesFisicos; + } + + public void setExamesFisicos(DualListModel examesFisicos) { + this.examesFisicos = examesFisicos; + } + + public DualListModel getHistoricos() { + return historicos; + } + + public void setHistoricos(DualListModel historicos) { + this.historicos = historicos; + } + + public List getCondutas() { + return condutas; + } + + public void setCondutas(List 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; + } + } diff --git a/src/java/org/ufcspa/simdecs/mb/editarcasos/LoginBean.java b/src/java/org/ufcspa/simdecs/mb/editarcasos/LoginBean.java index 7600b1c..c8d0893 100644 --- a/src/java/org/ufcspa/simdecs/mb/editarcasos/LoginBean.java +++ b/src/java/org/ufcspa/simdecs/mb/editarcasos/LoginBean.java @@ -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"); diff --git a/src/java/org/ufcspa/simdecs/mb/editarcasos/SelecioneCasoBean.java b/src/java/org/ufcspa/simdecs/mb/editarcasos/SelecioneCasoBean.java index 96df97a..31f3db0 100644 --- a/src/java/org/ufcspa/simdecs/mb/editarcasos/SelecioneCasoBean.java +++ b/src/java/org/ufcspa/simdecs/mb/editarcasos/SelecioneCasoBean.java @@ -26,6 +26,7 @@ public class SelecioneCasoBean extends DefaultManagedBean { private String nomeCaso; private String textoInicial; private String resumo; + private String modelo; private List 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; + } + } diff --git a/src/java/org/ufcspa/simdecs/test/Teste.java b/src/java/org/ufcspa/simdecs/test/Teste.java index 2754040..878dd2b 100644 --- a/src/java/org/ufcspa/simdecs/test/Teste.java +++ b/src/java/org/ufcspa/simdecs/test/Teste.java @@ -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 index 0000000..a95dd68 --- /dev/null +++ b/src/java/org/ufcspa/simdecs/util/NodoBean.java @@ -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 index 0000000..74b1987 --- /dev/null +++ b/src/java/org/ufcspa/simdecs/util/UnBUtil.java @@ -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 getProbabilidadeNodos(String tipo) { + EntityManager em = DbUtil.getInstance().getEntityManager(); + List nodos = new ArrayList(); + + 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 getProbabilidadeDiagnosticos() { + return getProbabilidadeNodos(Nodo.DIAGNOSTICO); + } + + public List 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(""); + } + } +} diff --git a/web/editarcasos/editarCaso.xhtml b/web/editarcasos/editarCaso.xhtml index 0542a4a..07063b1 100644 --- a/web/editarcasos/editarCaso.xhtml +++ b/web/editarcasos/editarCaso.xhtml @@ -1,11 +1,10 @@ + xmlns:ui="http://java.sun.com/jsf/facelets"> SimDeCS - Selecione o Caso @@ -16,14 +15,15 @@ + + Bem vindo ao caso clínico ""!

Selecione abaixo um dos pacientes ou clique em "Adicionar novo paciente" para montagem do caso clínico. -

- +
- - - +
+ + - -
@@ -33,65 +33,167 @@ +
+ + +
-
+ + + + + +
+ + + + +

+ +
+ +     + +

- + - - - - - - - - - - - - - -
Relato Inicial do Paciente
- -
Sinais e Sintomas apresentados
- - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Relato Inicial do Paciente
+ +
Sinais e Sintomas apresentadosHistóricos
+ + + +
Exames FísicosExames Complementares
+ + + +
+
+
+ + + + + + + + + + + +
+ + + + + + + +
%
+
+ + + + + + + +
%
+
+
+
+ + + +     + +
+ +
- + + - + - + - + - + @@ -114,9 +216,25 @@ + + + + + +
Nome:
+ +
Idade
+ +
Peso
Altura
Assunto Clínico
Modelo
+ + + + + +
    + +     + +    
diff --git a/web/editarcasos/selecioneCaso.xhtml b/web/editarcasos/selecioneCaso.xhtml index 8a694cd..ef61ec9 100644 --- a/web/editarcasos/selecioneCaso.xhtml +++ b/web/editarcasos/selecioneCaso.xhtml @@ -24,13 +24,13 @@
  • - +
  • - + Criar um novo caso clínico
  • @@ -46,31 +46,38 @@ + - + + - + - - + + - + - +
    Nome do CasoCenário
    + + + + +
    ResumoResumo
    Texto InicialTexto Inicial
    - +     - +         - +
    diff --git a/web/img/patientNew.png b/web/img/patientNew.png new file mode 100644 index 0000000000000000000000000000000000000000..841cf3653098ebc31a8c2db903ee87d2226564cb GIT binary patch literal 73497 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�>B~Quw}jg3KFCVPet+pm-g$B zQT5zTfG#`Bd_-aITLmR|9guVtHM$wGp-KpEC!0Ay6~J7<)xCDguI#d@>~BGxn{`8+ zH@LVuqiYMGfcT$x23h~Hml)0!v2i~?T|t<^iZs8U%+1X$1KTn)wK$O0DmA97Kbb!e zmmI1@Z;^93Z*{tK8$sat^n38mr@KHTFv7}`i$iw@m!qL@=e*bt!Me?{O+nUy_Iql= zLm5rp*mG?Nqc^+R<#=d3@;Du!(b`QMPWT29lj`)~`)ihMKAipbmb&AT0Nj)!E5C=G z9Gnrr0f^{o%7j1*hQqt?hiODdHLxU$*@%9+&k^4jdr0>_U!x-ZQkMc=>@f0LF`_wm ze_aIf8||;>sHjhIy%o5VnyHSk)`I(pw4gv00Y3@OKkUP{Vfz!NAf%PH`_XsvDpCj0 z0$KuB#JX{@U~uKA!r$%~8C@&lP}n%$t>i7@lZTqPp>^wT8ZeOvO0=5_E+ia8CPwNZPqqfB{x z+jw<0r9E=`k*#G>r+vdFNPWPDrp6zig@LP8^2NzU|3jeU;2~- zWF#c`5bViE&}Q*ovuy-#2=EcsWcK%<3||bV0t6lV7kB72c+xu|+mk??;L|H!2fG^q z(@WFqL%mXO@NMxl+6x05*{7q0uvzTod?p*6`r{?3KlSy&%s$ XFb)5l9i(@8afr5tfqIRqef0kTkI@qq literal 0 HcmV?d00001 diff --git a/web/style.css b/web/style.css index 14727ef..2a765cf 100644 --- a/web/style.css +++ b/web/style.css @@ -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; +} -- 1.7.6.4