package gcom.cadastro.geografico; import gcom.util.ControladorException; import gcom.util.ErroRepositorioException; import gcom.util.HibernateUtil; import gcom.util.Util; import gcom.util.filtro.Filtro; import gcom.util.filtro.GeradorHQLCondicional; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.concurrent.CopyOnWriteArraySet; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Session; /** * < <Descri��o da Classe>> * * @author Administrador */ public class RepositorioGeograficoHBM implements IRepositorioGeografico { private static IRepositorioGeografico instancia; /** * Construtor da classe RepositorioAcessoHBM */ private RepositorioGeograficoHBM() { } /** * Retorna o valor de instancia * * @return O valor de instancia */ public static IRepositorioGeografico getInstancia() { if (instancia == null) { instancia = new RepositorioGeograficoHBM(); } return instancia; } /** * < <Descri��o do m�todo>> * * @param filtro * Descri��o do par�metro * @param pacoteNomeObjeto * Descri��o do par�metro * @return Descri��o do retorno * @exception ErroRepositorioException * Descri��o da exce��o */ public Collection pesquisar(Filtro filtro, String pacoteNomeObjeto) throws ErroRepositorioException { // cria a cole��o de retorno Collection retorno = null; // obt�m a sess�o Session session = HibernateUtil.getSession(); try { // pesquisa a cole��o de atividades e atribui a vari�vel "retorno" retorno = new ArrayList(new CopyOnWriteArraySet(GeradorHQLCondicional.gerarCondicionalQuery(filtro, "objeto", "from " + pacoteNomeObjeto + " as objeto", session).list())); // erro no hibernate } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } // retorna a cole��o de atividades pesquisada(s) return retorno; } /** * < <Descri��o do m�todo>> * * @param codigoSetorComercial * Descri��o do par�metro * @return Descri��o do retorno */ public Collection pesquisarMunicipoPeloSetorComercial( String codigoSetorComercial, String idMunicipio) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); Collection retorno = null; try { String query = "select municipio from gcom.cadastro.localidade.SetorComercial setor join setor.municipio municipio where setor.municipio.id = :municipio and setor.codigo = :setor order by setor.municipio.nome"; retorno = session.createQuery(query).setInteger("setor", Integer.parseInt(codigoSetorComercial)).setInteger( "municipio", Integer.parseInt(idMunicipio)).list(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return retorno; } /** * M�todo que retorna o maior c�digo do bairro de um munic�pio * * @author Rafael Corr�a * @date 10/07/2006 * * @param idMunicipio * @return * @throws ControladorException */ public int pesquisarMaximoCodigoBairro(Integer idMunicipio) throws ErroRepositorioException { Integer retorno; int max = 0; Session session = HibernateUtil.getSession(); String consulta; try { consulta = "SELECT max(b.codigo) " + "FROM Bairro b " + "INNER JOIN b.municipio m " + "WHERE m.id = :idMunicipio "; retorno = (Integer) session.createQuery(consulta).setInteger( "idMunicipio", idMunicipio).setMaxResults(1).uniqueResult(); if(retorno != null){ max = retorno.intValue(); } } catch (HibernateException e) { throw new ErroRepositorioException("Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return max; } /** * Pesquisa um munic�pio pelo id * * @author Rafael Corr�a * @date 01/08/2006 * * @return Munic�pio * @exception ErroRepositorioException * Erro no hibernate */ public Object[] pesquisarObjetoMunicipioRelatorio(Integer idMunicipio) throws ErroRepositorioException { // cria a vari�vel que vai armazenar a cole��o pesquisada Object[] retorno = null; // cria a sess�o com o hibernate Session session = HibernateUtil.getSession(); try { // cria o HQL para consulta String consulta = "select m.muni_id as id, " + "m.muni_nmmunicipio as nome " + "from cadastro.municipio m " + "where m.muni_id = " + idMunicipio.toString(); // pesquisa a cole��o de acordo com o par�metro informado Collection colecaoMunicipios = session.createSQLQuery(consulta) .addScalar("id", Hibernate.INTEGER).addScalar("nome", Hibernate.STRING).list(); retorno = Util.retonarObjetoDeColecaoArray(colecaoMunicipios); // erro no hibernate } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } // retorna a cole��o pesquisada return retorno; } /** * Pesquisa um bairro pelo c�digo e pelo id do munic�pio * * @author Rafael Corr�a * @date 01/08/2006 * * @return Bairro * @exception ErroRepositorioException * Erro no hibernate */ public Object[] pesquisarObjetoBairroRelatorio(Integer codigoBairro, Integer idMunicipio) throws ErroRepositorioException { // cria a vari�vel que vai armazenar a cole��o pesquisada Object[] retorno = null; // cria a sess�o com o hibernate Session session = HibernateUtil.getSession(); try { // cria o SQL para consulta String consulta = "select b.bair_cdbairro as codigo, " + "b.bair_nmbairro as nome " + "from cadastro.municipio m, " + "cadastro.bairro b " + "where b.muni_id = m.muni_id and" + " m.muni_id = " + idMunicipio.toString() + " and b.bair_cdbairro = " + codigoBairro.toString(); // pesquisa a cole��o de acordo com o par�metro informado Collection colecaoBairros = session.createSQLQuery(consulta) .addScalar("codigo", Hibernate.INTEGER).addScalar("nome", Hibernate.STRING).list(); retorno = Util.retonarObjetoDeColecaoArray(colecaoBairros); // erro no hibernate } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } // retorna a cole��o pesquisada return retorno; } /** * @author Vivianne Sousa * @date 26/12/2006 * * @return colecao de BairroArea * @exception ErroRepositorioException * Erro no hibernate */ public Collection pesquisarBairroArea(Integer idBairro) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); Collection retorno = null; try { String query = "select bairroArea " + "from BairroArea as bairroArea " + "left join fetch bairroArea.distritoOperacional " + "where bairroArea.bairro.id = :idBairro"; retorno = session.createQuery(query).setInteger( "idBairro", idBairro).list(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return retorno; } /** * Remove todos os BairroArea de um determinado Bairro * * @author Vivianne Sousa * @date 27/12/200 * * @param idBairro * @exception ErroRepositorioException * */ public void removerTodosBairroAreaPorBairro(Integer idBairro) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); try { Iterator iterator = session .createQuery( "from gcom.cadastro.geografico.BairroArea as bairroArea where bairroArea.bairro.id = :idBairro") .setInteger("idBairro", idBairro.intValue()).iterate(); while (iterator.hasNext()) { iterator.next(); iterator.remove(); } session.flush(); } catch (HibernateException e) { throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } } /** * M�todo que retorna o maior id do Munic�pio * * @author Rafael Corr�a * @date 24/07/2008 * * @return * @throws ControladorException */ public int pesquisarMaximoIdMunicipio() throws ErroRepositorioException { int retorno = 0; Integer maxIdMunicipio; Session session = HibernateUtil.getSession(); String consulta; try { consulta = "SELECT max(m.id) " + "FROM Municipio m "; maxIdMunicipio = (Integer) session.createQuery(consulta) .setMaxResults(1).uniqueResult(); if (maxIdMunicipio != null){ retorno = maxIdMunicipio; } } catch (HibernateException e) { throw new ErroRepositorioException("Erro no Hibernate"); } finally { HibernateUtil.closeSession(session); } return retorno; } /** * M�todo que retorna o municipio do Imovel * * @author Hugo Amorim * @date 27/08/2009 * * @return Municipio * @throws ControladorException */ public Collection pesquisarMunicipioDoImovel(Integer idImovel) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); Collection retorno = null; try { String query = "select m "+ " from gcom.cadastro.imovel.Imovel as i"+ " inner join i.logradouroBairro as lb"+ " inner join lb.bairro as b"+ " inner join b.municipio as m"+ " where i.id = :idImovel"; retorno = session.createQuery(query).setInteger( "idImovel", idImovel).list(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return retorno; } /** * M�todo repons�vel por retornar todos os munic�pios que possuem alguma * associa��o com uma localidade (localidade.muni_idprincipal != null) * * @author Diogo Peixoto * @date 26/04/2011 * * @return Collection * @throws ErroRepositorioException */ public Collection pesquisarMunicipiosAssociadoLocalidade() throws ErroRepositorioException { Session session = HibernateUtil.getSession(); Collection retorno = null; StringBuilder sb = new StringBuilder(); try { sb.append("SELECT DISTINCT(muni) "); sb.append("FROM Localidade loc "); sb.append("INNER JOIN loc.municipio muni "); retorno = session.createQuery(sb.toString()).list(); } catch (HibernateException e) { // levanta a exce��o para a pr�xima camada throw new ErroRepositorioException(e, "Erro no Hibernate"); } finally { // fecha a sess�o HibernateUtil.closeSession(session); } return retorno; } }