/**
   * O método cria os parametros necessários a geração do relatorio.
   *
   * @since 06/10/2009
   * @author Marlon Patrick
   */
  private Map<String, Object> criarParametros() {
    FiltrarRelatorioAnormalidadeLeituraPeriodoHelper filtro =
        (FiltrarRelatorioAnormalidadeLeituraPeriodoHelper) getParametro("filtroRelatorio");

    FiltroLeituraAnormalidade filtroConsumoAnormalidade = new FiltroLeituraAnormalidade();
    filtroConsumoAnormalidade.adicionarParametro(
        new ParametroSimples(FiltroLeituraAnormalidade.ID, filtro.getAnormalidadeLeitura()));
    filtroConsumoAnormalidade.adicionarParametro(
        new ParametroSimples(
            FiltroLeituraAnormalidade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));

    Collection<LeituraAnormalidade> colecaoAnormalidadeleitura =
        Fachada.getInstancia()
            .pesquisar(filtroConsumoAnormalidade, LeituraAnormalidade.class.getName());

    LeituraAnormalidade anormalidade = colecaoAnormalidadeleitura.iterator().next();

    Map<String, Object> parametros = new HashMap<String, Object>();

    parametros.put(
        "imagem", Fachada.getInstancia().pesquisarParametrosDoSistema().getImagemRelatorio());
    parametros.put(
        "filtroPeriodoLeitura",
        Util.formatarAnoMesParaMesAno(filtro.getAnoMesReferenciaInicial())
            + " - "
            + Util.formatarAnoMesParaMesAno(filtro.getAnoMesReferenciaFinal()));
    parametros.put(
        "filtroAnormalidade", anormalidade.getId() + " - " + anormalidade.getDescricao());

    return parametros;
  }
  /**
   * [UC0146ManterConta] - Manter Conta
   *
   * <p>Metodo verifica se existe contas já pagas nas contas que serão canceladas. Em caso
   * afirmativo, apresenta todos os meses de referencia das contas para informar ao usuário.
   *
   * @author bruno
   * @date 06/05/2009
   * @param String[]: Vetor com todos os id's das contas
   * @param request: Onde se serão informados os parametros para geração da página
   * @param actionMapping: Necessário para geração da página
   * @return Object[3]
   *     <p>Object[0]: ActionFoward com a tela a ser mostrada Object[1]: Se o usuário confimou ou
   *     não a inserção do novo ra Object[2]: Se será redirecionado ao usuário perguntando se as
   *     contas terão os cnta_id removidos dos pagamentos.
   */
  private Object[] validarContasCanceladasPagasRA(
      String[] idsContas, HttpServletRequest request, ActionMapping actionMapping) {

    Object[] retorno = new Object[3];

    // Verificamos se ja foi confimado...
    retorno[1] =
        (request.getParameter("confirmado") != null
            ? request.getParameter("confirmado").equals("ok")
            : null);

    retorno[2] = new Boolean(Boolean.FALSE);

    if (retorno[1] == null) {
      Fachada fachada = Fachada.getInstancia();

      Collection<String> colContasPagas = new ArrayList();

      for (int i = 0; i < idsContas.length; i++) {
        String dadosConta = idsContas[i];
        String id = dadosConta.split("-")[0];

        FiltroPagamento filtro = new FiltroPagamento();

        filtro.adicionarParametro(
            new ParametroSimples(FiltroPagamento.CONTA_ID, Integer.valueOf(id)));

        Collection<Pagamento> colPagamento = fachada.pesquisar(filtro, Pagamento.class.getName());

        Pagamento pagamento = (Pagamento) Util.retonarObjetoDeColecao(colPagamento);

        if (pagamento != null) {
          if (colContasPagas.size() == 0) {
            colContasPagas.add(
                Util.formatarAnoMesParaMesAno(pagamento.getAnoMesReferenciaPagamento()));
          } else {
            colContasPagas.add(
                ", " + Util.formatarAnoMesParaMesAno(pagamento.getAnoMesReferenciaPagamento()));
          }
        }
      }

      if (colContasPagas.size() > 0) {
        String[] arrayIdsContas = new String[colContasPagas.size()];
        System.arraycopy(colContasPagas.toArray(), 0, arrayIdsContas, 0, arrayIdsContas.length);

        request.setAttribute("caminhoActionConclusao", "/gsan/cancelarContaAction.do");
        request.setAttribute("cancelamento", "TRUE");
        request.setAttribute("nomeBotao1", "Sim");
        request.setAttribute("nomeBotao2", "Não");

        retorno[0] =
            montarPaginaConfirmacao(
                "atencao.contas_cancelamento_pagas", request, actionMapping, arrayIdsContas);

        retorno[2] = new Boolean(Boolean.TRUE);
      }
      return retorno;
    }

    retorno[0] = actionMapping.findForward("telaSucesso");
    return retorno;
  }
  /**
   * < <Descrição do método>>
   *
   * @param bairros Description of the Parameter
   * @param bairroParametros Description of the Parameter
   * @return Descrição do retorno
   * @exception RelatorioVazioException Descrição da exceção
   */
  public Object executar() throws TarefaException {

    // ------------------------------------
    Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada();
    // ------------------------------------

    Integer idGerenciaRegional = (Integer) getParametro("idGerenciaRegional");
    Integer idUnidadeNegocio = (Integer) getParametro("idUnidadeNegocio");
    Integer idLocalidadeInicial = (Integer) getParametro("idLocalidadeInicial");
    Integer idLocalidadeFinal = (Integer) getParametro("idLocalidadeFinal");
    Integer idSetorComercialInicial = (Integer) getParametro("idSetorComercialInicial");
    Integer idSetorComercialFinal = (Integer) getParametro("idSetorComercialFinal");
    Integer idImovel = (Integer) getParametro("idImovelPerfil");
    Integer selecionar = (Integer) getParametro("selecionar");
    Integer referencia = (Integer) getParametro("referencia");
    Integer idImovelPerfil = (Integer) getParametro("idImovelPerfil");
    int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");

    // valor de retorno
    byte[] retorno = null;

    // coleção de beans do relatório
    List relatorioBeans = new ArrayList();

    Fachada fachada = Fachada.getInstancia();

    RelatorioAnaliseImovelCorporativoGrandeBean relatorioBean = null;

    Collection colecaoRelatorioAnaliseImovelCorporativoGrandeHelper =
        fachada.pesquisarDadosRelatorioAnaliseImovelCorporativoGrande(
            idGerenciaRegional,
            idUnidadeNegocio,
            idLocalidadeInicial,
            idLocalidadeFinal,
            idSetorComercialInicial,
            idSetorComercialFinal,
            referencia,
            idImovel,
            selecionar);

    // se a coleção de parâmetros da analise não for vazia
    if (colecaoRelatorioAnaliseImovelCorporativoGrandeHelper != null
        && !colecaoRelatorioAnaliseImovelCorporativoGrandeHelper.isEmpty()) {

      // coloca a coleção de parâmetros da analise no iterator
      Iterator colecaoRelatorioAnaliseImovelCorporativoGrandeHelperIterator =
          colecaoRelatorioAnaliseImovelCorporativoGrandeHelper.iterator();

      // laço para criar a coleção de parâmetros da analise
      while (colecaoRelatorioAnaliseImovelCorporativoGrandeHelperIterator.hasNext()) {

        GerarRelatorioAnaliseImovelCorporativoGrandeHelper helper =
            (GerarRelatorioAnaliseImovelCorporativoGrandeHelper)
                colecaoRelatorioAnaliseImovelCorporativoGrandeHelperIterator.next();

        // Faz as validações dos campos necessáriose e formata a String
        // para a forma como irá aparecer no relatório

        // Gerência Regional
        String gerenciaRegional = "";

        if (helper.getIdGerenciaRegional() != null) {
          gerenciaRegional =
              helper.getIdGerenciaRegional() + " - " + helper.getNomeGerenciaRegional();
        }

        // Unidade de Negócio
        String unidadeNegocio = "";

        if (helper.getIdUnidadeNegocio() != null) {
          unidadeNegocio = helper.getIdUnidadeNegocio() + " - " + helper.getNomeUnidadeNegocio();
        }

        // Localidade
        String localidade = "";

        if (helper.getIdLocalidade() != null) {
          localidade = helper.getIdLocalidade() + " - " + helper.getNomeLocalidade();
        }

        // Setor Comercial
        String setorComercial = "";
        String idSetorComercial = "";

        if (helper.getIdSetorComercial() != null) {
          setorComercial = helper.getCodigoSetorComercial().toString();
          idSetorComercial = helper.getIdSetorComercial().toString();
        }

        // Imóvel, Endereço e Categoria
        String matriculaImovel = "";
        String endereco = "";
        String inscricao = "";

        if (helper.getIdImovel() != null) {
          matriculaImovel = helper.getIdImovel().toString();
          Imovel imovel = new Imovel();
          imovel.setId(helper.getIdImovel());
          endereco = fachada.pesquisarEndereco(helper.getIdImovel());
          inscricao = fachada.pesquisarInscricaoImovel(helper.getIdImovel());
        }

        // Capacidade do Hidrômetro
        String capacidadeHidrometro = "";

        if (helper.getCapacidadeHidrometro() != null) {
          capacidadeHidrometro = helper.getCapacidadeHidrometro();
        }

        String consumoMedio = "";

        if (helper.getConsumoMedio() != null) {
          consumoMedio = helper.getConsumoMedio().toString();
        }

        String consumoFaturado = "";

        if (helper.getConsumoFaturado() != null) {
          consumoFaturado = helper.getConsumoFaturado().toString();
        }

        String tipoLigacao = "";

        if (helper.getIdTipoLigacao() != null) {
          if (helper.getIdTipoLigacao().equals(1)) {
            tipoLigacao = "ÁGUA";
          } else {
            tipoLigacao = "ESGOTO";
          }
        }

        relatorioBean =
            new RelatorioAnaliseImovelCorporativoGrandeBean(

                // Unidade de Negócio
                unidadeNegocio,

                // Gerência Regional
                gerenciaRegional,

                // Localidade
                localidade,

                // Id do Setor Comercial
                idSetorComercial,

                // Setor Comercial
                setorComercial,

                // Inscrição
                inscricao,

                // Imóvel
                matriculaImovel,

                // Endereço
                endereco,

                // Capacidade do Hidrômetro
                capacidadeHidrometro,

                // Consumo Médio
                consumoMedio,

                // Consumo Faturado
                consumoFaturado,

                // Tipo de ligação
                tipoLigacao);

        // adiciona o bean a coleção
        relatorioBeans.add(relatorioBean);
      }
    }
    // __________________________________________________________________

    // Parâmetros do relatório
    Map parametros = new HashMap();

    // adiciona os parâmetros do relatório
    // adiciona o laudo da análise
    SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();

    parametros.put("imagem", sistemaParametro.getImagemRelatorio());

    parametros.put("mesAno", Util.formatarAnoMesParaMesAno(referencia));

    if (idUnidadeNegocio != null) {
      FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
      filtroUnidadeNegocio.adicionarParametro(
          new ParametroSimples(FiltroUnidadeNegocio.ID, idUnidadeNegocio));
      Collection colecaoUnidadeNegocio =
          fachada.pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
      UnidadeNegocio unidadeNegocio =
          (UnidadeNegocio) Util.retonarObjetoDeColecao(colecaoUnidadeNegocio);
      parametros.put(
          "unidadeNegocio", unidadeNegocio.getNomeAbreviado() + "-" + unidadeNegocio.getNome());
    } else {
      parametros.put("unidadeNegocio", "");
    }

    if (idLocalidadeInicial != null) {
      FiltroLocalidade filtroLocalidadeInicial = new FiltroLocalidade();
      filtroLocalidadeInicial.adicionarParametro(
          new ParametroSimples(FiltroLocalidade.ID, idLocalidadeInicial));
      Collection colecaoLocalidadeInicial =
          fachada.pesquisar(filtroLocalidadeInicial, Localidade.class.getName());
      Localidade localidadeInicial =
          (Localidade) Util.retonarObjetoDeColecao(colecaoLocalidadeInicial);
      parametros.put(
          "localidadeInicial", localidadeInicial.getId() + "-" + localidadeInicial.getDescricao());

    } else {
      parametros.put("localidadeInicial", "");
    }

    if (idLocalidadeInicial != null) {
      FiltroLocalidade filtroLocalidadeFinal = new FiltroLocalidade();
      filtroLocalidadeFinal.adicionarParametro(
          new ParametroSimples(FiltroLocalidade.ID, idLocalidadeInicial));
      Collection colecaoLocalidadeFinal =
          fachada.pesquisar(filtroLocalidadeFinal, Localidade.class.getName());
      Localidade localidadeFinal = (Localidade) Util.retonarObjetoDeColecao(colecaoLocalidadeFinal);
      parametros.put(
          "localidadeFinal", localidadeFinal.getId() + "-" + localidadeFinal.getDescricao());

    } else {
      parametros.put("localidadeFinal", "");
    }

    if (idGerenciaRegional != null) {
      FiltroGerenciaRegional filtroGerenciaRegional = new FiltroGerenciaRegional();
      filtroGerenciaRegional.adicionarParametro(
          new ParametroSimples(FiltroGerenciaRegional.ID, idGerenciaRegional));
      Collection colecaoGerenciaRegional =
          fachada.pesquisar(filtroGerenciaRegional, GerenciaRegional.class.getName());
      GerenciaRegional gerenciaRegional =
          (GerenciaRegional) Util.retonarObjetoDeColecao(colecaoGerenciaRegional);
      parametros.put(
          "gerenciaRegional",
          gerenciaRegional.getNomeAbreviado() + "-" + gerenciaRegional.getNome());
    } else {
      parametros.put("gerenciaRegional", "");
    }

    if (idSetorComercialInicial != null) {
      FiltroSetorComercial filtroSetorComercialInicial = new FiltroSetorComercial();
      filtroSetorComercialInicial.adicionarParametro(
          new ParametroSimples(FiltroSetorComercial.ID, idSetorComercialInicial));
      Collection colecaoSetorComercialInicial =
          fachada.pesquisar(filtroSetorComercialInicial, SetorComercial.class.getName());
      SetorComercial setorComercialInicial =
          (SetorComercial) Util.retonarObjetoDeColecao(colecaoSetorComercialInicial);
      parametros.put(
          "setorComercialInicial",
          setorComercialInicial.getId() + "-" + setorComercialInicial.getDescricao());
    } else {
      parametros.put("setorComercialInicial", "");
    }

    if (idSetorComercialInicial != null) {
      FiltroSetorComercial filtroSetorComercialFinal = new FiltroSetorComercial();
      filtroSetorComercialFinal.adicionarParametro(
          new ParametroSimples(FiltroSetorComercial.ID, idSetorComercialInicial));
      Collection colecaoSetorComercialFinal =
          fachada.pesquisar(filtroSetorComercialFinal, SetorComercial.class.getName());
      SetorComercial setorComercialFinal =
          (SetorComercial) Util.retonarObjetoDeColecao(colecaoSetorComercialFinal);
      parametros.put(
          "setorComercialFinal",
          setorComercialFinal.getId() + "-" + setorComercialFinal.getDescricao());
    } else {
      parametros.put("setorComercialFinal", "");
    }

    if (idImovelPerfil != null) {
      FiltroImovelPerfil filtroImovelPerfil = new FiltroImovelPerfil();
      filtroImovelPerfil.adicionarParametro(
          new ParametroSimples(FiltroImovelPerfil.ID, idImovelPerfil));
      Collection colecaoImovelPerfil =
          fachada.pesquisar(filtroImovelPerfil, ImovelPerfil.class.getName());
      ImovelPerfil imovelPerfil = (ImovelPerfil) Util.retonarObjetoDeColecao(colecaoImovelPerfil);
      parametros.put(
          "imovelPerfil", "ANÁLISE DO IMÓVEIS " + imovelPerfil.getDescricao().toUpperCase() + "S");
    } else {
      parametros.put("imovelPerfil", "");
    }

    parametros.put("tipoFormatoRelatorio", "R0887");

    // cria uma instância do dataSource do relatório
    RelatorioDataSource ds = new RelatorioDataSource(relatorioBeans);

    retorno =
        gerarRelatorio(
            ConstantesRelatorios.RELATORIO_ANALISE_IMOVEL_CORPORATIVO_GRANDE,
            parametros,
            ds,
            tipoFormatoRelatorio);

    // ------------------------------------
    // Grava o relatório no sistema
    try {
      persistirRelatorioConcluido(
          retorno, Relatorio.ANALISE_IMOVEL_CORPORATIVO_GRANDE, idFuncionalidadeIniciada);
    } catch (ControladorException e) {
      e.printStackTrace();
      throw new TarefaException("Erro ao gravar relatório no sistema", e);
    }
    // ------------------------------------

    // retorna o relatório gerado
    return retorno;
  }