Skip to content

Instantly share code, notes, and snippets.

@sandroqz
Created July 11, 2016 22:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sandroqz/3070b5c4c8b1b1be26720c02a88e998f to your computer and use it in GitHub Desktop.
Save sandroqz/3070b5c4c8b1b1be26720c02a88e998f to your computer and use it in GitHub Desktop.
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