(no commit message)
[simdecs2.git] / src / java / org / ufcspa / simdecs / comunicacao / MetodoIniciaCaso.java
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;
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;
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     }
45
46     
47     private String getRespostaNodo(Nodo nodo, Paciente paciente) {
48         EntityManager em = DbUtil.getInstance().getEntityManager();
49
50         UnBUtil unBUtil = UnBUtil.getInstance(paciente.getRede());
51         unBUtil.abreRede(paciente.getRede());
52         
53         Iterator<NodoPaciente> it = em.createQuery("From NodoPaciente Where paciente.id=:pIdPaciente")
54                                       .setParameter("pIdPaciente", paciente.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(nodo);
66         nodoBean.getPercentualProbabilidade();
67
68         List <RespostaNodo> respostas = em.createQuery("From RespostaNodo where nodo.id=:pIdNodo")
69                                          .setParameter("pIdNodo", nodo.getId())
70                                          .getResultList();
71         
72         int random = (int) (1+Math.random()*respostas.size());
73         int i=1;
74         
75         for(RespostaNodo resposta : respostas) {
76             if (i++ == random) {
77                 
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())
81                                                           .getResultList();
82                 
83                 int randomInt = (int) (1+Math.random()*listaInt.size());
84                 int x=1;
85                 for(IntervaloTabelaResposta intervalo : listaInt) {
86                     if (x++ == random)
87                         return resposta.getTexto().replaceAll("&&tabela", intervalo.getTexto());
88                 }
89             }
90         }
91                 
92         return "";
93     }
94     
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             
108             if (!em.getTransaction().isActive())
109                 em.getTransaction().begin();
110             
111             // Cria sessao
112             SessaoUsuario sessaoUsuario = new SessaoUsuario();
113             sessaoUsuario.setData(new Date());            
114             sessaoUsuario.setCaso(caso);
115             em.persist(sessaoUsuario);
116             em.flush();
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             
125             
126             em.persist(log);
127                     
128             
129             em.getTransaction().commit();
130             
131             
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                 
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)  + "\" />");
154                 }
155
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())                
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                 
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                 
176                     out.println("                <exame_fisico uid=\"exame-fisico-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />");
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                 
186                     out.println("                <exame_complementar uid=\"exame-complementar-" + nodo.getId() + "\" dependencia=\"" + getDependencia(nodo.getNodo().getId()) + "\" descricao=\"" + nodo.getNodo().getNomeAmigavel() + "\" resultado=\"\" imagem=\"\" som=\"\" video=\"\" />");
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                 
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=\"\" />");
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();
208                     out.println("            <diagnostico uid=\"diagnostico-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />");
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();
219                     out.println("            <conduta uid=\"conduta-" + nodo.getId() + "\" nome=\"" + nodo.getNomeAmigavel() + "\" falaMedico=\"XXXXXXX\" />");
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 }