package net.techreadiness.persistence.datagrid; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaQuery; import net.techreadiness.service.common.DataGrid; import net.techreadiness.service.common.DataGridItemProvider; public abstract class AbstractCriteriaItemProvider<T> implements DataGridItemProvider<T> { @PersistenceContext protected EntityManager em; protected abstract CriteriaQuery<T> getCriteria(DataGrid<T> grid); @Override public int getTotalNumberOfItems(DataGrid<T> grid) { return em.createQuery(getCriteria(grid)).getResultList().size(); } @Override public List<T> getPage(DataGrid<T> grid) { int start = (grid.getPage() - 1) * grid.getPageSize(); TypedQuery<T> query = em.createQuery(getCriteria(grid)); query.setFirstResult(start); query.setMaxResults(grid.getPageSize()); return query.getResultList(); } }