ad3ad9f6 |
1 | /* |
2 | * To change this template, choose Tools | Templates |
3 | * and open the template in the editor. |
4 | */ |
5 | package org.ufcspa.simdecs.comunicacao; |
6 | |
7 | import java.io.IOException; |
8 | import java.io.PrintWriter; |
9 | import java.util.Date; |
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; |
ad3ad9f6 |
17 | import org.ufcspa.simdecs.entities.*; |
18 | import org.ufcspa.simdecs.util.DbUtil; |
c1897a7f |
19 | import org.ufcspa.simdecs.util.NodoBean; |
20 | import org.ufcspa.simdecs.util.UnBUtil; |
21 | import unbbayes.prs.bn.ProbabilisticNode; |
ad3ad9f6 |
22 | |
23 | /** |
24 | * |
25 | * @author maroni |
26 | */ |
27 | public 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 | |
39c9eade |
47 | private String getRespostaNodo(Nodo nodo, Paciente paciente) { |
024c8c40 |
48 | EntityManager em = DbUtil.getInstance().getEntityManager(); |
c1897a7f |
49 | |
39c9eade |
50 | UnBUtil unBUtil = UnBUtil.getInstance(paciente.getRede()); |
51 | unBUtil.abreRede(paciente.getRede()); |
c1897a7f |
52 | |
53 | Iterator<NodoPaciente> it = em.createQuery("From NodoPaciente Where paciente.id=:pIdPaciente") |
39c9eade |
54 | .setParameter("pIdPaciente", paciente.getId()) |
c1897a7f |
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 | |
39c9eade |
65 | NodoBean nodoBean = unBUtil.getNodoBeanByNodo(nodo); |
c1897a7f |
66 | nodoBean.getPercentualProbabilidade(); |
67 | |
be36ba96 |
68 | List <RespostaNodo> respostas = em.createQuery("From RespostaNodo where nodo.id=:pIdNodo") |
39c9eade |
69 | .setParameter("pIdNodo", nodo.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 | |
924227dc |
78 | List<IntervaloTabelaResposta> listaInt = em.createQuery("From IntervaloTabelaResposta Where tabelaResposta.id=:pIdTabela and :pProbabilidade between pesoMinimo and pesoMaximo") |
c1897a7f |
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; |
3c6b9f2e |
85 | for(IntervaloTabelaResposta intervalo : listaInt) { |
c1897a7f |
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 | |
39c9eade |
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) + "\" />"); |
ad3ad9f6 |
154 | } |
39c9eade |
155 | |
156 | // Sinais e sintomas inativos |
af451690 |
157 | List<Nodo> nodosNaoSelecionados = em.createQuery("From Nodo Where rede.id=:pIDRede and id not in (Select nodo.id from NodoPaciente Where paciente.id=:pIDPaciente)") |
39c9eade |
158 | .setParameter("pIDRede", paciente.getRede().getId()) |
159 | .setParameter("pIDPaciente", paciente.getId()) |
160 | .getResultList(); |
161 | for(Nodo nodo : nodosNaoSelecionados) { |
162 | if (!nodo.getTipo().equals(Nodo.SINAL_SINTOMA)) |
163 | continue; |
164 | |
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) + "\" />"); |
166 | } |
167 | |
ad3ad9f6 |
168 | out.println(" </perguntar_sintoma>"); |
169 | |
170 | // Exame Físico |
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)) |
174 | continue; |
175 | |
5aee716d |
176 | out.println(" <exame_fisico uid=\"exame-fisico-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />"); |
ad3ad9f6 |
177 | } |
178 | out.println(" </realiza_exame_fisico>"); |
179 | |
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)) |
184 | continue; |
185 | |
5aee716d |
186 | out.println(" <exame_complementar uid=\"exame-complementar-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />"); |
ad3ad9f6 |
187 | } |
188 | out.println(" </solicitar_exames_complementar>"); |
189 | |
190 | // historico |
191 | for(NodoPaciente nodo : nodos) { |
192 | if (!nodo.getNodo().getTipo().equals(Nodo.HISTORICO)) |
193 | continue; |
194 | |
f6b96b40 |
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=\"\" />"); |
ad3ad9f6 |
196 | } |
197 | |
198 | |
199 | out.println(" </etapa>"); |
200 | |
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) |
204 | .getResultList() |
205 | .iterator(); |
206 | while(itDiagnosticos.hasNext()) { |
207 | Nodo nodo = itDiagnosticos.next(); |
88cced02 |
208 | out.println(" <diagnostico uid=\"diagnostico-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />"); |
ad3ad9f6 |
209 | } |
210 | out.println(" </etapa>"); |
211 | |
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) |
215 | .getResultList() |
216 | .iterator(); |
217 | while(itConduta.hasNext()) { |
218 | Nodo nodo = itConduta.next(); |
88cced02 |
219 | out.println(" <conduta uid=\"conduta-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />"); |
ad3ad9f6 |
220 | } |
221 | out.println(" </etapa>"); |
222 | out.println(" </ator>"); |
223 | } |
224 | |
225 | |
226 | out.println("</caso>"); |
227 | } finally { |
228 | out.close(); |
229 | } |
230 | } |
231 | |
232 | // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> |
233 | /** |
234 | * Handles the HTTP |
235 | * <code>GET</code> method. |
236 | * |
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 |
241 | */ |
242 | @Override |
243 | protected void doGet(HttpServletRequest request, HttpServletResponse response) |
244 | throws ServletException, IOException { |
245 | processRequest(request, response); |
246 | } |
247 | |
248 | /** |
249 | * Handles the HTTP |
250 | * <code>POST</code> method. |
251 | * |
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 |
256 | */ |
257 | @Override |
258 | protected void doPost(HttpServletRequest request, HttpServletResponse response) |
259 | throws ServletException, IOException { |
260 | processRequest(request, response); |
261 | } |
262 | |
263 | /** |
264 | * Returns a short description of the servlet. |
265 | * |
266 | * @return a String containing servlet description |
267 | */ |
268 | @Override |
269 | public String getServletInfo() { |
270 | return "Short description"; |
271 | }// </editor-fold> |
272 | } |