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

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

    HttpSession sessao = httpServletRequest.getSession(false);

    Fachada fachada = Fachada.getInstancia();

    FiltrarHidrometroDiametroActionForm filtrarHidrometroDiametroActionForm =
        (FiltrarHidrometroDiametroActionForm) actionForm;

    FiltroHidrometroDiametro filtroHidrometroDiametro = new FiltroHidrometroDiametro();

    boolean peloMenosUmParametroInformado = false;

    String id = filtrarHidrometroDiametroActionForm.getId();
    String descricao = filtrarHidrometroDiametroActionForm.getDescricao();
    String descricaoAbreviada = filtrarHidrometroDiametroActionForm.getDescricaoAbreviada();
    String numeroOrdem = filtrarHidrometroDiametroActionForm.getNumeroOrdem();
    String indicadorUso = filtrarHidrometroDiametroActionForm.getIndicadorUso();
    String tipoPesquisa = filtrarHidrometroDiametroActionForm.getTipoPesquisa();

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

        filtroHidrometroDiametro.adicionarParametro(
            new ComparacaoTextoCompleto(FiltroHidrometroDiametro.DESCRICAO, descricao));
      } else {

        filtroHidrometroDiametro.adicionarParametro(
            new ComparacaoTexto(FiltroHidrometroDiametro.DESCRICAO, descricao));
      }
    }

    // Descricao Abreviada
    if (descricaoAbreviada != null && !descricaoAbreviada.trim().equalsIgnoreCase("")) {

      peloMenosUmParametroInformado = true;
      filtroHidrometroDiametro.adicionarParametro(
          new ComparacaoTextoCompleto(
              FiltroHidrometroDiametro.DESCRICAO_ABREVIADA, descricaoAbreviada));
    } else {

      filtroHidrometroDiametro.adicionarParametro(
          new ComparacaoTexto(FiltroHidrometroDiametro.DESCRICAO_ABREVIADA, descricaoAbreviada));
    }

    // Número da Ordem
    if (numeroOrdem != null && !numeroOrdem.trim().equalsIgnoreCase("")) {

      peloMenosUmParametroInformado = true;
      filtroHidrometroDiametro.adicionarParametro(
          new ParametroSimples(FiltroHidrometroDiametro.NUMERO_ORDEM, numeroOrdem));
    }

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

    Collection colecaoHidrometroDiametro =
        fachada.pesquisar(filtroHidrometroDiametro, HidrometroDiametro.class.getName());

    // Verificar a existencia de um Diametro do Hidrometro
    if (colecaoHidrometroDiametro.isEmpty()) {
      throw new ActionServletException(
          "atencao.pesquisa_inexistente", null, "Diâmetro do Hidrômetro");
    }

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

    // Pesquisa sem registros

    if (colecaoHidrometroDiametro == null || colecaoHidrometroDiametro.isEmpty()) {
      throw new ActionServletException(
          "atencao.pesquisa.nenhumresultado", null, "Diâmetro do Hidrômetro");
    } else {
      httpServletRequest.setAttribute("colecaoHidrometroDiametro", colecaoHidrometroDiametro);
      HidrometroDiametro hidrometroDiametro = new HidrometroDiametro();
      hidrometroDiametro =
          (HidrometroDiametro) Util.retonarObjetoDeColecao(colecaoHidrometroDiametro);
      String idRegistroAtualizacao = hidrometroDiametro.getId().toString();
      sessao.setAttribute("idRegistroAtualizacao", idRegistroAtualizacao);
    }

    sessao.setAttribute("filtroHidrometroDiametro", filtroHidrometroDiametro);

    httpServletRequest.setAttribute("filtroHidrometroDiametro", filtroHidrometroDiametro);

    return retorno;
  }
  /**
   * < <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;
  }
  /**
   * < <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) {

    // Seta o caminho do retorno
    ActionForward retorno = actionMapping.findForward("exibirManterHidrometroDiametro");

    Collection colecaoHidrometroDiametro = new ArrayList();

    // Mudar isso quando for implementado o esquema de segurança
    HttpSession session = httpServletRequest.getSession(false);

    FiltroHidrometroDiametro filtroHidrometroDiametro =
        (FiltroHidrometroDiametro) session.getAttribute("filtroHidrometroDiametro");

    filtroHidrometroDiametro.setCampoOrderBy(
        FiltroHidrometroDiametro.ID,
        FiltroHidrometroDiametro.DESCRICAO,
        FiltroHidrometroDiametro.DESCRICAO_ABREVIADA);

    if (filtroHidrometroDiametro != null && !filtroHidrometroDiametro.equals("")) {

      Map resultado =
          controlarPaginacao(
              httpServletRequest,
              retorno,
              filtroHidrometroDiametro,
              HidrometroDiametro.class.getName());
      colecaoHidrometroDiametro = (Collection) resultado.get("colecaoRetorno");
      retorno = (ActionForward) resultado.get("destinoActionForward");
    }

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

      if (colecaoHidrometroDiametro.size() == 1
          && (httpServletRequest.getParameter("page.offset") == null
              || httpServletRequest.getParameter("page.offset").equals("1"))) {

        if (httpServletRequest.getParameter("indicadorAtualizar") != null) {
          // Caso o indicador ATUALIZAR esteja marcado, altera o caminho do retorno
          retorno = actionMapping.findForward("exibirAtualizarHidrometroDiametro");

          HidrometroDiametro hidrometroDiametro =
              (HidrometroDiametro) colecaoHidrometroDiametro.iterator().next();

          session.setAttribute("hidrometroDiametro", hidrometroDiametro);

        } else {

          httpServletRequest.setAttribute("colecaoHidrometroDiametro", colecaoHidrometroDiametro);
        }

      } else {

        httpServletRequest.setAttribute("colecaoHidrometroDiametro", colecaoHidrometroDiametro);
      }

    } else {
      // Caso não haja nenhum resultado da pesquisa
      throw new ActionServletException("atencao.pesquisa.nenhumresultado");
    }

    return retorno;
  }