/* * * Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute - Graduate School and Research in Engineering. * See the file license.txt for copyright permission. * */ package util; import java.util.AbstractList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import DAO.generico.JPADaoGenerico; public class ListaComPaginacao<T> extends AbstractList<T> { //Cache dos itens pesquisados anteriormente Map<Integer, T> cache; //Total de resultados long numResults; //Tamanho da pagina int pageSize; //jpql a ser executada String jpql; //Listagem com os parametros Object[] parametros; public ListaComPaginacao(String jpql, Object[] parametros, int pagesize, long numResults) { this.jpql = jpql; this.parametros = parametros; this.pageSize = pagesize; this.numResults = numResults; this.cache = new HashMap<Integer, T>(); } @Override public final int size() { return (int) numResults; } @Override public final T get(int i) { if (!cache.containsKey(i)) { final List<T> results = JPADaoGenerico.executaQuery(jpql, parametros, i, pageSize); for (int j = 0; j < results.size(); j++) { T item = results.get(j); cache.put(i + j, item); } } return cache.get(i); } @Override public boolean remove(Object o) { final Iterator<Integer> it = cache.keySet().iterator(); while (it.hasNext()) { final Integer chave = it.next(); final T item = cache.get(chave); if (item.equals(o)) { cache.remove(chave); return true; } } return false; } }