package com.towel.collections.paginator; import java.util.ArrayList; import java.util.List; import com.towel.collections.CollectionsUtil; import com.towel.collections.filter.Filter; import com.towel.el.FieldResolver; public class ListPaginator<T> implements Paginator<T> { private List<T> original; private List<T> list; private int currentPagination; private int maxPage; private int pageResults; private int listSize; protected ListPaginator(int listSize, int resultsPerPage) { pageResults = resultsPerPage; this.listSize = listSize; currentPagination = 0; calcPages(); } public ListPaginator(List<T> list) { this(list, list.size()); } public ListPaginator(List<T> list, int resultsPerPage) { original = list; this.list = new ArrayList<T>(list); pageResults = resultsPerPage; calcPages(); } private void calcPages() { currentPagination = 0; listSize = list.size(); if (pageResults == 0) { return; } if (listSize % pageResults == 0) { maxPage = listSize / pageResults - 1; } else { maxPage = listSize / pageResults; } } public List<T> nextResult() { int toIndex = 0; toIndex = (currentPagination + 1) * pageResults; if (toIndex > this.list.size()) { toIndex = this.list.size(); } List<T> list = this.list.subList(currentPagination * pageResults, toIndex); currentPagination++; return list; } public void setData(List<T> list) { this.list = list; calcPages(); } @Override public List<T> getData() { return list; } public int getCurrentPage() { return currentPagination; } public void setCurrentPage(int page) { currentPagination = page; } public int getMaxPage() { return maxPage; } @Override public void filter(final String text, final FieldResolver field) { list = CollectionsUtil.filter(original, new Filter<T>() { @Override public boolean accept(T obj) { Object objR = field.getValue(obj); if (objR == null) return false; return objR.toString().toUpperCase().contains( text.toUpperCase()); } }); } }