Created
July 11, 2016 22:27
-
-
Save sandroqz/3070b5c4c8b1b1be26720c02a88e998f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private LazyDataModel<Cidade> cidadesLazy; | |
@SuppressWarnings("serial") | |
public LazyDataModel<Cidade> getCidadesLazy() { | |
if (cidadesLazy == null) { | |
cidadesLazy = new LazyDataModel<Cidade>() { | |
@Override | |
public List<Cidade> load(int primeiroRegistro, int totalRegistros, String campoOrdenacao, SortOrder tipoOrdenacao, Map<String, Object> filtros) { | |
List<Cidade> lista = repository.buscaPaginada(primeiroRegistro, totalRegistros, campoOrdenacao, tipoOrdenacao, filtros); | |
int totalRegistrosFiltrados = repository.quantidadeRegistros(filtros); | |
setRowCount(totalRegistrosFiltrados); | |
return lista; | |
} | |
}; | |
} | |
return cidadesLazy; | |
} | |
//-------------------------------------------------- | |
public List<Cidade> buscaPaginada(int primeiroRegistro, int totalRegistros, String campoOrdenacao, SortOrder tipoOrdenacao, Map<String, Object> filtros) { | |
CriteriaBuilder cb = em.getCriteriaBuilder(); | |
CriteriaQuery<Cidade> cq = cb.createQuery(Cidade.class); | |
Root<Cidade> cidade = cq.from(Cidade.class); | |
if (filtros != null) { | |
for(Iterator<String> it = filtros.keySet().iterator(); it.hasNext();) { | |
String campo = it.next(); | |
String valor = String.valueOf(filtros.get(campo)); | |
cq.where(cb.like(cidade.<String>get(campo), "%" + valor + "%")); | |
} | |
} | |
if (campoOrdenacao != null && !campoOrdenacao.isEmpty()) { | |
if (SortOrder.DESCENDING.equals(tipoOrdenacao)) { | |
cq.select(cidade).orderBy(cb.desc(cidade.get(campoOrdenacao))); | |
} else { | |
cq.select(cidade).orderBy(cb.asc(cidade.get(campoOrdenacao))); | |
} | |
} | |
return (List<Cidade>) em.createQuery(cq).setFirstResult(primeiroRegistro).setMaxResults(totalRegistros).getResultList(); | |
} | |
public int quantidadeRegistros(Map<String, Object> filtros) { | |
CriteriaBuilder cb = em.getCriteriaBuilder(); | |
CriteriaQuery<Cidade> cq = cb.createQuery(Cidade.class); | |
Root<Cidade> cidade = cq.from(Cidade.class); | |
if (filtros != null) { | |
for(Iterator<String> it = filtros.keySet().iterator(); it.hasNext();) { | |
String campo = it.next(); | |
String valor = String.valueOf(filtros.get(campo)); | |
Expression<String> path = cidade.get(campo); | |
cq.where(cb.like(path, "%" + valor + "%")); | |
} | |
} | |
return em.createQuery(cq).getResultList().size(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment