From: maroni Date: Tue, 14 Feb 2012 18:34:55 +0000 (-0200) Subject: Modificações antes do git X-Git-Url: http://200.18.67.61/gitweb/?a=commitdiff_plain;h=368b48a15f5ab600870f4b4bd4e5a1836a2bf109;p=simdecs2.git Modificações antes do git --- 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 0000000..841cf36 Binary files /dev/null and b/web/img/patientNew.png differ 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; +}