/**
   * < <Descrição do método>>
   *
   * @param actionMapping Descrição do parâmetro
   * @param actionForm Descrição do parâmetro
   * @param httpServletRequest Descrição do parâmetro
   * @param httpServletResponse Descrição do parâmetro
   * @return Descrição do retorno
   */
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    // Obtém o action form
    HidrometroActionForm hidrometroActionForm = (HidrometroActionForm) actionForm;

    Collection colecaoHidrometroCapacidade = null;

    // Seta a ação de retorno
    ActionForward retorno = actionMapping.findForward("inserirHidrometro");

    // Obtém a sessão
    HttpSession sessao = httpServletRequest.getSession(false);

    // Caso o form esteja na sessão é removido
    // sessao.removeAttribute("HidrometroActionForm");

    // Obtém a facahda
    Fachada fachada = Fachada.getInstancia();

    // Obtém o objetoCosulta vindo na sessão
    String objetoConsulta = (String) httpServletRequest.getParameter("objetoConsulta");

    // Chamou a funcionalidade pela 1ª vez.
    // O usuário pode chamar o filtro de hidrômetro que carrega objetos na
    // sessão
    // e depois chamar o inserir hidrômetro. Necessário remover os objetos
    // da sessão deixados pelo filtro.
    String limpaSessao = (String) httpServletRequest.getParameter("limpaSessao");

    if (limpaSessao != null
        && !limpaSessao.trim().equalsIgnoreCase("")
        && (Integer.parseInt(limpaSessao)) == 1) {

      // remove objetos da sessão vindos do filtro
      sessao.removeAttribute("colecaoHidrometroClasseMetrologica");
      sessao.removeAttribute("colecaoHidrometroMarca");
      sessao.removeAttribute("colecaoHidrometroDiametro");
      sessao.removeAttribute("colecaoHidrometroCapacidade");
      sessao.removeAttribute("colecaoHidrometroTipo");
      sessao.removeAttribute("colecaoHidrometroRelojoaria");
    }

    // Verifica se o objeto é diferente de nulo
    if (objetoConsulta != null
        && !objetoConsulta.trim().equalsIgnoreCase("")
        && (Integer.parseInt(objetoConsulta)) == 1) {

      // Filtro para obter o local de armazenagem ativo de id informado
      FiltroHidrometroLocalArmazenagem filtroHidrometroLocalArmazenagem =
          new FiltroHidrometroLocalArmazenagem();

      filtroHidrometroLocalArmazenagem.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroLocalArmazenagem.ID,
              new Integer(hidrometroActionForm.getIdLocalArmazenagem()),
              ParametroSimples.CONECTOR_AND));
      filtroHidrometroLocalArmazenagem.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroLocalArmazenagem.INDICADOR_USO,
              ConstantesSistema.INDICADOR_USO_ATIVO));

      // Pesquisa de acordo com os parâmetros informados no filtro
      Collection colecaoHidrometroLocalArmazenagem =
          fachada.pesquisar(
              filtroHidrometroLocalArmazenagem, HidrometroLocalArmazenagem.class.getName());

      // Verifica se a pesquisa retornou algum objeto para a coleção
      if (colecaoHidrometroLocalArmazenagem != null
          && !colecaoHidrometroLocalArmazenagem.isEmpty()) {

        // Obtém o objeto da coleção pesquisada
        HidrometroLocalArmazenagem hidrometroLocalArmazenagem =
            (HidrometroLocalArmazenagem)
                Util.retonarObjetoDeColecao(colecaoHidrometroLocalArmazenagem);

        // Exibe o código e a descrição pesquisa na página
        httpServletRequest.setAttribute("corLocalArmazenagem", "valor");
        hidrometroActionForm.setIdLocalArmazenagem(hidrometroLocalArmazenagem.getId().toString());
        hidrometroActionForm.setLocalArmazenagemDescricao(
            hidrometroLocalArmazenagem.getDescricao());

      } else {

        // Exibe mensagem de código inexiste e limpa o campo de código
        httpServletRequest.setAttribute("corLocalArmazenagem", "exception");
        hidrometroActionForm.setIdLocalArmazenagem("");
        hidrometroActionForm.setLocalArmazenagemDescricao("Local de Armazenagem Inexistente");
      }

    } else if (sessao.getAttribute("colecaoHidrometroClasseMetrologica") == null
        && sessao.getAttribute("colecaoHidrometroMarca") == null
        && sessao.getAttribute("colecaoHidrometroDiametro") == null
        && sessao.getAttribute("colecaoHidrometroCapacidade") == null
        && sessao.getAttribute("colecaoHidrometroTipo") == null
        && sessao.getAttribute("colecaoHidrometroRelojoaria") == null) {

      // Remove objeto da sessão
      sessao.removeAttribute("HidrometroActionForm");

      // Filtro de hidrômetro classe metrológica para obter todas as
      // classes metrológicas ativas
      FiltroHidrometroClasseMetrologica filtroHidrometroClasseMetrologica =
          new FiltroHidrometroClasseMetrologica();

      filtroHidrometroClasseMetrologica.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroClasseMetrologica.INDICADOR_USO,
              ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroClasseMetrologica.setCampoOrderBy(
          FiltroHidrometroClasseMetrologica.DESCRICAO);

      // Pesquisa a coleção de classe metrológica
      Collection colecaoHidrometroClasseMetrologica =
          fachada.pesquisar(
              filtroHidrometroClasseMetrologica, HidrometroClasseMetrologica.class.getName());

      // Filtro de hidrômetro marca para obter todas as marcas de
      // hidrômetros ativas
      FiltroHidrometroMarca filtroHidrometroMarca = new FiltroHidrometroMarca();

      filtroHidrometroMarca.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroMarca.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroMarca.setCampoOrderBy(FiltroHidrometroMarca.DESCRICAO);

      // Pesquisa a coleção de hidrômetro marca
      Collection colecaoHidrometroMarca =
          fachada.pesquisar(filtroHidrometroMarca, HidrometroMarca.class.getName());

      // Filtro de hidrômetro diâmetro para obter todos os diâmetros de
      // hidrômetros ativos
      FiltroHidrometroDiametro filtroHidrometroDiametro = new FiltroHidrometroDiametro();

      filtroHidrometroDiametro.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroDiametro.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroDiametro.setCampoOrderBy(FiltroHidrometroDiametro.NUMERO_ORDEM);

      // Pesquisa a coleção de hidrômetro capacidade
      Collection colecaoHidrometroDiametro =
          fachada.pesquisar(filtroHidrometroDiametro, HidrometroDiametro.class.getName());

      // Filtro de hidrômetro capacidade para obter todos as capacidade de
      // hidrômetros ativas
      FiltroHidrometroCapacidade filtroHidrometroCapacidade = new FiltroHidrometroCapacidade();

      filtroHidrometroCapacidade.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroCapacidade.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroCapacidade.setCampoOrderBy(FiltroHidrometroCapacidade.NUMERO_ORDEM);

      // Pesquisa a coleção de hidrômetro capacidade
      colecaoHidrometroCapacidade =
          fachada.pesquisar(filtroHidrometroCapacidade, HidrometroCapacidade.class.getName());

      // Filtro de hidrômetro tipo para obter todos os tipos de
      // hidrômetros ativos
      FiltroHidrometroTipo filtroHidrometroTipo = new FiltroHidrometroTipo();

      filtroHidrometroTipo.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroTipo.setCampoOrderBy(FiltroHidrometroTipo.DESCRICAO);

      // Pesquisa a coleção de hidrômetro tipo
      Collection colecaoHidrometroTipo =
          fachada.pesquisar(filtroHidrometroTipo, HidrometroTipo.class.getName());

      // Filtro de hidrômetro relojoaria para obter todos os tipos de
      // hidrômetros relojoaria ativos
      FiltroHidrometroRelojoaria filtroHidrometroRelojoaria = new FiltroHidrometroRelojoaria();

      filtroHidrometroRelojoaria.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroRelojoaria.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      filtroHidrometroRelojoaria.setCampoOrderBy(FiltroHidrometroRelojoaria.DESCRICAO);

      // Pesquisa a coleção de hidrômetro tipo
      Collection colecaoHidrometroRelojoaria =
          fachada.pesquisar(filtroHidrometroRelojoaria, HidrometroRelojoaria.class.getName());

      hidrometroActionForm.setIndicadorMacromedidor("" + ConstantesSistema.NUMERO_NAO_INFORMADO);

      // Envia as coleções na sessão
      sessao.setAttribute("colecaoHidrometroClasseMetrologica", colecaoHidrometroClasseMetrologica);
      sessao.setAttribute("colecaoHidrometroMarca", colecaoHidrometroMarca);
      sessao.setAttribute("colecaoHidrometroDiametro", colecaoHidrometroDiametro);
      sessao.setAttribute("colecaoHidrometroCapacidade", colecaoHidrometroCapacidade);
      sessao.setAttribute("colecaoHidrometroTipo", colecaoHidrometroTipo);
      sessao.setAttribute("colecaoHidrometroRelojoaria", colecaoHidrometroRelojoaria);
    }

    // Filtro de hidrômetro capacidade para obter capacidade de hidrômetro
    // de acordo com o id
    FiltroHidrometroCapacidade filtroHidrometroCapacidadeNumeroDigitos =
        new FiltroHidrometroCapacidade();

    // Verifica se a coleção de hidrometro capacidade é diferente de null
    if (colecaoHidrometroCapacidade != null && !colecaoHidrometroCapacidade.isEmpty()) {

      // Obtém o primeiro objeto da collection
      Iterator colecaoHidrometroCapacidadeIterator = colecaoHidrometroCapacidade.iterator();
      HidrometroCapacidade hidrometroCapacidade =
          (HidrometroCapacidade) colecaoHidrometroCapacidadeIterator.next();

      // Filtra pelo primeiro objeto da collection
      filtroHidrometroCapacidadeNumeroDigitos.adicionarParametro(
          new ParametroSimples(FiltroHidrometroCapacidade.ID, hidrometroCapacidade.getId()));
    } else {
      // Filtra pelo id selecionado no combobox
      filtroHidrometroCapacidadeNumeroDigitos.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroCapacidade.ID,
              new Integer(hidrometroActionForm.getIdHidrometroCapacidade())));
    }

    // Pesquisa o número de dígitos de acordo com o filtro
    Collection colecaoHidrometroCapacidadeNumeroDigitos =
        fachada.pesquisar(
            filtroHidrometroCapacidadeNumeroDigitos, HidrometroCapacidade.class.getName());

    if (colecaoHidrometroCapacidadeNumeroDigitos != null
        && !colecaoHidrometroCapacidadeNumeroDigitos.isEmpty()) {
      // Retorna o objeto pesquisado
      HidrometroCapacidade hidrometroCapacidadeNumeroDigitos =
          (HidrometroCapacidade)
              Util.retonarObjetoDeColecao(colecaoHidrometroCapacidadeNumeroDigitos);
      Integer leituraMinimo = 0;
      Integer leituraMaximo = 0;
      // Obtém as leituras
      if (!hidrometroCapacidadeNumeroDigitos.getLeituraMinimo().equals("")) {
        leituraMinimo =
            new Integer(hidrometroCapacidadeNumeroDigitos.getLeituraMinimo().toString());
      }
      if (!hidrometroCapacidadeNumeroDigitos.getLeituraMaximo().equals("")) {
        leituraMaximo =
            new Integer(hidrometroCapacidadeNumeroDigitos.getLeituraMaximo().toString());
      }
      // Obtém a quantidade da diferença
      int quantidade = (leituraMaximo.intValue() - leituraMinimo.intValue()) + 1;
      Collection colecaoIntervalo = new ArrayList();

      // Adiciona a quantidade da diferença na coleção
      for (int i = 0; i < quantidade; i++) {

        colecaoIntervalo.add(new Integer(leituraMinimo.intValue() + i));
      }
      sessao.setAttribute("colecaoIntervalo", colecaoIntervalo);
    }

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

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

    HttpSession sessao = httpServletRequest.getSession(false);

    Fachada fachada = Fachada.getInstancia();

    FiltrarLocalArmazenagemHidrometroActionForm filtrarLocalArmazenagemHidrometroActionForm =
        (FiltrarLocalArmazenagemHidrometroActionForm) actionForm;

    FiltroHidrometroLocalArmazenagem filtroHidrometroLocalArmazenagem =
        new FiltroHidrometroLocalArmazenagem();

    boolean peloMenosUmParametroInformado = false;

    String id = filtrarLocalArmazenagemHidrometroActionForm.getId();
    String descricao = filtrarLocalArmazenagemHidrometroActionForm.getDescricao();
    String indicadorUso = filtrarLocalArmazenagemHidrometroActionForm.getIndicadorUso();
    String indicadorOficina = filtrarLocalArmazenagemHidrometroActionForm.getIndicadorOficina();
    String descricaoAbreviada = filtrarLocalArmazenagemHidrometroActionForm.getDescricaoAbreviada();
    String tipoPesquisa = filtrarLocalArmazenagemHidrometroActionForm.getTipoPesquisa();

    //		Indicador Atualizar
    String indicadorAtualizar = httpServletRequest.getParameter("indicadorAtualizar");

    if (indicadorAtualizar != null && !indicadorAtualizar.equals("")) {
      sessao.setAttribute("indicadorAtualizar", indicadorAtualizar);
    } else {
      sessao.removeAttribute("indicadorAtualizar");
    }

    // ID
    if (id != null && !id.trim().equals("")) {
      boolean achou = fachada.verificarExistenciaAgente(new Integer(id));
      if (achou) {
        peloMenosUmParametroInformado = true;

        filtroHidrometroLocalArmazenagem.adicionarParametro(
            new ParametroSimples(FiltroHidrometroLocalArmazenagem.ID, id));
      }
    }
    // Descricao
    if (descricao != null && !descricao.trim().equalsIgnoreCase("")) {
      peloMenosUmParametroInformado = true;
      if (tipoPesquisa != null
          && tipoPesquisa.equals(ConstantesSistema.TIPO_PESQUISA_COMPLETA.toString())) {

        filtroHidrometroLocalArmazenagem.adicionarParametro(
            new ComparacaoTextoCompleto(FiltroHidrometroLocalArmazenagem.DESCRICAO, descricao));
      } else {

        filtroHidrometroLocalArmazenagem.adicionarParametro(
            new ComparacaoTexto(FiltroHidrometroLocalArmazenagem.DESCRICAO, descricao));
      }
    }
    // Descricao Abreviada

    if (descricaoAbreviada != null && !descricaoAbreviada.trim().equalsIgnoreCase("")) {
      peloMenosUmParametroInformado = true;
      if (tipoPesquisa != null
          && tipoPesquisa.equals(ConstantesSistema.TIPO_PESQUISA_COMPLETA.toString())) {

        filtroHidrometroLocalArmazenagem.adicionarParametro(
            new ComparacaoTextoCompleto(
                FiltroHidrometroLocalArmazenagem.DESCRICAO_ABREVIADA, descricaoAbreviada));
      } else {

        filtroHidrometroLocalArmazenagem.adicionarParametro(
            new ComparacaoTexto(
                FiltroHidrometroLocalArmazenagem.DESCRICAO_ABREVIADA, descricaoAbreviada));
      }
    }

    // Indicador uso
    if (indicadorUso != null && !indicadorUso.trim().equals("")) {
      peloMenosUmParametroInformado = true;
      filtroHidrometroLocalArmazenagem.adicionarParametro(
          new ParametroSimples(FiltroHidrometroLocalArmazenagem.INDICADOR_USO, indicadorUso));
    }

    // Indicador de Oficina
    if (indicadorOficina != null && !indicadorOficina.trim().equals("")) {
      peloMenosUmParametroInformado = true;
      filtroHidrometroLocalArmazenagem.adicionarParametro(
          new ParametroSimples(
              FiltroHidrometroLocalArmazenagem.INDICADOR_OFICINA, indicadorOficina));
    }

    Collection<HidrometroLocalArmazenagem> colecaoHidrometroLocalArmazenagem =
        fachada.pesquisar(
            filtroHidrometroLocalArmazenagem, HidrometroLocalArmazenagem.class.getName());

    // Verificar a existencia de um Grupo de cadastro
    if (colecaoHidrometroLocalArmazenagem.isEmpty()) {
      throw new ActionServletException(
          "atencao.pesquisa_inexistente", null, "Local de Armazenagem do Hidrômetro");
    }

    // Filtragem sem parametros
    if (!peloMenosUmParametroInformado == true) {
      throw new ActionServletException("atencao.filtro.nenhum_parametro_informado");
    }

    // Pesquisa sem registros

    if (colecaoHidrometroLocalArmazenagem == null || colecaoHidrometroLocalArmazenagem.isEmpty()) {
      throw new ActionServletException(
          "atencao.pesquisa.nenhumresultado", null, "HidrometroLocalArmazenagem");
    } else {
      httpServletRequest.setAttribute(
          "colecaoHidrometroLocalArmazenagem", colecaoHidrometroLocalArmazenagem);
      HidrometroLocalArmazenagem hidrometroLocalArmazenagem = new HidrometroLocalArmazenagem();
      hidrometroLocalArmazenagem =
          (HidrometroLocalArmazenagem)
              Util.retonarObjetoDeColecao(colecaoHidrometroLocalArmazenagem);
      String idRegistroAtualizar = hidrometroLocalArmazenagem.getId().toString();
      sessao.setAttribute("idRegistroAtualizar", idRegistroAtualizar);
    }

    sessao.setAttribute("filtroHidrometroLocalArmazenagem", filtroHidrometroLocalArmazenagem);

    httpServletRequest.setAttribute(
        "filtroHidrometroLocalArmazenagem", filtroHidrometroLocalArmazenagem);

    return retorno;
  }