package br.com.ecodetech.alunoweb.lazydatamodel; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.primefaces.model.LazyDataModel; import org.primefaces.model.SortOrder; import br.com.ecodetech.alunoweb.model.bean.AbstractEntityBean; import br.com.ecodetech.alunoweb.model.dao.GenericDAO; import br.com.ecodetech.alunoweb.model.enums.TipoOrdemEnum; @SuppressWarnings("serial") public class GenericLazyList<T extends AbstractEntityBean> extends LazyDataModel<T> { private List<T> datasource; private GenericDAO<T> dao; private String valorFiltro = ""; private String campoFiltro = "nome"; private boolean atualizaTotal; public GenericLazyList(GenericDAO<T> dao, List<T> datasource) { super(); this.datasource = datasource; this.dao = dao; } @Override public T getRowData(String id) { if (id == null) { return null; } Long longId = new Long(id); for (T entidade : datasource) { if (longId == entidade.getId().longValue()) { return entidade; } } return null; } @Override public Object getRowKey(T entidade) { return entidade.getId(); } @Override public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) { TipoOrdemEnum tipo = TipoOrdemEnum.CRESCENTE; if (!sortOrder.name().equals("ASCENDING")) { tipo = TipoOrdemEnum.DECRESCENTE; } datasource = dao.listar(first, pageSize, sortField, tipo, campoFiltro, valorFiltro+"%"); if (datasource == null) { datasource = new ArrayList<T>(); } if (getRowCount() <= 0 || atualizaTotal) { setRowCount(dao.getTotalRegistros(campoFiltro, valorFiltro+"%").intValue()); atualizaTotal = false; } setPageSize(pageSize); return datasource; } public List<T> getDatasorce() { return datasource; } public boolean isAtualizaTotal() { return atualizaTotal; } public void setAtualizaTotal(boolean atualizaTotal) { this.atualizaTotal = atualizaTotal; } public String getValorFiltro() { return valorFiltro; } public void setValorFiltro(String valorFiltro) { this.valorFiltro = valorFiltro; } public String getCampoFiltro() { return campoFiltro; } public void setCampoFiltro(String campoFiltro) { this.campoFiltro = campoFiltro; } }