2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
5 package org.ufcspa.simdecs.comunicacao;
7 import java.io.IOException;
8 import java.io.PrintWriter;
10 import java.util.Iterator;
11 import java.util.List;
12 import javax.persistence.EntityManager;
13 import javax.servlet.ServletException;
14 import javax.servlet.http.HttpServlet;
15 import javax.servlet.http.HttpServletRequest;
16 import javax.servlet.http.HttpServletResponse;
17 import org.ufcspa.simdecs.entities.*;
18 import org.ufcspa.simdecs.util.DbUtil;
19 import org.ufcspa.simdecs.util.NodoBean;
20 import org.ufcspa.simdecs.util.UnBUtil;
21 import unbbayes.prs.bn.ProbabilisticNode;
27 public class MetodoIniciaCaso extends HttpServlet {
29 private String getPerguntaNodo(Long idNodo) {
30 EntityManager em = DbUtil.getInstance().getEntityManager();
31 List <PerguntaNodo> perguntas = em.createQuery("From PerguntaNodo where nodo.id=:pIdNodo")
32 .setParameter("pIdNodo", idNodo)
35 int random = (int) (1+Math.random()*perguntas.size());
38 for(PerguntaNodo pergunta : perguntas) {
40 return pergunta.getTexto();
47 private String getRespostaNodo(Nodo nodo, Paciente paciente) {
48 EntityManager em = DbUtil.getInstance().getEntityManager();
50 UnBUtil unBUtil = UnBUtil.getInstance(paciente.getRede());
51 unBUtil.abreRede(paciente.getRede());
53 Iterator<NodoPaciente> it = em.createQuery("From NodoPaciente Where paciente.id=:pIdPaciente")
54 .setParameter("pIdPaciente", paciente.getId())
59 NodoPaciente nodoPac = it.next();
61 ProbabilisticNode pn = unBUtil.getNodeByName(nodoPac.getNodo().getNome());
62 unBUtil.ativarNodo(pn);
65 NodoBean nodoBean = unBUtil.getNodoBeanByNodo(nodo);
66 nodoBean.getPercentualProbabilidade();
68 List <RespostaNodo> respostas = em.createQuery("From RespostaNodo where nodo.id=:pIdNodo")
69 .setParameter("pIdNodo", nodo.getId())
72 int random = (int) (1+Math.random()*respostas.size());
75 for(RespostaNodo resposta : respostas) {
78 List<IntervaloTabelaResposta> listaInt = em.createQuery("From IntervaloTabelaResposta Where tabelaResposta.id=:pIdTabela and :pProbabilidade between pesoMinimo and pesoMaximo")
79 .setParameter("pIdTabela", resposta.getTabelaResposta().getId())
80 .setParameter("pProbabilidade", nodoBean.getPercentualProbabilidade())
83 int randomInt = (int) (1+Math.random()*listaInt.size());
85 for(IntervaloTabelaResposta intervalo : listaInt) {
87 return resposta.getTexto().replaceAll("&&tabela", intervalo.getTexto());
95 private String getDependencia(Long idNodo) {
99 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
100 throws ServletException, IOException {
101 response.setContentType("text/html;charset=UTF-8");
102 PrintWriter out = response.getWriter();
104 EntityManager em = DbUtil.getInstance().getEntityManager();
105 Caso caso = em.find(Caso.class, Long.parseLong(request.getParameter("idcaso")));
108 if (!em.getTransaction().isActive())
109 em.getTransaction().begin();
112 SessaoUsuario sessaoUsuario = new SessaoUsuario();
113 sessaoUsuario.setData(new Date());
114 sessaoUsuario.setCaso(caso);
115 em.persist(sessaoUsuario);
118 // Logo inicio do caso
120 log.setTipo(em.find(TipoEventoLog.class, TipoEventoLog.INICIO_CASO));
122 log.setData(new Date());
123 log.setSessaoUsuario(sessaoUsuario);
129 em.getTransaction().commit();
132 out.println("<caso uid=\"caso-" + caso.getId() + "\" sessao=\"" + sessaoUsuario.getId() + "\" titulo=\"" + caso.getNome() + "\" modelo=\"" + caso.getModelo() + "\" descricaoAmbiente=\"" + caso.getTextoInicial() + "\">");
134 Iterator<Paciente> itPac = em.createQuery("From Paciente where caso.id=:pIdCaso")
135 .setParameter("pIdCaso", caso.getId())
138 while(itPac.hasNext()) {
139 Paciente paciente = itPac.next();
140 out.println(" <ator uid=\"paciente-" + paciente.getId() + "\" tipo=\"paciente\" nome=\"" + paciente.getNome() + "\" modelo=\"" + paciente.getModelo() + "\" idade=\"" + paciente.getIdade() + "\" peso=\"" + paciente.getPeso() + "\" altura=\"" + paciente.getAltura() + "\" >");
142 out.println(" <etapa uid=\"etapa-1\" nome=\"Investigação\" sequencia=\"1\" tipo=\"investigacao\">");
145 out.println(" <perguntar_sintoma uid=\"perguntar-sintoma-" + paciente.getId() + "\" descricao=\"Perguntar Sinais/Sintomas\">");
146 List<NodoPaciente> nodos = em.createQuery("From NodoPaciente Where paciente.id=:pIDPaciente")
147 .setParameter("pIDPaciente", paciente.getId())
149 for(NodoPaciente nodo : nodos) {
150 if (!nodo.getNodo().getTipo().equals(Nodo.SINAL_SINTOMA))
153 out.println(" <sintoma uid=\"sintoma-" + nodo.getId() + "\" nomeCientifico=\"" + nodo.getNodo().getNome() + "\" nomePopular=\"" + getPerguntaNodo(nodo.getNodo().getId()) + "\" imagem=\"\" som=\"\" video=\"\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" falaPaciente=\"" + getRespostaNodo(nodo.getNodo(), paciente) + "\" />");
156 // Sinais e sintomas inativos
157 List<Nodo> nodosNaoSelecionados = em.createQuery("From Nodo Where nodo.rede.id=:pIDRede and nodo.id not in (Select nodo.id from NodoPaciente Where paciente.id=:pIDPaciente)")
158 .setParameter("pIDRede", paciente.getRede().getId())
159 .setParameter("pIDPaciente", paciente.getId())
161 for(Nodo nodo : nodosNaoSelecionados) {
162 if (!nodo.getTipo().equals(Nodo.SINAL_SINTOMA))
165 out.println(" <sintoma uid=\"sintoma-" + nodo.getId() + "\" nomeCientifico=\"" + nodo.getNome() + "\" nomePopular=\"" + getPerguntaNodo(nodo.getId()) + "\" imagem=\"\" som=\"\" video=\"\" dependencia=\"" + getDependencia(nodo.getId()) + "\" falaPaciente=\"" + getRespostaNodo(nodo, paciente) + "\" />");
168 out.println(" </perguntar_sintoma>");
171 out.println(" <realiza_exame_fisico uid=\"realiza-exame-fisico-" + paciente.getId() + "\" descricao=\"Realizar Exame Físico\">");
172 for(NodoPaciente nodo : nodos) {
173 if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_FISICO))
176 out.println(" <exame_fisico uid=\"exame-fisico-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />");
178 out.println(" </realiza_exame_fisico>");
180 // Exame Complementar
181 out.println(" <solicitar_exames_complementar uid=\"solicitar-exame-complementar-" + paciente.getId() + "\" descricao=\"Solicitar Exame Complementar\">\"");
182 for(NodoPaciente nodo : nodos) {
183 if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_COMPLEMENTAR))
186 out.println(" <exame_complementar uid=\"exame-complementar-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />");
188 out.println(" </solicitar_exames_complementar>");
191 for(NodoPaciente nodo : nodos) {
192 if (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO))
195 out.println(" <historico_medico uid=\"historico-medico-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"Histórico Médico\" historico=\"" + nodo.getNodo().getNomeAmigavel() + "\" imagem=\"\" som=\"\" video=\"\" />");
199 out.println(" </etapa>");
201 out.println(" <etapa uid=\"etapa-2\" nome=\"Diagnóstico\" sequencia=\"2\" tipo=\"diagnostico\">");
202 Iterator<Nodo> itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo")
203 .setParameter("pTipo", Nodo.DIAGNOSTICO)
206 while(itDiagnosticos.hasNext()) {
207 Nodo nodo = itDiagnosticos.next();
208 out.println(" <diagnostico uid=\"diagnostico-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />");
210 out.println(" </etapa>");
212 out.println(" <etapa uid=\"etapa-3\" nome=\"Conduta\" sequencia=\"3\" tipo=\"conduta\">");
213 Iterator<Nodo> itConduta = em.createQuery("From Nodo where tipo=:pTipo")
214 .setParameter("pTipo", Nodo.CONDUTA)
217 while(itConduta.hasNext()) {
218 Nodo nodo = itConduta.next();
219 out.println(" <conduta uid=\"conduta-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />");
221 out.println(" </etapa>");
222 out.println(" </ator>");
226 out.println("</caso>");
232 // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
235 * <code>GET</code> method.
237 * @param request servlet request
238 * @param response servlet response
239 * @throws ServletException if a servlet-specific error occurs
240 * @throws IOException if an I/O error occurs
243 protected void doGet(HttpServletRequest request, HttpServletResponse response)
244 throws ServletException, IOException {
245 processRequest(request, response);
250 * <code>POST</code> method.
252 * @param request servlet request
253 * @param response servlet response
254 * @throws ServletException if a servlet-specific error occurs
255 * @throws IOException if an I/O error occurs
258 protected void doPost(HttpServletRequest request, HttpServletResponse response)
259 throws ServletException, IOException {
260 processRequest(request, response);
264 * Returns a short description of the servlet.
266 * @return a String containing servlet description
269 public String getServletInfo() {
270 return "Short description";