public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno = null;

    HttpSession sessao = httpServletRequest.getSession(false);

    FiltrarContratoArrecadadorActionForm filtrarContratoArrecadadorActionForm =
        (FiltrarContratoArrecadadorActionForm) actionForm;

    FiltroArrecadadorContrato filtroContratoArrecadador =
        (FiltroArrecadadorContrato) sessao.getAttribute("filtroArrecadadorContrato");

    ArrecadadorContrato contratoArrecadadorParametros = new ArrecadadorContrato();

    // pega os parâmetros informados na tela de consulta de débitos automáticos

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIdArrecadador())) {
      FiltroArrecadador filtroArrecadador = new FiltroArrecadador();
      filtroArrecadador.adicionarParametro(
          new ParametroSimples(
              FiltroArrecadador.ID,
              Integer.parseInt(filtrarContratoArrecadadorActionForm.getIdArrecadador().trim())));

      Arrecadador arrecadador =
          (Arrecadador)
              Fachada.getInstancia()
                  .pesquisar(filtroArrecadador, Arrecadador.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setArrecadador(arrecadador);
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIdCliente())) {
      FiltroCliente filtroCliente = new FiltroCliente();
      filtroCliente.adicionarParametro(
          new ParametroSimples(
              FiltroCliente.ID,
              Integer.parseInt(filtrarContratoArrecadadorActionForm.getIdCliente().trim())));

      Cliente cliente =
          (Cliente)
              Fachada.getInstancia()
                  .pesquisar(filtroCliente, Cliente.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setCliente(cliente);
    }

    if (Util.verificarNaoVazio(
        filtrarContratoArrecadadorActionForm.getIdContaBancariaArrecadador())) {
      FiltroContaBancaria filtroContaBancaria = new FiltroContaBancaria();
      filtroContaBancaria.adicionarParametro(
          new ParametroSimples(
              FiltroContaBancaria.ID,
              Integer.parseInt(
                  filtrarContratoArrecadadorActionForm.getIdContaBancariaArrecadador().trim())));
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia");
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia.banco");

      ContaBancaria contaBancariaDeposito =
          (ContaBancaria)
              Fachada.getInstancia()
                  .pesquisar(filtroContaBancaria, ContaBancaria.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setContaBancariaDepositoArrecadacao(contaBancariaDeposito);
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIdContaBancariaTarifa())) {
      FiltroContaBancaria filtroContaBancaria = new FiltroContaBancaria();
      filtroContaBancaria.adicionarParametro(
          new ParametroSimples(
              FiltroContaBancaria.ID,
              Integer.parseInt(
                  filtrarContratoArrecadadorActionForm.getIdContaBancariaTarifa().trim())));
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia");
      filtroContaBancaria.adicionarCaminhoParaCarregamentoEntidade("agencia.banco");

      ContaBancaria contaBancariaTarifa =
          (ContaBancaria)
              Fachada.getInstancia()
                  .pesquisar(filtroContaBancaria, ContaBancaria.class.getName())
                  .iterator()
                  .next();
      contratoArrecadadorParametros.setContaBancariaDepositoTarifa(contaBancariaTarifa);
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getIndicadorCobranca())) {
      contratoArrecadadorParametros.setIndicadorCobrancaIss(
          Short.parseShort(filtrarContratoArrecadadorActionForm.getIndicadorCobranca().trim()));
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getDtInicioContrato())) {
      contratoArrecadadorParametros.setDataContratoInicio(
          Util.converteStringParaDate(filtrarContratoArrecadadorActionForm.getDtInicioContrato()));
    }

    if (Util.verificarNaoVazio(filtrarContratoArrecadadorActionForm.getDtFimContrato())) {
      contratoArrecadadorParametros.setDataContratoFim(
          Util.converteStringParaDate(filtrarContratoArrecadadorActionForm.getDtFimContrato()));
    }

    contratoArrecadadorParametros.setDescricaoEmail(
        filtrarContratoArrecadadorActionForm.getEmailCliente());
    contratoArrecadadorParametros.setNumeroContrato(
        filtrarContratoArrecadadorActionForm.getNumeroContrato());
    contratoArrecadadorParametros.setCodigoConvenio(
        filtrarContratoArrecadadorActionForm.getIdConvenio());

    String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
    if (tipoRelatorio == null) {
      tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
    }

    RelatorioManterContratoArrecadador relatorioManterContratoArrecadador =
        new RelatorioManterContratoArrecadador(
            (Usuario) (httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
    relatorioManterContratoArrecadador.addParametro(
        "filtroArrecadadorContrato", filtroContratoArrecadador);
    relatorioManterContratoArrecadador.addParametro(
        "contratoArrecadadorParametros", contratoArrecadadorParametros);
    relatorioManterContratoArrecadador.addParametro(
        "tipoFormatoRelatorio", Integer.parseInt(tipoRelatorio));

    try {
      retorno =
          processarExibicaoRelatorio(
              relatorioManterContratoArrecadador,
              tipoRelatorio,
              httpServletRequest,
              httpServletResponse,
              actionMapping);

    } catch (SistemaException ex) {
      reportarErros(httpServletRequest, "erro.sistema");
      retorno = actionMapping.findForward("telaErroPopup");

    } catch (RelatorioVazioException ex1) {
      reportarErros(httpServletRequest, "erro.relatorio.vazio");
      retorno = actionMapping.findForward("telaAtencaoPopup");
    }

    return retorno;
  }
  /**
   * Description of the Method
   *
   * @param actionMapping Description of the Parameter
   * @param actionForm Description of the Parameter
   * @param httpServletRequest Description of the Parameter
   * @param httpServletResponse Description of the Parameter
   * @return Description of the Return Value
   */
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    // seta o mapeamento de retorno para a página da primeira aba
    ActionForward retorno =
        actionMapping.findForward("informarAcertoDocumentosNaoAceitosPagamento");

    InformarAcertoDocumentosNaoAceitosActionForm form =
        (InformarAcertoDocumentosNaoAceitosActionForm) actionForm;

    // cria uma instância da fachada
    Fachada fachada = Fachada.getInstancia();

    SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();

    // cria uma instância da sessão
    HttpSession sessao = httpServletRequest.getSession(false);

    FiltroArrecadacaoForma filtroArrecadacaoForma = new FiltroArrecadacaoForma();
    filtroArrecadacaoForma.setCampoOrderBy(FiltroArrecadacaoForma.DESCRICAO);

    Collection<ArrecadacaoForma> colecaoFormaArrecadacao =
        fachada.pesquisar(filtroArrecadacaoForma, ArrecadacaoForma.class.getName());

    if (colecaoFormaArrecadacao == null || colecaoFormaArrecadacao.isEmpty()) {
      throw new ActionServletException("atencao.naocadastrado", null, "Forma de Arrecadação");
    } else {
      sessao.setAttribute("colecaoFormaArrecadacao", colecaoFormaArrecadacao);
    }

    String idArrecadador = form.getIdArrecadador();
    // Pesquisa o arrecadador
    if (idArrecadador != null && !idArrecadador.trim().equals("")) {

      FiltroArrecadador filtroArrecadador = new FiltroArrecadador();
      filtroArrecadador.adicionarParametro(
          new ParametroSimples(FiltroArrecadador.CODIGO_AGENTE, idArrecadador));
      filtroArrecadador.adicionarCaminhoParaCarregamentoEntidade("cliente");

      Collection colecaoArrecadador =
          this.getFachada().pesquisar(filtroArrecadador, Arrecadador.class.getName());

      // [FS0001] ? Verificar existência do arrecadador
      if (colecaoArrecadador != null && !colecaoArrecadador.isEmpty()) {

        Arrecadador arrecadador = (Arrecadador) Util.retonarObjetoDeColecao(colecaoArrecadador);

        form.setIdArrecadador(arrecadador.getCodigoAgente().toString());
        form.setNomeArrecadador(arrecadador.getCliente().getNome());
        httpServletRequest.setAttribute("idArrecadadorNaoEncontrado", "true");

      } else {

        form.setIdArrecadador("");
        form.setNomeArrecadador("Arrecadador com código " + idArrecadador + " não existe");
        httpServletRequest.setAttribute("idArrecadadorNaoEncontrado", "exception");
      }
    }

    String idAvisoBancario = form.getIdAvisoBancario();
    if (idAvisoBancario != null && !idAvisoBancario.trim().equals("")) {
      FiltroAvisoBancario filtroAvisoBancario = new FiltroAvisoBancario();
      filtroAvisoBancario.adicionarCaminhoParaCarregamentoEntidade(FiltroAvisoBancario.ARRECADADOR);
      filtroAvisoBancario.adicionarParametro(
          new ParametroSimples(FiltroAvisoBancario.ID, idAvisoBancario));

      Collection colecaoAvisoBancario =
          fachada.pesquisar(filtroAvisoBancario, AvisoBancario.class.getName());

      if (colecaoAvisoBancario != null && !colecaoAvisoBancario.isEmpty()) {
        AvisoBancario avisoBancario =
            (AvisoBancario) Util.retonarObjetoDeColecao(colecaoAvisoBancario);

        form.setCodigoAgenteArrecadador(
            avisoBancario.getArrecadador().getCodigoAgente().toString());
        form.setDataLancamentoAviso(Util.formatarData(avisoBancario.getDataLancamento()));
        form.setNumeroSequencialAviso(avisoBancario.getNumeroSequencial().toString());

      } else {

        form.setIdAvisoBancario("");
        form.setCodigoAgenteArrecadador("");
        form.setDataLancamentoAviso("Aviso Inexistente");
        form.setNumeroSequencialAviso("");

        httpServletRequest.setAttribute("avisoInexistente", true);
      }
    } else {
      form.setDataLancamentoAviso("");
    }

    // 4. O usuário efetua a filtragem
    if (httpServletRequest.getParameter("filtrarPagamentos") != null
        && httpServletRequest
            .getParameter("filtrarPagamentos")
            .toString()
            .trim()
            .equalsIgnoreCase("sim")) {

      // [FS0004] - Verificar preenchimento dos campos obrigatórios
      InformarAcertoDocumentosNaoAceitosPagamentoHelper helper =
          this.carregarHelperParaPesquisa(form, sistemaParametro);

      Collection<PagamentoDocumentosNaoAceitosHelper> colecaoPagamentoDocumentosNaoAceitosHelper =
          fachada.pesquisarPagamentosDocumentosNaoAceitos(helper);

      if (colecaoPagamentoDocumentosNaoAceitosHelper != null
          && !colecaoPagamentoDocumentosNaoAceitosHelper.isEmpty()) {

        sessao.setAttribute(
            "colecaoPagamentoDocumentosNaoAceitosHelper",
            colecaoPagamentoDocumentosNaoAceitosHelper);

      } else {
        sessao.removeAttribute("colecaoPagamentoDocumentosNaoAceitosHelper");

        throw new ActionServletException("atencao.pesquisa.nenhumresultado");
      }
    }

    return retorno;
  }