/**
   * [UC0360] Efetuar Supressao de Água
   *
   * <p>Este caso de uso permite efetuar supressão da ligação de água, sendo chamada pela
   * funcionalidade que encerra a execução da ordem de serviço ou chamada diretamente do menu.
   *
   * @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) {

    // Set no mapeamento de retorno
    ActionForward retorno = actionMapping.findForward("telaSucesso");

    // Obtém a instância da fachada
    Fachada fachada = Fachada.getInstancia();

    HttpSession sessao = httpServletRequest.getSession(false);

    EfetuarSupressaoLigacaoAguaActionForm efetuarSupressaoLigacaoAguaActionForm =
        (EfetuarSupressaoLigacaoAguaActionForm) actionForm;

    IntegracaoComercialHelper integracaoComercialHelper = new IntegracaoComercialHelper();

    OrdemServico ordemServico = (OrdemServico) sessao.getAttribute("ordemServico");

    // Usuario logado no sistema
    Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
    integracaoComercialHelper.setUsuarioLogado(usuario);

    // Ordem de serviço

    String idOrdemServico = efetuarSupressaoLigacaoAguaActionForm.getIdOrdemServico();
    String motivoSupressao = efetuarSupressaoLigacaoAguaActionForm.getMotivoSupressao();
    String numeroLeituraSupressao =
        efetuarSupressaoLigacaoAguaActionForm.getNumeroLeituraSupressao();
    String tipoSupressao = efetuarSupressaoLigacaoAguaActionForm.getTipoSupressao();
    String numeroSeloSupressao = efetuarSupressaoLigacaoAguaActionForm.getNumeroSeloSupressao();
    String indicadorTipoSupressao =
        efetuarSupressaoLigacaoAguaActionForm.getIndicadorTipoSupressao();
    String dataEncerramento = efetuarSupressaoLigacaoAguaActionForm.getDataSupressao();
    String idServicoMotivoNaoCobranca =
        efetuarSupressaoLigacaoAguaActionForm.getMotivoNaoCobranca();
    String valorPercentual = efetuarSupressaoLigacaoAguaActionForm.getPercentualCobranca();

    // Comentado por Raphael Rossiter em 28/02/2007
    // Imovel imovel = ordemServico.getRegistroAtendimento().getImovel();
    Imovel imovel = ordemServico.getImovel();

    FiltroImovel filtroImovel = new FiltroImovel();

    filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, imovel.getId()));

    filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoAgua");

    Collection colecaoImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName());

    imovel = (Imovel) colecaoImovel.iterator().next();

    // [SB0001] - Atualizar Ligacao Agua

    // validar Data Corte
    Date dataSupressao = null;
    if (dataEncerramento != null && !dataEncerramento.equals("")) {
      dataSupressao = Util.converteStringParaDate(dataEncerramento);
    } else {
      throw new ActionServletException("atencao.required", null, " Data do Corte");
    }

    SupressaoTipo supressaoTipo = new SupressaoTipo();
    supressaoTipo.setId(new Integer(tipoSupressao));

    LigacaoAguaSituacao ligacaoAguaSituacao = new LigacaoAguaSituacao();

    if (indicadorTipoSupressao.equals("1")) {
      ligacaoAguaSituacao.setId(LigacaoAguaSituacao.SUPRIMIDO);

      supressaoTipo.setIndicadorTotal(ConstantesSistema.INDICADOR_USO_ATIVO);
    } else {
      ligacaoAguaSituacao.setId(LigacaoAguaSituacao.SUPR_PARC_PEDIDO);
      supressaoTipo.setIndicadorParcial(ConstantesSistema.INDICADOR_USO_ATIVO);
    }

    SupressaoMotivo supressaoMotivo = new SupressaoMotivo();
    supressaoMotivo.setId(new Integer(motivoSupressao));

    FiltroLigacaoAgua filtroLigacaoAgua = new FiltroLigacaoAgua();
    filtroLigacaoAgua.adicionarCaminhoParaCarregamentoEntidade(
        FiltroLigacaoAgua.HIDROMETRO_INSTALACAO_HISTORICO);
    filtroLigacaoAgua.adicionarParametro(
        new ParametroSimples(FiltroLigacaoAgua.ID, imovel.getLigacaoAgua().getId()));

    Collection colecaoLigacaoAgua =
        fachada.pesquisar(filtroLigacaoAgua, LigacaoAgua.class.getName());

    filtroLigacaoAgua.adicionarCaminhoParaCarregamentoEntidade("hidrometroInstalacaoHistorico");

    LigacaoAgua ligacaoAgua = (LigacaoAgua) colecaoLigacaoAgua.iterator().next();

    if (ligacaoAgua.getHidrometroInstalacaoHistorico() != null) {
      FiltroHidrometroInstalacaoHistorico filtroHidrometroInstalacaoHistorico =
          new FiltroHidrometroInstalacaoHistorico();

      filtroHidrometroInstalacaoHistorico.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroInstalacaoHistorico.ID,
              ligacaoAgua.getHidrometroInstalacaoHistorico().getId()));

      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("imovel");

      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade(
          "hidrometroProtecao");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("hidrometro");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("rateioTipo");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("ligacaoAgua");
      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade(
          "hidrometroLocalInstalacao");

      filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("rateioTipo");

      Collection colecaoHidrometroInstalacaHistorico =
          fachada.pesquisar(
              filtroHidrometroInstalacaoHistorico, HidrometroInstalacaoHistorico.class.getName());

      HidrometroInstalacaoHistorico hidrometroInstalacaoHistorico =
          (HidrometroInstalacaoHistorico) colecaoHidrometroInstalacaHistorico.iterator().next();

      if (hidrometroInstalacaoHistorico != null && numeroLeituraSupressao != null) {

        if (numeroLeituraSupressao != null && !numeroLeituraSupressao.equals("")) {
          hidrometroInstalacaoHistorico.setNumeroLeituraSupressao(
              new Integer(numeroLeituraSupressao));
        }

        hidrometroInstalacaoHistorico.setUltimaAlteracao(new Date());

        ligacaoAgua.setHidrometroInstalacaoHistorico(hidrometroInstalacaoHistorico);
      }

      integracaoComercialHelper.setHidrometroInstalacaoHistorico(hidrometroInstalacaoHistorico);
    }
    ligacaoAgua.setDataSupressao(dataSupressao);
    if (numeroSeloSupressao != null && !numeroSeloSupressao.equals("")) {
      ligacaoAgua.setNumeroSeloSupressao(new Integer(numeroSeloSupressao));
    }

    // ligacaoAgua.setDataSupressao(ordemServico.getDataEncerramento());
    ligacaoAgua.setSupressaoTipo(supressaoTipo);
    ligacaoAgua.setSupressaoMotivo(supressaoMotivo);
    ligacaoAgua.setUltimaAlteracao(new Date());

    imovel.setLigacaoAguaSituacao(ligacaoAguaSituacao);
    imovel.setLigacaoAgua(ligacaoAgua);
    imovel.setUltimaAlteracao(new Date());

    BigDecimal valorAtual = new BigDecimal(0);

    if (ordemServico != null && efetuarSupressaoLigacaoAguaActionForm.getIdTipoDebito() != null) {

      ServicoNaoCobrancaMotivo servicoNaoCobrancaMotivo = null;

      ordemServico.setIndicadorComercialAtualizado(ConstantesSistema.SIM);

      if (efetuarSupressaoLigacaoAguaActionForm.getValorDebito() != null) {
        String valorDebito =
            efetuarSupressaoLigacaoAguaActionForm.getValorDebito().toString().replace(".", "");

        valorDebito = valorDebito.replace(",", ".");

        valorAtual = new BigDecimal(valorDebito);

        ordemServico.setValorAtual(valorAtual);
      }

      if (idServicoMotivoNaoCobranca != null && !idServicoMotivoNaoCobranca.equals("-1")) {
        servicoNaoCobrancaMotivo = new ServicoNaoCobrancaMotivo();
        servicoNaoCobrancaMotivo.setId(new Integer(idServicoMotivoNaoCobranca));
      }
      ordemServico.setServicoNaoCobrancaMotivo(servicoNaoCobrancaMotivo);

      if (valorPercentual != null) {
        ordemServico.setPercentualCobranca(
            new BigDecimal(efetuarSupressaoLigacaoAguaActionForm.getPercentualCobranca()));
      }

      ordemServico.setUltimaAlteracao(new Date());
    }

    String qtdParcelas = efetuarSupressaoLigacaoAguaActionForm.getQuantidadeParcelas();

    integracaoComercialHelper.setLigacaoAgua(ligacaoAgua);

    integracaoComercialHelper.setImovel(imovel);
    integracaoComercialHelper.setOrdemServico(ordemServico);
    integracaoComercialHelper.setQtdParcelas(qtdParcelas);

    if (efetuarSupressaoLigacaoAguaActionForm.getVeioEncerrarOS().equalsIgnoreCase("FALSE")) {
      integracaoComercialHelper.setVeioEncerrarOS(Boolean.FALSE);

      fachada.efetuarSupressaoLigacaoAgua(integracaoComercialHelper);
    } else {
      integracaoComercialHelper.setVeioEncerrarOS(Boolean.TRUE);
      sessao.setAttribute("integracaoComercialHelper", integracaoComercialHelper);

      if (sessao.getAttribute("semMenu") == null) {
        retorno = actionMapping.findForward("encerrarOrdemServicoAction");
      } else {
        retorno = actionMapping.findForward("encerrarOrdemServicoPopupAction");
      }
      sessao.removeAttribute("caminhoRetornoIntegracaoComercial");
    }
    if (retorno.getName().equalsIgnoreCase("telaSucesso")) {
      montarPaginaSucesso(
          httpServletRequest,
          "Supressão da Ligação de Água para o imóvel " + imovel.getId() + " efetuada com sucesso.",
          "Efetuar outra Supressão da Ligação de Água",
          "exibirEfetuarSupressaoLigacaoAguaAction.do?menu=sim",
          "exibirEfetuarSupressaoLigacaoAguaAction.do?idOrdemServico=" + idOrdemServico + "",
          "Atualizar Supressão de Ligação de Água");
    }

    return retorno;
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno =
        actionMapping.findForward("exibirInformarDadosGeracaoRelatorioConsulta");

    HttpSession sessao = httpServletRequest.getSession(false);

    Fachada fachada = Fachada.getInstancia();

    /** pega o tipo de resumo da sessao para direcionar o forward */
    String tipoResumo = (String) sessao.getAttribute("tipoResumo");

    if ("ANORMALIDADE".trim().equalsIgnoreCase(tipoResumo)) {
      retorno = actionMapping.findForward("informarConsultarResumoAnormalidade");
    } else if ("PENDENCIA".trim().equalsIgnoreCase(tipoResumo)) {
      retorno = actionMapping.findForward("informarConsultarResumoPendencia");
    } else if ("LIGACAO_EC0NOMIA".trim().equalsIgnoreCase(tipoResumo)) {
      retorno = actionMapping.findForward("informarConsultarResumoLigacoesEconomia");
    } else if ("ANALISE".trim().equalsIgnoreCase(tipoResumo)) {
      retorno = actionMapping.findForward("informarConsultarResumoAnaliseFaturamento");
    } else if ("COMPARATIVORESUMOS".trim().equalsIgnoreCase(tipoResumo)) {
      retorno =
          actionMapping.findForward("consultarComparativoResumosFaturamentoArrecadacaoPendencia");
    } else if ("ACAOCOBRANCA".trim().equalsIgnoreCase(tipoResumo)) {
      retorno = actionMapping.findForward("consultarResumoAcaoCobrancaParametros");

      // Monta o Status do Wizard
      StatusWizard statusWizard =
          new StatusWizard(
              "consultarResumoAcaoCobrancaWizardAction",
              "exibirInformarDadosGeracaoRelatorioConsultaAction",
              "cancelarConsultarResumoAcaoCobrancaAction",
              "exibirInformarDadosGeracaoRelatorioConsultaAction",
              "informarDadosGeracaoRelatorioConsultaAction.do");

      statusWizard.inserirNumeroPaginaCaminho(
          statusWizard
          .new StatusWizardItem(
              1,
              "ParametrosPrimeiraAbaA.gif",
              "ParametrosPrimeiraAbaD.gif",
              "exibirDadosGeracaoConsultaAction",
              ""));
      statusWizard.inserirNumeroPaginaCaminho(
          statusWizard
          .new StatusWizardItem(
              2,
              "UnidadeNegocioA.gif",
              "UnidadeNegocioD.gif",
              "exibirConsultarResumoAcaoCobrancaAction",
              ""));

      // manda o statusWizard para a sessão
      sessao.setAttribute("statusWizard", statusWizard);
    }

    InformarDadosGeracaoRelatorioConsultaActionForm
        informarDadosGeracaoRelatorioConsultaActionForm =
            (InformarDadosGeracaoRelatorioConsultaActionForm) actionForm;

    String mesAnoFaturamento =
        informarDadosGeracaoRelatorioConsultaActionForm.getMesAnoFaturamento();
    Integer opcaoTotalizacao =
        new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getOpcaoTotalizacao());

    Integer idFaturamentoGrupo = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getGrupoFaturamento() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getGrupoFaturamento().equals("")) {

      idFaturamentoGrupo =
          new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getGrupoFaturamento());
    }

    Integer idCobrancaGrupo = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getGrupoCobranca() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getGrupoCobranca().equals("")) {

      idCobrancaGrupo =
          new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getGrupoCobranca());
    }

    Integer idGerenciaRegional = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getGerencialRegional() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getGerencialRegional().equals("")) {

      idGerenciaRegional =
          new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getGerencialRegional());
    }

    Integer idUnidadeNegocio = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getUnidadeNegocio() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getUnidadeNegocio().equals("")) {

      idUnidadeNegocio =
          new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getUnidadeNegocio());
    }

    Integer idEloPolo = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getEloPolo() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getEloPolo().equals("")) {

      idEloPolo = new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getEloPolo());
    }

    Integer idLocalidade = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getLocalidade() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getLocalidade().equals("")) {

      idLocalidade = new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getLocalidade());
    }

    Integer idMunicipio = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getMunicipio() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getMunicipio().equals("")) {

      idMunicipio = new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getMunicipio());
    }

    Integer idSetorComercial = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getSetorComercial() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getSetorComercial().equals("")) {

      if (informarDadosGeracaoRelatorioConsultaActionForm.getIdSetorComercial() != null
          && !informarDadosGeracaoRelatorioConsultaActionForm.getIdSetorComercial().equals("")) {

        idSetorComercial =
            new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getIdSetorComercial());
      } else {

        FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();

        filtroSetorComercial.adicionarParametro(
            new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, idLocalidade));

        filtroSetorComercial.adicionarParametro(
            new ParametroSimples(
                FiltroSetorComercial.CODIGO_SETOR_COMERCIAL,
                informarDadosGeracaoRelatorioConsultaActionForm.getSetorComercial()));

        filtroSetorComercial.adicionarParametro(
            new ParametroSimples(
                FiltroSetorComercial.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO));

        Collection colecaoPesquisa =
            fachada.pesquisar(filtroSetorComercial, SetorComercial.class.getName());

        if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
          throw new ActionServletException("atencao.pesquisa_inexistente", null, "Setor Comercial");
        }

        SetorComercial setorComercial =
            (SetorComercial) Util.retonarObjetoDeColecao(colecaoPesquisa);

        idSetorComercial = setorComercial.getId();
      }
    }

    Integer nmQuadra = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getQuadra() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getQuadra().equals("")) {

      FiltroQuadra filtroQuadra = new FiltroQuadra();
      // filtroQuadra.adicionarCaminhoParaCarregamentoEntidade("bairro");

      filtroQuadra.adicionarParametro(
          new ParametroSimples(FiltroQuadra.ID_SETORCOMERCIAL, idSetorComercial));

      filtroQuadra.adicionarParametro(
          new ParametroSimples(
              FiltroQuadra.NUMERO_QUADRA,
              informarDadosGeracaoRelatorioConsultaActionForm.getQuadra()));

      filtroQuadra.adicionarParametro(
          new ParametroSimples(FiltroQuadra.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO));

      Collection colecaoPesquisa = fachada.pesquisar(filtroQuadra, Quadra.class.getName());

      if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
        throw new ActionServletException("atencao.pesquisa_inexistente", null, "Quadra");
      }

      nmQuadra = new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getQuadra());
    }

    String[] imovelPerfil = informarDadosGeracaoRelatorioConsultaActionForm.getPerfilImovel();
    String[] ligacaoAguaSituacao =
        informarDadosGeracaoRelatorioConsultaActionForm.getSituacaoLigacaoAgua();
    String[] ligacaoEsgotoSituacao =
        informarDadosGeracaoRelatorioConsultaActionForm.getSituacaoLigacaoEsgoto();
    String[] categoria = informarDadosGeracaoRelatorioConsultaActionForm.getCategoria();
    String[] esferaPoder = informarDadosGeracaoRelatorioConsultaActionForm.getEsferaPoder();

    Integer tipoAnaliseFaturamento = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getTipoAnaliseFaturamento() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm
            .getTipoAnaliseFaturamento()
            .equals("")) {

      tipoAnaliseFaturamento =
          new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getTipoAnaliseFaturamento());
    }

    /** [RR2011071026] Autor: Paulo Diniz Data: 21/07/2011 Resumo da Análise do Faturamento */
    Integer idRota = null;
    if (informarDadosGeracaoRelatorioConsultaActionForm.getIdRota() != null
        && !informarDadosGeracaoRelatorioConsultaActionForm.getIdRota().equals("")) {
      idRota = new Integer(informarDadosGeracaoRelatorioConsultaActionForm.getIdRota());
    }

    // Tipo de Relatório
    Integer tipoRelatorio = null;
    if (httpServletRequest.getAttribute("tipoRelatorio") != null) {
      tipoRelatorio = (Integer) httpServletRequest.getAttribute("tipoRelatorio");
    }

    // [UC0304] Informar Dados para Geração de Relatório ou Consulta
    InformarDadosGeracaoRelatorioConsultaHelper informarDadosGeracaoRelatorioConsultaHelper =
        fachada.informarDadosGeracaoRelatorioConsulta(
            mesAnoFaturamento,
            opcaoTotalizacao,
            idFaturamentoGrupo,
            idCobrancaGrupo,
            idGerenciaRegional,
            idEloPolo,
            idLocalidade,
            idSetorComercial,
            nmQuadra,
            imovelPerfil,
            ligacaoAguaSituacao,
            ligacaoEsgotoSituacao,
            categoria,
            esferaPoder,
            tipoAnaliseFaturamento,
            tipoRelatorio,
            idUnidadeNegocio,
            idMunicipio,
            idRota);

    sessao.setAttribute(
        "informarDadosGeracaoRelatorioConsultaHelper", informarDadosGeracaoRelatorioConsultaHelper);

    ImovelPerfil imovelPerfilColecao = new ImovelPerfil();
    imovelPerfilColecao.setId(-1);

    Collection colecaoImovelPerfil = new ArrayList();

    int i = 0;

    if (imovelPerfil != null) {
      imovelPerfilColecao.setDescricao("OPÇÕES SELECIONADAS");
      colecaoImovelPerfil.add(imovelPerfilColecao);
      FiltroImovelPerfil filtroImovelPerfil = new FiltroImovelPerfil();

      for (i = 0; i < imovelPerfil.length; i++) {
        if (!imovelPerfil[i].equals("")
            && !imovelPerfil[i].equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {

          if (i + 1 < imovelPerfil.length) {
            filtroImovelPerfil.adicionarParametro(
                new ParametroSimples(
                    FiltroImovelPerfil.ID,
                    imovelPerfil[i],
                    ConectorOr.CONECTOR_OR,
                    imovelPerfil.length));

          } else {
            filtroImovelPerfil.adicionarParametro(
                new ParametroSimples(FiltroImovelPerfil.ID, imovelPerfil[i]));
          }
        }
      }

      filtroImovelPerfil.setCampoOrderBy(FiltroImovelPerfil.DESCRICAO);

      Collection colecaoImovelPerfilPesquisa =
          fachada.pesquisar(filtroImovelPerfil, ImovelPerfil.class.getName());

      if (colecaoImovelPerfilPesquisa != null && !colecaoImovelPerfilPesquisa.isEmpty()) {
        colecaoImovelPerfil.addAll(colecaoImovelPerfilPesquisa);
      }
    } else {
      imovelPerfilColecao.setDescricao("TODOS");
      colecaoImovelPerfil.add(imovelPerfilColecao);
    }

    sessao.setAttribute("colecaoImovelPerfilResultado", colecaoImovelPerfil);

    LigacaoAguaSituacao ligacaoAguaSituacaoColecao = new LigacaoAguaSituacao();
    ligacaoAguaSituacaoColecao.setId(-1);

    Collection colecaoLigacaoAguaSituacao = new ArrayList();

    i = 0;

    if (ligacaoAguaSituacao != null) {
      ligacaoAguaSituacaoColecao.setDescricao("OPÇÕES SELECIONADAS");
      colecaoLigacaoAguaSituacao.add(ligacaoAguaSituacaoColecao);
      FiltroLigacaoAguaSituacao filtroLigacaoAguaSituacao = new FiltroLigacaoAguaSituacao();

      for (i = 0; i < ligacaoAguaSituacao.length; i++) {
        if (!ligacaoAguaSituacao[i].equals("")
            && !ligacaoAguaSituacao[i].equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {

          if (i + 1 < ligacaoAguaSituacao.length) {
            filtroLigacaoAguaSituacao.adicionarParametro(
                new ParametroSimples(
                    FiltroLigacaoAguaSituacao.ID,
                    ligacaoAguaSituacao[i],
                    ConectorOr.CONECTOR_OR,
                    ligacaoAguaSituacao.length));

          } else {
            filtroLigacaoAguaSituacao.adicionarParametro(
                new ParametroSimples(FiltroLigacaoAguaSituacao.ID, ligacaoAguaSituacao[i]));
          }
        }
      }

      filtroLigacaoAguaSituacao.setCampoOrderBy(FiltroLigacaoAguaSituacao.DESCRICAO);

      Collection colecaoLigacaoAguaSituacaoPesquisa =
          fachada.pesquisar(filtroLigacaoAguaSituacao, LigacaoAguaSituacao.class.getName());

      if (colecaoLigacaoAguaSituacaoPesquisa != null
          && !colecaoLigacaoAguaSituacaoPesquisa.isEmpty()) {
        colecaoLigacaoAguaSituacao.addAll(colecaoLigacaoAguaSituacaoPesquisa);
      }
    } else {
      ligacaoAguaSituacaoColecao.setDescricao("TODOS");
      colecaoLigacaoAguaSituacao.add(ligacaoAguaSituacaoColecao);
    }

    sessao.setAttribute("colecaoLigacaoAguaSituacaoResultado", colecaoLigacaoAguaSituacao);

    LigacaoEsgotoSituacao ligacaoEsgotoSituacaoColecao = new LigacaoEsgotoSituacao();
    ligacaoAguaSituacaoColecao.setId(-1);

    Collection colecaoLigacaoEsgotoSituacao = new ArrayList();

    i = 0;

    if (ligacaoEsgotoSituacao != null) {
      ligacaoEsgotoSituacaoColecao.setDescricao("OPÇÕES SELECIONADAS");
      colecaoLigacaoEsgotoSituacao.add(ligacaoEsgotoSituacaoColecao);
      FiltroLigacaoEsgotoSituacao filtroLigacaoEsgotoSituacao = new FiltroLigacaoEsgotoSituacao();

      for (i = 0; i < ligacaoEsgotoSituacao.length; i++) {
        if (!ligacaoEsgotoSituacao[i].equals("")
            && !ligacaoEsgotoSituacao[i].equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {

          if (i + 1 < ligacaoEsgotoSituacao.length) {
            filtroLigacaoEsgotoSituacao.adicionarParametro(
                new ParametroSimples(
                    FiltroLigacaoEsgotoSituacao.ID,
                    ligacaoEsgotoSituacao[i],
                    ConectorOr.CONECTOR_OR,
                    ligacaoEsgotoSituacao.length));

          } else {
            filtroLigacaoEsgotoSituacao.adicionarParametro(
                new ParametroSimples(FiltroLigacaoEsgotoSituacao.ID, ligacaoEsgotoSituacao[i]));
          }
        }
      }

      filtroLigacaoEsgotoSituacao.setCampoOrderBy(FiltroLigacaoEsgotoSituacao.DESCRICAO);

      Collection colecaoLigacaoEsgotoSituacaoPesquisa =
          fachada.pesquisar(filtroLigacaoEsgotoSituacao, LigacaoEsgotoSituacao.class.getName());

      if (colecaoLigacaoEsgotoSituacaoPesquisa != null
          && !colecaoLigacaoEsgotoSituacaoPesquisa.isEmpty()) {
        colecaoLigacaoEsgotoSituacao.addAll(colecaoLigacaoEsgotoSituacaoPesquisa);
      }
    } else {
      ligacaoEsgotoSituacaoColecao.setDescricao("TODOS");
      colecaoLigacaoEsgotoSituacao.add(ligacaoEsgotoSituacaoColecao);
    }

    sessao.setAttribute("colecaoLigacaoEsgotoSituacaoResultado", colecaoLigacaoEsgotoSituacao);

    Categoria categoriaColecao = new Categoria();
    categoriaColecao.setId(-1);

    Collection colecaoCategoria = new ArrayList();

    i = 0;

    if (categoria != null) {
      categoriaColecao.setDescricao("OPÇÕES SELECIONADAS");
      colecaoCategoria.add(categoriaColecao);
      FiltroCategoria filtroCategoria = new FiltroCategoria();

      for (i = 0; i < categoria.length; i++) {
        if (!categoria[i].equals("")
            && !categoria[i].equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {

          if (i + 1 < categoria.length) {
            filtroCategoria.adicionarParametro(
                new ParametroSimples(
                    FiltroCategoria.CODIGO,
                    categoria[i],
                    ConectorOr.CONECTOR_OR,
                    categoria.length));

          } else {
            filtroCategoria.adicionarParametro(
                new ParametroSimples(FiltroCategoria.CODIGO, categoria[i]));
          }
        }
      }

      filtroCategoria.setCampoOrderBy(FiltroCategoria.DESCRICAO);

      Collection colecaoCategoriaPesquisa =
          fachada.pesquisar(filtroCategoria, Categoria.class.getName());

      if (colecaoCategoriaPesquisa != null && !colecaoCategoriaPesquisa.isEmpty()) {
        colecaoCategoria.addAll(colecaoCategoriaPesquisa);
      }
    } else {
      categoriaColecao.setDescricao("TODOS");
      colecaoCategoria.add(categoriaColecao);
    }

    sessao.setAttribute("colecaoCategoriaResultado", colecaoCategoria);

    EsferaPoder esferaPoderColecao = new EsferaPoder();
    esferaPoderColecao.setId(-1);

    Collection colecaoEsferaPoder = new ArrayList();

    i = 0;

    if (esferaPoder != null) {
      esferaPoderColecao.setDescricao("OPÇÕES SELECIONADAS");
      colecaoEsferaPoder.add(esferaPoderColecao);
      FiltroEsferaPoder filtroEsferaPoder = new FiltroEsferaPoder();

      for (i = 0; i < esferaPoder.length; i++) {
        if (!esferaPoder[i].equals("")
            && !esferaPoder[i].equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {

          if (i + 1 < esferaPoder.length) {
            filtroEsferaPoder.adicionarParametro(
                new ParametroSimples(
                    FiltroEsferaPoder.ID,
                    esferaPoder[i],
                    ConectorOr.CONECTOR_OR,
                    esferaPoder.length));

          } else {
            filtroEsferaPoder.adicionarParametro(
                new ParametroSimples(FiltroEsferaPoder.ID, esferaPoder[i]));
          }
        }
      }

      filtroEsferaPoder.setCampoOrderBy(FiltroEsferaPoder.DESCRICAO);

      Collection colecaoEsferaPoderPesquisa =
          fachada.pesquisar(filtroEsferaPoder, EsferaPoder.class.getName());

      if (colecaoEsferaPoderPesquisa != null && !colecaoEsferaPoderPesquisa.isEmpty()) {
        colecaoEsferaPoder.addAll(colecaoEsferaPoderPesquisa);
      }
    } else {
      esferaPoderColecao.setDescricao("TODOS");
      colecaoEsferaPoder.add(esferaPoderColecao);
    }

    sessao.setAttribute("colecaoEsferaPoderResultado", colecaoEsferaPoder);

    return retorno;
  }