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

    // Seta o mapeamento de retorno
    ActionForward retorno =
        actionMapping.findForward("exibirGerarRelatorioLogradourosPorMunicipio");

    Fachada fachada = Fachada.getInstancia();

    // Mudar isso quando tiver esquema de segurança
    HttpSession sessao = httpServletRequest.getSession(false);

    GerarRelatorioLogradouroPorMunicipioActionForm gerarLogradouroActionForm =
        (GerarRelatorioLogradouroPorMunicipioActionForm) actionForm;

    /*
     * Removendo o bairro selecionado da sessão
     */
    if (httpServletRequest.getParameter("remover") != null
        && httpServletRequest.getParameter("remover").equals("s")) {

      String idBairro = httpServletRequest.getParameter("idBairro");

      if (idBairro != null
          && !idBairro.equals("")
          && sessao.getAttribute("colecaoBairrosSelecionadosUsuario") != null) {

        Collection colecaoBairrosSelecionadosUsuario =
            (Collection) sessao.getAttribute("colecaoBairrosSelecionadosUsuario");

        Iterator colecaoBairrosSelecionadosUsuarioIterator;

        Bairro bairroInserir;

        colecaoBairrosSelecionadosUsuarioIterator = colecaoBairrosSelecionadosUsuario.iterator();

        while (colecaoBairrosSelecionadosUsuarioIterator.hasNext()) {

          bairroInserir = (Bairro) colecaoBairrosSelecionadosUsuarioIterator.next();

          if (bairroInserir.getId().equals(new Integer(idBairro))) {

            colecaoBairrosSelecionadosUsuario.remove(bairroInserir);
            break;
          }
        }

        if (colecaoBairrosSelecionadosUsuario.isEmpty()) {
          gerarLogradouroActionForm.setColecaoBairro("");
        }
      }

      gerarLogradouroActionForm.setIdBairro("");
      gerarLogradouroActionForm.setNomeBairro("");

      return retorno;
    }

    gerarLogradouroActionForm.setColecaoBairro("");

    if (sessao.getAttribute("colecaoBairrosSelecionadosUsuario") != null) {

      Collection colecaoBairros = (List) sessao.getAttribute("colecaoBairrosSelecionadosUsuario");

      if (!colecaoBairros.isEmpty()) {
        gerarLogradouroActionForm.setColecaoBairro("CARREGADO");
      } else {
        gerarLogradouroActionForm.setColecaoBairro("");
      }
    }

    // -------Parte que trata do código quando o usuário tecla enter
    // caso seja o id do municipio
    String idDigitadoEnterMunicipio = (String) gerarLogradouroActionForm.getIdMunicipio();
    String codigoDigitadoEnterBairro = (String) gerarLogradouroActionForm.getIdBairro();

    /*
     * Removendo toda a coleção de bairro da sessão
     */
    String removerColecaoBairro = httpServletRequest.getParameter("removerColecaoBairro");

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

      sessao.removeAttribute("colecaoBairrosSelecionadosUsuario");
      gerarLogradouroActionForm.setColecaoBairro("");
    }

    // Verifica se o código foi digitado
    if (idDigitadoEnterMunicipio != null
        && !idDigitadoEnterMunicipio.trim().equals("")
        && !Util.validarValorNaoNumerico(idDigitadoEnterMunicipio)) {
      FiltroMunicipio filtroMunicipio = new FiltroMunicipio();

      filtroMunicipio.adicionarParametro(
          new ParametroSimples(FiltroMunicipio.ID, idDigitadoEnterMunicipio));
      filtroMunicipio.adicionarParametro(
          new ParametroSimples(
              FiltroMunicipio.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));

      Collection municipioEncontrado =
          fachada.pesquisar(filtroMunicipio, Municipio.class.getName());

      if (municipioEncontrado != null && !municipioEncontrado.isEmpty()) {
        // O municipio foi encontrado
        gerarLogradouroActionForm.setIdMunicipio(
            ((Municipio) ((List) municipioEncontrado).get(0)).getId().toString());
        gerarLogradouroActionForm.setNomeMunicipio(
            ((Municipio) ((List) municipioEncontrado).get(0)).getNome());
      } else {
        httpServletRequest.setAttribute("nomeCampo", "codigoBairro");

        httpServletRequest.setAttribute("idMunicipioNaoEncontrado", "true");

        gerarLogradouroActionForm.setIdMunicipio("");
        httpServletRequest.setAttribute("nomeCampo", "idMunicipio");
        httpServletRequest.setAttribute("idMunicipioNaoEncontrado", "exception");
        gerarLogradouroActionForm.setNomeMunicipio("Município inexistente");
      }
    }

    // Verifica se o código foi digitado
    if (codigoDigitadoEnterBairro != null
        && !codigoDigitadoEnterBairro.trim().equals("")
        && !Util.validarValorNaoNumerico(codigoDigitadoEnterBairro)) {
      FiltroBairro filtroBairro = new FiltroBairro();

      filtroBairro.adicionarCaminhoParaCarregamentoEntidade("municipio");

      filtroBairro.adicionarParametro(
          new ParametroSimples(FiltroBairro.CODIGO, codigoDigitadoEnterBairro));
      filtroBairro.adicionarParametro(
          new ParametroSimples(FiltroBairro.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
      // verifica se o bairro pesquisado é de um municipio existente
      if (idDigitadoEnterMunicipio != null
          && !idDigitadoEnterMunicipio.trim().equals("")
          && Integer.parseInt(idDigitadoEnterMunicipio) > 0) {

        filtroBairro.adicionarParametro(
            new ParametroSimples(FiltroBairro.MUNICIPIO_ID, idDigitadoEnterMunicipio));
      }

      Collection bairroEncontrado = fachada.pesquisar(filtroBairro, Bairro.class.getName());

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

        // O bairro foi encontrado
        Bairro objetoBairroEncontrado = (Bairro) Util.retonarObjetoDeColecao(bairroEncontrado);

        gerarLogradouroActionForm.setIdBairro(String.valueOf(objetoBairroEncontrado.getCodigo()));
        gerarLogradouroActionForm.setNomeBairro(objetoBairroEncontrado.getNome());

        httpServletRequest.setAttribute("nomeCampo", "botaoAdicionarBairro");

        httpServletRequest.setAttribute("idBairroNaoEncontrado", "true");

        /*
         * Adicionado o novo BAIRRO na coleção
         */
        String adicionarBairroColecao = httpServletRequest.getParameter("adicionarBairroColecao");

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

          gerarLogradouroActionForm.setIdBairro("");
          gerarLogradouroActionForm.setNomeBairro("");

          List colecaoBairrosSelecionadosUsuario = new ArrayList();
          if (sessao.getAttribute("colecaoBairrosSelecionadosUsuario") != null) {

            colecaoBairrosSelecionadosUsuario =
                (List) sessao.getAttribute("colecaoBairrosSelecionadosUsuario");

            if (!colecaoBairrosSelecionadosUsuario.contains(
                (Bairro) ((List) bairroEncontrado).get(0))) {
              colecaoBairrosSelecionadosUsuario.add((Bairro) ((List) bairroEncontrado).get(0));
              gerarLogradouroActionForm.setColecaoBairro("CARREGADO");
            } else {
              throw new ActionServletException("atencao.objeto_ja_selecionado", null, "Bairro");
            }
          } else {
            colecaoBairrosSelecionadosUsuario.add((Bairro) ((List) bairroEncontrado).get(0));
            sessao.setAttribute(
                "colecaoBairrosSelecionadosUsuario", colecaoBairrosSelecionadosUsuario);
            gerarLogradouroActionForm.setColecaoBairro("CARREGADO");
          }
        }

      } else {
        gerarLogradouroActionForm.setIdBairro("");
        gerarLogradouroActionForm.setNomeBairro("");
        httpServletRequest.setAttribute("nomeCampo", "codigoBairro");
        httpServletRequest.setAttribute("idBairroNaoEncontrado", "exception");
        gerarLogradouroActionForm.setNomeBairro("Bairro inexistente");
      }
    }

    // fim da parte da pesquisa do enter

    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 caminho de retorno
    ActionForward retorno = actionMapping.findForward("inserirCep");

    // Mudar isso quando houver esquema de segurança
    HttpSession sessao = httpServletRequest.getSession(false);

    InserirCepActionForm inserirCepActionForm = (InserirCepActionForm) actionForm;

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

    Collection colecaoCepTipo = null;
    Collection colecaoLogradouroTipo = null;
    String municipioId = inserirCepActionForm.getMunicipioId();

    String objetoConsulta = (String) httpServletRequest.getParameter("objetoConsulta");

    if (objetoConsulta != null && !objetoConsulta.trim().equalsIgnoreCase("")) {

      switch (Integer.parseInt(objetoConsulta)) {

          // Municipio

        case 1:
          FiltroMunicipio filtroMunicipio = new FiltroMunicipio();

          filtroMunicipio.adicionarParametro(new ParametroSimples(FiltroMunicipio.ID, municipioId));

          filtroMunicipio.adicionarParametro(
              new ParametroSimples(
                  FiltroMunicipio.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));

          // Retorna Municipio
          colecaoPesquisa = fachada.pesquisar(filtroMunicipio, Municipio.class.getName());

          if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
            // Municipio nao encontrado
            // Limpa o campo MunicipioId do formulário
            inserirCepActionForm.setMunicipioId("");
            inserirCepActionForm.setMunicipio("Municipio inexistente.");
            httpServletRequest.setAttribute("corMunicipio", "exception");
            sessao.setAttribute("corMunicipio", "exception");

            httpServletRequest.setAttribute("nomeCampo", "municipioId");
          } else {
            Municipio objetoMunicipio = (Municipio) Util.retonarObjetoDeColecao(colecaoPesquisa);
            inserirCepActionForm.setMunicipioId(String.valueOf(objetoMunicipio.getId()));
            inserirCepActionForm.setMunicipio(objetoMunicipio.getNome());
            httpServletRequest.setAttribute("corMunicipio", "valor");
          }

          break;

        case 2:
          String bairroId = inserirCepActionForm.getBairroId();

          FiltroBairro filtroBairro = new FiltroBairro();

          filtroBairro.adicionarParametro(new ParametroSimples(FiltroBairro.CODIGO, bairroId));
          filtroBairro.adicionarParametro(
              new ParametroSimples(FiltroBairro.MUNICIPIO_ID, municipioId));

          filtroBairro.adicionarParametro(
              new ParametroSimples(
                  FiltroBairro.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));

          // Retorna Bairro
          colecaoPesquisa = fachada.pesquisar(filtroBairro, Bairro.class.getName());

          if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
            // Bairro nao encontrado
            // Limpa o campo BairroId do formulário
            inserirCepActionForm.setBairroId("");
            inserirCepActionForm.setBairro("Bairro inexistente.");
            httpServletRequest.setAttribute("corBairro", "exception");

            httpServletRequest.setAttribute("nomeCampo", "bairroId");
          } else {
            Bairro objetoBairro = (Bairro) Util.retonarObjetoDeColecao(colecaoPesquisa);
            inserirCepActionForm.setBairroId(String.valueOf(objetoBairro.getCodigo()));
            inserirCepActionForm.setBairro(objetoBairro.getNome());
            httpServletRequest.setAttribute("corBairro", "valor");
          }
          break;
      }
    }

    // Filtro de Tipo CEP para trazer apenas os que tiverem Indicador Uso = 1

    FiltroCepTipo filtroCepTipo = new FiltroCepTipo();

    filtroCepTipo.adicionarParametro(
        new ParametroSimples(FiltroCepTipo.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
    filtroCepTipo.setCampoOrderBy(FiltroCepTipo.ID);

    // Pesquisa a coleção de Tipo de CEP
    colecaoCepTipo = fachada.pesquisar(filtroCepTipo, CepTipo.class.getName());

    httpServletRequest.setAttribute("colecaoCepTipo", colecaoCepTipo);

    // Filtro de Tipo Logradouro
    colecaoLogradouroTipo = fachada.retornaListaLogradouroTipoCep();

    sessao.setAttribute("colecaoLogradouroTipo", colecaoLogradouroTipo);

    if ((httpServletRequest.getParameter("desfazer") != null
        && httpServletRequest.getParameter("desfazer").equalsIgnoreCase("S"))) {

      inserirCepActionForm.setCepTipo("");
      inserirCepActionForm.setSigla("");
      inserirCepActionForm.setCodigo("");
      inserirCepActionForm.setMunicipioId("");
      inserirCepActionForm.setMunicipio("");
      inserirCepActionForm.setBairroId("");
      inserirCepActionForm.setBairro("");
      inserirCepActionForm.setLogradouroTipo("");
      inserirCepActionForm.setLogradouro("");

      if (inserirCepActionForm.getCodigo() == null || inserirCepActionForm.getCodigo().equals("")) {

        Collection colecaoPesquisa = null;
        FiltroCep filtroCep = new FiltroCep();

        filtroCep.setCampoOrderBy(FiltroCep.CODIGO);

        colecaoPesquisa = fachada.pesquisar(filtroCep, Cep.class.getName());

        // Verifica se há algum registro na tabela
        if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
          throw new ActionServletException("atencao.pesquisa.nenhum_registro_tabela", null, "CEP");
        } else {
          sessao.setAttribute("colecaoCep", colecaoPesquisa);
        }

        // Coleção de CEP
        FiltroCep filtroCep2 = new FiltroCep();
        filtroCep2.setCampoOrderBy(FiltroCep.CEPID);

        Collection colecaoCep2 = fachada.pesquisar(filtroCep2, Cep.class.getName());

        sessao.setAttribute("colecaoCep2", colecaoCep2);
      }
    }

    return retorno;
  }