(no commit message)
[simdecs2.git] / src / java / org / ufcspa / simdecs / comunicacao / MetodoIniciaCaso.java
CommitLineData
ad3ad9f6 1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package org.ufcspa.simdecs.comunicacao;
6
7import java.io.IOException;
8import java.io.PrintWriter;
9import java.util.Date;
10import java.util.Iterator;
11import java.util.List;
12import javax.persistence.EntityManager;
13import javax.servlet.ServletException;
14import javax.servlet.http.HttpServlet;
15import javax.servlet.http.HttpServletRequest;
16import javax.servlet.http.HttpServletResponse;
ad3ad9f6 17import org.ufcspa.simdecs.entities.*;
18import org.ufcspa.simdecs.util.DbUtil;
c1897a7f 19import org.ufcspa.simdecs.util.NodoBean;
20import org.ufcspa.simdecs.util.UnBUtil;
21import unbbayes.prs.bn.ProbabilisticNode;
ad3ad9f6 22
23/**
24 *
25 * @author maroni
26 */
27public class MetodoIniciaCaso extends HttpServlet {
28
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)
33 .getResultList();
34
35 int random = (int) (1+Math.random()*perguntas.size());
36 int i=1;
37
38 for(PerguntaNodo pergunta : perguntas) {
39 if (i++ == random)
40 return pergunta.getTexto();
41 }
42
43 return "";
44 }
c1897a7f 45
ad3ad9f6 46
c1897a7f 47 private String getRespostaNodo(NodoPaciente nodoPaciente) {
024c8c40 48 EntityManager em = DbUtil.getInstance().getEntityManager();
c1897a7f 49
50 UnBUtil unBUtil = UnBUtil.getInstance(nodoPaciente.getPaciente().getRede());
51 unBUtil.abreRede(nodoPaciente.getPaciente().getRede());
52
53 Iterator<NodoPaciente> it = em.createQuery("From NodoPaciente Where paciente.id=:pIdPaciente")
54 .setParameter("pIdPaciente", nodoPaciente.getPaciente().getId())
55 .getResultList()
56 .iterator();
57
58 while(it.hasNext()) {
59 NodoPaciente nodoPac = it.next();
60
61 ProbabilisticNode pn = unBUtil.getNodeByName(nodoPac.getNodo().getNome());
62 unBUtil.ativarNodo(pn);
63 }
64
65 NodoBean nodoBean = unBUtil.getNodoBeanByNodo(nodoPaciente.getNodo());
66 nodoBean.getPercentualProbabilidade();
67
be36ba96 68 List <RespostaNodo> respostas = em.createQuery("From RespostaNodo where nodo.id=:pIdNodo")
c1897a7f 69 .setParameter("pIdNodo", nodoPaciente.getNodo().getId())
024c8c40 70 .getResultList();
71
be36ba96 72 int random = (int) (1+Math.random()*respostas.size());
024c8c40 73 int i=1;
74
be36ba96 75 for(RespostaNodo resposta : respostas) {
c1897a7f 76 if (i++ == random) {
77
78 List<IntervaloTabelaRespota> listaInt = em.createQuery("From IntervaloTabelaResposta Where tabelaResposta.id=:pIdTabela and :pProbabilidade between pesoInicial and pesoFinal")
79 .setParameter("pIdTabela", resposta.getTabelaResposta().getId())
80 .setParameter("pProbabilidade", nodoBean.getPercentualProbabilidade())
81 .getResultList();
82
83 int randomInt = (int) (1+Math.random()*listaInt.size());
84 int x=1;
85 for(IntervaloTabelaRespota intervalo : listaInt) {
86 if (x++ == random)
87 return resposta.getTexto().replaceAll("&&tabela", intervalo.getTexto());
88 }
89 }
024c8c40 90 }
91
92 return "";
93 }
94
ad3ad9f6 95 private String getDependencia(Long idNodo) {
96 return "";
97 }
98
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();
103 try {
104 EntityManager em = DbUtil.getInstance().getEntityManager();
105 Caso caso = em.find(Caso.class, Long.parseLong(request.getParameter("idcaso")));
106
107
db8434b4 108 if (!em.getTransaction().isActive())
109 em.getTransaction().begin();
ad3ad9f6 110
111 // Cria sessao
112 SessaoUsuario sessaoUsuario = new SessaoUsuario();
113 sessaoUsuario.setData(new Date());
f42bcffd 114 sessaoUsuario.setCaso(caso);
ad3ad9f6 115 em.persist(sessaoUsuario);
53addb40 116 em.flush();
ad3ad9f6 117
118 // Logo inicio do caso
119 Log log = new Log();
120 log.setTipo(em.find(TipoEventoLog.class, TipoEventoLog.INICIO_CASO));
121 log.setCaso(caso);
122 log.setData(new Date());
123 log.setSessaoUsuario(sessaoUsuario);
124
5d99cbc8 125
ad3ad9f6 126 em.persist(log);
127
128
129 em.getTransaction().commit();
130
aa37231e 131
ad3ad9f6 132 out.println("<caso uid=\"caso-" + caso.getId() + "\" sessao=\"" + sessaoUsuario.getId() + "\" titulo=\"" + caso.getNome() + "\" modelo=\"" + caso.getModelo() + "\" descricaoAmbiente=\"" + caso.getTextoInicial() + "\">");
133
134 Iterator<Paciente> itPac = em.createQuery("From Paciente where caso.id=:pIdCaso")
135 .setParameter("pIdCaso", caso.getId())
136 .getResultList()
137 .iterator();
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() + "\" >");
141
142 out.println(" <etapa uid=\"etapa-1\" nome=\"Investigação\" sequencia=\"1\" tipo=\"investigacao\">");
143
144 // Sinais e sintomas
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())
148 .getResultList();
149 for(NodoPaciente nodo : nodos) {
150 if (!nodo.getNodo().getTipo().equals(Nodo.SINAL_SINTOMA))
151 continue;
152
c1897a7f 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) + "\" />");
ad3ad9f6 154 }
155 out.println(" </perguntar_sintoma>");
156
157 // Exame Físico
158 out.println(" <realiza_exame_fisico uid=\"realiza-exame-fisico-" + paciente.getId() + "\" descricao=\"Realizar Exame Físico\">");
159 for(NodoPaciente nodo : nodos) {
160 if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_FISICO))
161 continue;
162
5aee716d 163 out.println(" <exame_fisico uid=\"exame-fisico-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />");
ad3ad9f6 164 }
165 out.println(" </realiza_exame_fisico>");
166
167 // Exame Complementar
168 out.println(" <solicitar_exames_complementar uid=\"solicitar-exame-complementar-" + paciente.getId() + "\" descricao=\"Solicitar Exame Complementar\">\"");
169 for(NodoPaciente nodo : nodos) {
170 if (!nodo.getNodo().getTipo().equals(Nodo.EXAME_COMPLEMENTAR))
171 continue;
172
5aee716d 173 out.println(" <exame_complementar uid=\"exame-complementar-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />");
ad3ad9f6 174 }
175 out.println(" </solicitar_exames_complementar>");
176
177 // historico
178 for(NodoPaciente nodo : nodos) {
179 if (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO))
180 continue;
181
f6b96b40 182 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=\"\" />");
ad3ad9f6 183 }
184
185
186 out.println(" </etapa>");
187
188 out.println(" <etapa uid=\"etapa-2\" nome=\"Diagnóstico\" sequencia=\"2\" tipo=\"diagnostico\">");
189 Iterator<Nodo> itDiagnosticos = em.createQuery("From Nodo where tipo=:pTipo")
190 .setParameter("pTipo", Nodo.DIAGNOSTICO)
191 .getResultList()
192 .iterator();
193 while(itDiagnosticos.hasNext()) {
194 Nodo nodo = itDiagnosticos.next();
88cced02 195 out.println(" <diagnostico uid=\"diagnostico-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />");
ad3ad9f6 196 }
197 out.println(" </etapa>");
198
199 out.println(" <etapa uid=\"etapa-3\" nome=\"Conduta\" sequencia=\"3\" tipo=\"conduta\">");
200 Iterator<Nodo> itConduta = em.createQuery("From Nodo where tipo=:pTipo")
201 .setParameter("pTipo", Nodo.CONDUTA)
202 .getResultList()
203 .iterator();
204 while(itConduta.hasNext()) {
205 Nodo nodo = itConduta.next();
88cced02 206 out.println(" <conduta uid=\"conduta-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />");
ad3ad9f6 207 }
208 out.println(" </etapa>");
209 out.println(" </ator>");
210 }
211
212
213 out.println("</caso>");
214 } finally {
215 out.close();
216 }
217 }
218
219 // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
220 /**
221 * Handles the HTTP
222 * <code>GET</code> method.
223 *
224 * @param request servlet request
225 * @param response servlet response
226 * @throws ServletException if a servlet-specific error occurs
227 * @throws IOException if an I/O error occurs
228 */
229 @Override
230 protected void doGet(HttpServletRequest request, HttpServletResponse response)
231 throws ServletException, IOException {
232 processRequest(request, response);
233 }
234
235 /**
236 * Handles the HTTP
237 * <code>POST</code> method.
238 *
239 * @param request servlet request
240 * @param response servlet response
241 * @throws ServletException if a servlet-specific error occurs
242 * @throws IOException if an I/O error occurs
243 */
244 @Override
245 protected void doPost(HttpServletRequest request, HttpServletResponse response)
246 throws ServletException, IOException {
247 processRequest(request, response);
248 }
249
250 /**
251 * Returns a short description of the servlet.
252 *
253 * @return a String containing servlet description
254 */
255 @Override
256 public String getServletInfo() {
257 return "Short description";
258 }// </editor-fold>
259}