public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    // Recupera o Funcionário logado
    Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO);

    FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(getDaoFactory());

    Funcionario funcionario = (Funcionario) funcionarioCtrl.get(funcionarioId);

    ActionMessages msg = new ActionMessages();

    String txtBusca = request.getParameter("txtBusca");

    AjudaCtrl ajudaCtrl = new AjudaCtrl(getDaoFactory());

    List lstAjuda = ajudaCtrl.consultaTextoAjuda(funcionario, txtBusca);

    // Se não encontrou resultado, coloca mensagem
    if (lstAjuda.isEmpty()) {
      msg.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.ajuda.consulta"));
      saveMessages(request, msg);
    }

    request.setAttribute("lstAjuda", lstAjuda);

    return mapping.findForward("success");
  }
  /**
   * Método de execução da ação. Realiza dois forwards: um em caso de sucesso e outro em caso de
   * falha
   *
   * @param mapping
   * @param form ActionForm, caso necessário
   * @param request
   * @param response
   */
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    ActionMessages msgs = new ActionMessages();

    Orgao orgao = this.getOrgao(request);

    Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO);

    FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(getDaoFactory());

    Funcionario funcionario = (Funcionario) funcionarioCtrl.get(funcionarioId);

    ListarAcionamentoRespostaCtrl controle = new ListarAcionamentoRespostaCtrl(getDaoFactory());

    String numeroProtocolo = ((DynaActionForm) form).getString("numeroProtocolo");

    String enviados = ((DynaActionForm) form).getString("enviado");

    String naoEnviados = ((DynaActionForm) form).getString("naoEnviado");

    String meioEnvioResposta = ((DynaActionForm) form).getString("meioEnvioResposta");

    Collection acionamentos = null;

    if (numeroProtocolo != null && numeroProtocolo.trim().length() > 0) {

      try {

        Acionamento acnmnt =
            controle.getAcionamentoPeloProtocolo(orgao, funcionario, numeroProtocolo);

        if (acnmnt != null) {
          acionamentos = new ArrayList();
          acionamentos.add(acnmnt);
        }

      } catch (Exception a) {
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage("error.listarAcionamentoResposta.protocolo.invalido"));
      }

    } else {

      String situacao = null;

      if ((enviados == null || enviados.trim().length() == 0) && naoEnviados != null) {
        situacao = EstadoAcionamento.RESPONDIDO.getId().toString();
      } else if (enviados != null && (naoEnviados == null || naoEnviados.trim().length() == 0)) {
        situacao = EstadoAcionamento.ENVIADO.getId().toString();
      }

      acionamentos = controle.listarAcionamentos(orgao, funcionario, meioEnvioResposta, situacao);
    }

    request.setAttribute("numeroProtocolo", numeroProtocolo);
    request.setAttribute("meioEnvioResposta", meioEnvioResposta);
    request.setAttribute("enviado", enviados);
    request.setAttribute("naoEnviado", naoEnviados);

    request.setAttribute("listarAcionamentos", acionamentos);

    if (msgs.isEmpty()) {
      return (mapping.findForward("success"));
    }

    saveErrors(request, msgs);
    return (mapping.findForward("error"));
  }
  public ActionForward execute(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    ExibirMensagemGenericaCtrl exibirMensagemGenericaCtrl =
        new ExibirMensagemGenericaCtrl(getDaoFactory());

    ActionErrors errors = new ActionErrors();
    String texto = "";

    if (request.getParameter("tela").compareToIgnoreCase("CanaisComunicacao") == 0) {
      texto = this.getOrgao(request).getConfiguracoes().getTextoCanaisComunicacaoFormatado();
    }

    if (request.getParameter("tela").compareToIgnoreCase("Legislacao") == 0) {
      texto = this.getOrgao(request).getConfiguracoes().getTextoLegislacaoOuvidoriaFormatado();
    }

    if (request.getParameter("tela").compareToIgnoreCase("ResultadosOuvidoria") == 0) {
      texto = this.getOrgao(request).getConfiguracoes().getTextoInformacaoOuvidoriaFormatado();
    }

    if (request.getParameter("tela").compareToIgnoreCase("TiposMensagem") == 0) {
      List lista = this.getOrgao(request).listarTipoMensagemAtivos();
      TipoMensagem tipoMensagem;
      Iterator iter = lista.iterator();
      int i = 2;
      while (iter.hasNext()) {
        tipoMensagem = (TipoMensagem) iter.next();
        texto += "<h2 tabindex=" + i + ">&nbsp;" + tipoMensagem.getDescricao() + "</h2>";
        i++;
        texto += "<p tabindex=" + i + ">" + tipoMensagem.getDescricaoDetalhada() + "</p>";
        i++;
      }
    }

    if (request.getParameter("tela").compareToIgnoreCase("TiposAssunto") == 0) {
      List lista = this.getOrgao(request).getListaAssuntosSubOrgaos();
      Assunto assunto;
      Iterator iter = lista.iterator();
      int i = 2;
      while (iter.hasNext()) {
        assunto = (Assunto) iter.next();
        texto += "<h2 tabindex=" + i + ">&nbsp;" + assunto.getDescricao() + "</h2>";
        i++;
        texto += "<p tabindex=" + i + ">" + assunto.getDescricaoDetalhada() + "</p>";
        i++;
      }
    }

    if (request.getParameter("tela").compareToIgnoreCase("InformacoesOuvidoria") == 0) {
      texto +=
          "<a tabindex=2 title='Legislação' href='../ExibirMensagemGenerica.do?titulo=Legislação&tela=Legislacao' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Legislação</font></a><br>";
      texto +=
          "<a tabindex=3 title='Tipos de Mensagem' href='../ExibirMensagemGenerica.do?titulo=Tipos de Mensagem&tela=TiposMensagem' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tipos de Mensagem</font></a><br>";
      texto +=
          "<a tabindex=4 title='Tipos de Assunto' href='../ExibirMensagemGenerica.do?titulo=Tipos de Assunto&tela=TiposAssunto' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tipos de Assunto</font></a><br>";
      texto +=
          "<a tabindex=5 title='Resultados da Ouvidoria' href='../ExibirResultadoOuvidoria.do?titulo=Resultados%20da%20Ouvidoria' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Resultados da Ouvidoria</font></a><br>";
    }

    if (request.getParameter("tela").compareToIgnoreCase("FaleOuvidoria") == 0) {
      texto +=
          "<a tabindex=2 title='Acionamento' href='../acionamento/EnviarMensagemWeb.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Acionamento</font></a></label><br>";
      texto +=
          "<a tabindex=3 title='Outros Canais de Comunicação' href='../ExibirMensagemGenerica.do?titulo=Outros Canais de Comunicação&tela=CanaisComunicacao' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Outros Canais de Comunicação</font></a><br>";
    }

    if (request.getParameter("funcionalidade") != null) {

      Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO);

      FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(getDaoFactory());

      Funcionario funcionario = (Funcionario) funcionarioCtrl.get(funcionarioId);

      if (funcionario == null) {
        return mapping.findForward(Constants.LOGIN_FORWARD);
      }

      Funcionalidade funcionalidade =
          exibirMensagemGenericaCtrl.getFuncionalidade(
              new Integer(request.getParameter("funcionalidade")));
      List subFuncionalidades = exibirMensagemGenericaCtrl.getSubMenu(funcionario, funcionalidade);

      Iterator iter;

      iter = subFuncionalidades.iterator();
      int i = 2;
      while (iter.hasNext()) {
        funcionalidade = (Funcionalidade) iter.next();
        texto +=
            "<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;<a tabindex="
                + i
                + " title='"
                + funcionalidade.getDescricao()
                + "' href='.."
                + funcionalidade.getPath()
                + "'"
                + " target='conteudo'>&nbsp;"
                + funcionalidade.getDescricao()
                + "</a></font><br>";
        i++;
      }
    }

    if (request.getParameter("tela").compareToIgnoreCase("AjudaInternet") == 0) {
      texto +=
          "<a tabindex=2 title='Tópicos da Ajuda' href='../Ajuda.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Tópicos de Ajuda</font></a><br>";
      texto +=
          "<a tabindex=3 title='Mapa do Site' href='../ExibirMensagemGenerica.do?titulo=Mapa do Site&tela=MapaSiteInternet' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Mapa do Site</font></a><br>";
    }

    if (request.getParameter("tela").compareToIgnoreCase("AjudaIntranet") == 0) {
      texto +=
          "<a tabindex=2 title='Tópicos da Ajuda' href='../Ajuda.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Tópicos de Ajuda</font></a><br>";
      texto +=
          "<a tabindex=3 title='Mapa do Site' href='../ExibirMensagemGenerica.do?titulo=Mapa do Site&tela=MapaSiteIntranet' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Mapa do Site</font></a><br>";
    }

    if (request.getParameter("tela").compareToIgnoreCase("AjudaLogado") == 0) {
      texto +=
          "<a tabindex=2 title='Tópicos da Ajuda' href='../Ajuda.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Tópicos de Ajuda</font></a><br>";
      texto +=
          "<a tabindex=3 title='Mapa do Site' href='../ExibirMensagemGenerica.do?titulo=Mapa do Site&tela=MapaSiteLogado' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Mapa do Site</font></a><br>";
    }

    if (request.getParameter("tela").compareToIgnoreCase("MapaSiteInternet") == 0) {
      texto +=
          "<a tabindex=2 title='Sistema Ouvidoria' href='../Main.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Sistema Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=3 title='Fale com a Ouvidoria' href='../acionamento/EnviarMensagemWeb.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1Pai'><img src='images/bullet1a.gif'>&nbsp;Fale com a Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=3 title='Acionamento' href='../acionamento/EnviarMensagemWeb.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Acionamento</font></a><br>";
      texto +=
          "<a tabindex=3 title='Outros Canais de Comunicação' href='../ExibirMensagemGenerica.do?titulo=Outros Canais de Comunicação&tela=CanaisComunicacao' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Outros Canais de Comunicação</font></a><br>";
      texto +=
          "<a tabindex=4 title='Consulte sua Resposta' href='../andamento/ConsultarResposta.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Consulte sua Resposta</font></a><br>";
      texto +=
          "<a tabindex=5 title='Informações da Ouvidoria' href='../ExibirMensagemGenerica.do?titulo=Informações da Ouvidoria&tela=InformacoesOuvidoria' target='conteudo'>&nbsp;<font class='mapaSiteNiv1Pai'><img src='images/bullet1a.gif'>&nbsp;Informações da Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=6 title='Legislação' href='../ExibirMensagemGenerica.do?titulo=Legislação&tela=Legislacao' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Legislação</font></a><br>";
      texto +=
          "<a tabindex=7 title='Tipos de Mensagem' href='../ExibirMensagemGenerica.do?titulo=Tipos de Mensagem&tela=TiposMensagem' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tipos de Mensagem</font></a><br>";
      texto +=
          "<a tabindex=8 title='Tipos de Assunto' href='../ExibirMensagemGenerica.do?titulo=Tipos de Assunto&tela=TiposAssunto' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tipos de Assunto</font></a><br>";
      texto +=
          "<a tabindex=9 title='Resultados da Ouvidoria' href='../ExibirResultadoOuvidoria.do?titulo=Resultados%20da%20Ouvidoria' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Resultados da Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=10 title='Ajuda' href='../ExibirMensagemGenerica.do?titulo=Ajuda&tela=AjudaInternet' target='conteudo'>&nbsp;<font class='mapaSiteNiv1Pai'><img src='images/bullet1a.gif'>&nbsp;Ajuda</font></a><br>";
      texto +=
          "<a tabindex=11 title='Tópico da Ajuda' href='../Ajuda.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tópicos da Ajuda</font></a><br>";
      texto +=
          "<a tabindex=12 title='Mapa do Site' href='../ExibirMensagemGenerica.do?titulo=Mapa do Site&tela=MapaSiteInternet' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Mapa do Site</font></a><br>";
    }

    if (request.getParameter("tela").compareToIgnoreCase("MapaSiteIntranet") == 0) {
      texto +=
          "<a tabindex=2 title='Sistema Ouvidoria' href='../Main.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Sistema Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=3 title='Fale com a Ouvidoria' href='../acionamento/EnviarMensagemWeb.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Fale com a Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=3 title='Acionamento' href='../acionamento/EnviarMensagemWeb.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Acionamento</font></a><br>";
      texto +=
          "<a tabindex=3 title='Outros Canais de Comunicação' href='../ExibirMensagemGenerica.do?titulo=Outros Canais de Comunicação&tela=CanaisComunicacao' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Outros Canais de Comunicação</font></a><br>";
      texto +=
          "<a tabindex=4 title='Consulte sua Resposta' href='../andamento/ConsultarResposta.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Consulte sua Resposta</font></a><br>";
      texto +=
          "<a tabindex=5 title='Informações da Ouvidoria' href='../ExibirMensagemGenerica.do?titulo=Informações da Ouvidoria&tela=InformacoesOuvidoria' target='conteudo'>&nbsp;<font class='mapaSiteNiv1Pai'><img src='images/bullet1a.gif'>&nbsp;Informações da Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=6 title='Legislação' href='../ExibirMensagemGenerica.do?titulo=Legislação&tela=Legislacao' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Legislação</font></a><br>";
      texto +=
          "<a tabindex=7 title='Tipos de Mensagem' href='../ExibirMensagemGenerica.do?titulo=Tipos de Mensagem&tela=TiposMensagem' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tipos de Mensagem</font></a><br>";
      texto +=
          "<a tabindex=8 title='Tipos de Assunto' href='../ExibirMensagemGenerica.do?titulo=Tipos de Assunto&tela=TiposAssunto' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tipos de Assunto</font></a><br>";
      texto +=
          "<a tabindex=9 title='Resultados da Ouvidoria' href='../ExibirResultadoOuvidoria.do?titulo=Resultados%20da%20Ouvidoria' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Resultados da Ouvidoria</font></a><br>";
      texto +=
          "<a tabindex=10 title='Ajuda' href='../ExibirMensagemGenerica.do?titulo=Ajuda&tela=AjudaIntranet' target='conteudo'>&nbsp;<font class='mapaSiteNiv1Pai'><img src='images/bullet1a.gif'>&nbsp;Ajuda</font></a><br>";
      texto +=
          "<a tabindex=11 title='Tópico da Ajuda' href='../Ajuda.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Tópicos da Ajuda</font></a><br>";
      texto +=
          "<a tabindex=12 title='Mapa do Site' href='../ExibirMensagemGenerica.do?titulo=Mapa do Site&tela=MapaSiteIntranet' target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;Mapa do Site</font></a><br>";
    }

    if (request.getParameter("tela").compareToIgnoreCase("MapaSiteLogado") == 0) {

      Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO);

      FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(getDaoFactory());

      Funcionario funcionario = (Funcionario) funcionarioCtrl.get(funcionarioId);

      if (funcionario == null) {
        return mapping.findForward(Constants.LOGIN_FORWARD);
      }

      Funcionalidade funcionalidade;
      Funcionalidade funcionalidadeSub;
      List lista = exibirMensagemGenericaCtrl.getMenu(funcionario);
      Collection listaSubItem = new ArrayList();

      class FuncionalidadeComparator implements Comparator {
        public final int compare(Object a, Object b) {
          return (((Funcionalidade) a).getOrdemItemMenu())
              .compareTo((((Funcionalidade) b).getOrdemItemMenu()));
        } // end compare
      } // end class StringComparator

      Collections.sort(lista, new FuncionalidadeComparator());

      Iterator iter;
      Iterator iter2;

      iter = lista.iterator();

      texto +=
          "<a tabindex=2 title='Sistema Ouvidoria' href='../Main.do' target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;Sistema Ouvidoria</font></a><br>";
      int i = 3;
      while (iter.hasNext()) {
        funcionalidade = (Funcionalidade) iter.next();

        if (funcionalidade.getListaSubItemMenu(funcionario).size() > 0) {
          texto +=
              "<a tabindex="
                  + i
                  + " title='"
                  + funcionalidade.getDescricao()
                  + "'"
                  + " href='.."
                  + funcionalidade.getPath()
                  + "'"
                  + " target='conteudo'>&nbsp;<font class='mapaSiteNiv1Pai'><img src='images/bullet1a.gif'>&nbsp;"
                  + funcionalidade.getDescricao()
                  + "</font></a><br>";
          i++;
          listaSubItem = funcionalidade.getListaSubItemMenu(funcionario);
          iter2 = listaSubItem.iterator();
          while (iter2.hasNext()) {
            funcionalidadeSub = (Funcionalidade) iter2.next();
            texto +=
                "<a tabindex="
                    + i
                    + " title='"
                    + funcionalidadeSub.getDescricao()
                    + "'"
                    + " href='.."
                    + funcionalidadeSub.getPath()
                    + "'"
                    + " target='conteudo'>&nbsp;<font class='mapaSiteNiv2'><img src='images/bullet1b.gif'>&nbsp;"
                    + funcionalidadeSub.getDescricao()
                    + "</font></a><br>";
            i++;
          }
        } else {
          texto +=
              "<a tabindex="
                  + i
                  + " title='"
                  + funcionalidade.getDescricao()
                  + "'"
                  + " href='.."
                  + funcionalidade.getPath()
                  + "'"
                  + " target='conteudo'>&nbsp;<font class='mapaSiteNiv1'><img src='images/bullet1a.gif'>&nbsp;"
                  + funcionalidade.getDescricao()
                  + "</font></a><br>";
          i++;
        }
      }
    }

    if (request.getParameter("tela").equalsIgnoreCase("Ajuda")) {
      texto = request.getParameter("texto");
    }

    request.setAttribute("titulo", request.getParameter("titulo"));
    request.setAttribute("texto", texto);

    if (errors.isEmpty()) {
      return (mapping.findForward("success"));
    }
    return (mapping.findForward("failure"));
  }
  protected boolean processRoles(
      HttpServletRequest request, HttpServletResponse response, ActionMapping mapping)
      throws IOException, ServletException {

    String role = null;

    ArrayList regras = new ArrayList();

    /*
     * Trecho responsável por pegar as regras de acesso definidas no Struts
     * Este tratamento foi feito para permitir/restringir acesso a mais de
     * uma opção por url. No caso Reclassificar Assunto e Mensagem através
     * da url reclassificar
     */
    if (mapping.getRoles() != null) {

      String[] roles = mapping.getRoles().split(",");

      for (int cont = 0; cont < roles.length; cont++) {

        try {

          new Long(roles[cont]);

        } catch (Exception e) {

          e.printStackTrace();
          throw new ServletException("Código de regra de acesso inválido.");
        }

        regras.add(roles[cont]);
        role = (String) regras.get(0); // Pega a primeira regra(role)
      }
    }

    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    /* Não existe bloqueio para esta acão */
    if (role == null || role.trim().length() == 0) {
      return true;
    }

    request.setAttribute(Constants.SR_FUNCIONALIDADE, role);

    /*Coloca a funcionalidade na sessão para
     * ser recuperada na tela de ajuda
     */
    request.getSession().setAttribute(Constants.SR_FUNCIONALIDADE, role);

    ControleAcessoCtrl controleAcessoCtrl = new ControleAcessoCtrl(daoFactory);

    Orgao orgao =
        orgaoCtrl.get((String) request.getSession().getAttribute(Constants.ID_SESSAO_ORGAO));

    /* verifico a vigência do órgão para acionamento e consulta resposta */
    String redirect = null;

    int vigenciaOrgao = controleAcessoCtrl.verificaVigenciaOrgao(orgao, role);

    switch (vigenciaOrgao) {
      case ControleAcessoCtrl.VG_FORA_PERIODO_ACIONAMENTO:
        redirect = Constants.CAD_ACNMNT_FORA_VIGENCIA_PAGE;
        break;
      case ControleAcessoCtrl.VG_FORA_PERIODO_CONSULTA_RESPOSTA:
        redirect = Constants.CON_RESPTA_FORA_VIGENCIA_PAGE;
        break;
      case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO:
        redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE;
        break;
      default:
        // DO NOTHING
    }

    if (redirect != null) {

      controleAcessoCtrl = null;

      /* retiro o controle do struts */
      doForward(redirect, request, response);
      return false;
    }

    /* verifico o acesso do funcionario ao sistema */
    int possuiAcesso = ControleAcessoCtrl.CA_NECESSARIO_LOGIN;

    try {

      Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO);

      FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(daoFactory);

      Funcionario funcionario = (Funcionario) funcionarioCtrl.get(funcionarioId);

      possuiAcesso = controleAcessoCtrl.permiteAcesso(orgao, funcionario, regras);

    } catch (DaoException e) {
      System.out.println(e.getMessage());
      e.printStackTrace();

      throw new ServletException(e);
    }

    redirect = Constants.LOGIN_ACTION;

    switch (possuiAcesso) {
      case ControleAcessoCtrl.CA_ACESSO_PERMITIDO:
        request.getSession().setAttribute(Constants.SR_FUNCIONALIDADES, regras);
        return true;
      case ControleAcessoCtrl.CA_ACESSO_NEGADO:
        redirect = Constants.DENIED_ACCESS_ACTION;
        break;
      case ControleAcessoCtrl.CA_NECESSARIO_LOGIN:
        redirect = Constants.LOGIN_ACTION;
        break;
      case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO:
        redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE;
        break;
      default:
        redirect = Constants.LOGIN_ACTION;
    }

    controleAcessoCtrl = null;

    /* retiro o funcionario da sessão */
    request.getSession().removeAttribute(Constants.PA_FUNCIONARIO);

    /* retiro o controle do struts */
    doForward(redirect, request, response);

    return false;
  }