public String executa(HttpServletRequest request, HttpServletResponse response) {

    HttpSession session = request.getSession(true);
    List<Questao> questoes = (List<Questao>) session.getAttribute("subListaDeQuestoes");
    Tipo tipo = (Tipo) session.getAttribute("tipo");
    DateTime hI = (DateTime) session.getAttribute("hI");
    Integer nQ = (Integer) session.getAttribute("oP");
    Perfil p = (Perfil) session.getAttribute("user");
    ProvaService pS = new ProvaService();
    Prova provaSalva = (Prova) session.getAttribute("provaSalva");
    Prova prova = pS.getProvaById(util(provaSalva));
    if (prova == null) {
      int i, resolvidas = 0, brancas = 0, certas = 0, erradas = 0;
      for (i = 0; i < nQ; i++) {
        String itemEscolhido = (String) request.getParameter("iM" + i);
        if (itemEscolhido == null) {
          brancas++;
          if (questoes.get(i).getItem().equals("N")) {
            certas++;
          }
        } else if (itemEscolhido.equals(questoes.get(i).getItem())
            || questoes.get(i).getItem().equals("N")) {
          certas++;
          resolvidas++;
        } else {
          erradas++;
          resolvidas++;
        }
      }
      DateTime dT = new DateTime();
      prova = new Prova();
      prova.setTipo_id(tipo.getId());
      prova.setUsuario_id(p.getUsuario().getId());
      prova.setNumero_questoes(nQ);
      prova.setRespondidas(resolvidas);
      prova.setBrancas(brancas);
      prova.setCertas(certas);
      prova.setErradas(erradas);
      prova.setTempo_prova(Util.calcularTempo(hI.toString(), dT.toString()));
      prova.setData(Util.treatToString(new Date()));
      pS.inserir(prova);
      QuestaoProvaService qpS = new QuestaoProvaService();
      int count = 0, status;
      for (Questao questao : questoes) {
        String iM = (String) request.getParameter("iM" + count);
        if (iM == null) {
          if (questoes.get(count).getItem().equals("N")) {
            status = 3;
          } else {
            status = 0;
          }
        } else if (questoes.get(count).getItem().equals("N")) {
          status = 3;
        } else if (iM.equals(questoes.get(count).getItem())) {
          status = 1;
        } else {
          status = 2;
        }
        QuestaoProva qP = inserir(prova.getId(), questao.getId(), iM, status);
        qpS.inserir(qP);
        count++;
      }
      List<Prova> provas = pS.getListAllProvasByIdUsuario(p.getUsuario().getId());
      session.setAttribute("provas", provas);
      session.setAttribute("provaSalva", prova);
      session.setAttribute("sucesso", "Prova salva com sucesso.");
      return "/alu/visualizar_provas.jsp";
    } else {
      session.setAttribute(
          "erro",
          "Esta prova já foi salva. Para editar e visualizar uma prova acesse o menu Visualizar Provas.");
      return "/alu/listar_questoes.jsp";
    }
  }
 private Long util(Prova p) {
   return p == null ? 0L : p.getId();
 }