- import java.io.Serializable;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.List;
- import java.util.ListIterator;
- /**
- * Oferece suporte para lidar com paginas em telas a pesquisa fica a cargo do
- * programador.
- *
- * @author carlosr
- *
- * @param <T>
- */
- public class ListaPaginada<T> implements List<T>, Serializable {
- private static final long serialVersionUID = 1L;
- private List<T> listaInterna;
- private Integer totalRegistros;
- public ListaPaginada(List<T> listaInterna, Integer totalRegistros) {
- this.listaInterna = listaInterna;
- this.totalRegistros = totalRegistros;
- }
- public void add(int arg0, T arg1) {
- listaInterna.add(arg0, arg1);
- }
- public boolean add(T arg0) {
- return listaInterna.add(arg0);
- }
- public boolean addAll(Collection<? extends T> arg0) {
- return listaInterna.addAll(arg0);
- }
- public boolean addAll(int arg0, Collection<? extends T> arg1) {
- return listaInterna.addAll(arg0, arg1);
- }
- public void clear() {
- listaInterna.clear();
- }
- public boolean contains(Object arg0) {
- return listaInterna.contains(arg0);
- }
- public boolean containsAll(Collection<?> arg0) {
- return listaInterna.containsAll(arg0);
- }
- public boolean equals(Object arg0) {
- return listaInterna.equals(arg0);
- }
- public T get(int arg0) {
- return listaInterna.get(arg0);
- }
- public int hashCode() {
- return listaInterna.hashCode();
- }
- public int indexOf(Object arg0) {
- return listaInterna.indexOf(arg0);
- }
- public boolean isEmpty() {
- return listaInterna.isEmpty();
- }
- public Iterator<T> iterator() {
- return listaInterna.iterator();
- }
- public int lastIndexOf(Object arg0) {
- return listaInterna.lastIndexOf(arg0);
- }
- public ListIterator<T> listIterator() {
- return listaInterna.listIterator();
- }
- public ListIterator<T> listIterator(int arg0) {
- return listaInterna.listIterator(arg0);
- }
- public T remove(int arg0) {
- return listaInterna.remove(arg0);
- }
- public boolean remove(Object arg0) {
- return listaInterna.remove(arg0);
- }
- public boolean removeAll(Collection<?> arg0) {
- return listaInterna.removeAll(arg0);
- }
- public boolean retainAll(Collection<?> arg0) {
- return listaInterna.retainAll(arg0);
- }
- public T set(int arg0, T arg1) {
- return listaInterna.set(arg0, arg1);
- }
- public int size() {
- return listaInterna.size();
- }
- public List<T> subList(int arg0, int arg1) {
- return listaInterna.subList(arg0, arg1);
- }
- public Object[] toArray() {
- return listaInterna.toArray();
- }
- @SuppressWarnings("hiding")
- public <T> T[] toArray(T[] arg0) {
- return listaInterna.toArray(arg0);
- }
- public Integer getTotalRegistros() {
- return totalRegistros;
- }
- public void setTotalRegistros(Integer totalRegistros) {
- this.totalRegistros = totalRegistros;
- }
- }
- import java.io.IOException;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.faces.context.FacesContext;
- import org.ajax4jsf.model.DataVisitor;
- import org.ajax4jsf.model.Range;
- import org.ajax4jsf.model.SequenceRange;
- import org.ajax4jsf.model.SerializableDataModel;
- import org.jboss.seam.core.Expressions;
- import br.gov.capes.framework.entity.BaseEntity;
- /**
- * DataModel que adiciona suporte de paginação
- *
- * para usar a paginação use:
- *
- * PaginacaoDataModel clientes = new PaginacaoDataModel(#{metodo que retorna uma
- * listaPaginada para o componente de paginacao}}
- *
- * @param <T>
- */
- public class PaginacaoDataModel<T> extends SerializableDataModel {
- private static final long serialVersionUID = 2954923950179861809L;
- protected Serializable currentPk;
- protected boolean detached = false;
- protected List<Serializable> wrappedKeys = new ArrayList<Serializable>();
- protected Map<Serializable, T> wrappedData = new HashMap<Serializable, T>();
- @Override
- public Object getRowKey() {
- return currentPk;
- }
- @Override
- public void setRowKey(final Object key) {
- this.currentPk = (Serializable) key;
- }
- @Override
- public void update() {
- detached = false;
- }
- @Override
- public SerializableDataModel getSerializableModel(final Range range) {
- if (wrappedKeys != null) {
- detached = true;
- return this;
- }
- return null;
- }
- @Override
- public void setRowIndex(final int rowIndex) {
- throw new UnsupportedOperationException();
- }
- @Override
- public void setWrappedData(final Object data) {
- throw new UnsupportedOperationException();
- }
- @Override
- public int getRowIndex() {
- throw new UnsupportedOperationException();
- }
- @Override
- public Object getWrappedData() {
- throw new UnsupportedOperationException();
- }
- private int firstRow;
- private int numberOfRows;
- @Override
- public void walk(final FacesContext context, final DataVisitor visitor,
- final Range range, final Object argument) throws IOException {
- final int firstRow = ((SequenceRange) range).getFirstRow();
- final int numberOfRows = ((SequenceRange) range).getRows();
- if (!(firstRow == this.firstRow && numberOfRows == this.numberOfRows)) {
- detached = false;
- this.firstRow = firstRow;
- this.numberOfRows = numberOfRows;
- } else {
- detached = true;
- }
- if (detached) {
- for (final Serializable key : wrappedKeys) {
- setRowKey(key);
- visitor.process(context, key, argument);
- }
- } else {
- wrappedKeys = new ArrayList<Serializable>();
- for (final T object : findObjects(firstRow, numberOfRows)) {
- wrappedKeys.add(getId(object));
- wrappedData.put(getId(object), object);
- visitor.process(context, getId(object), argument);
- }
- }
- }
- @Override
- public boolean isRowAvailable() {
- if (currentPk == null) {
- return false;
- }
- if (wrappedKeys.contains(currentPk)) {
- return true;
- }
- if (wrappedData.entrySet().contains(currentPk)) {
- return true;
- }
- return false;
- }
- @Override
- public Object getRowData() {
- if (currentPk == null) {
- return null;
- }
- T object = wrappedData.get(currentPk);
- return object;
- }
- @Override
- public int getRowCount() {
- return getNumRecords();
- }
- public Serializable getId(T object) {
- return (Serializable) ((BaseEntity) object).getId();
- }
- private String expression;
- private int numRecords;
- @SuppressWarnings("unchecked")
- public List<T> findObjects(Integer firstRow, Integer numberOfRows) {
- ListaPaginada<T> listaPaginada = Expressions.instance().createMethodExpression(expression, ListaPaginada.class,Integer.class, Integer.class).invoke(firstRow, numberOfRows);
- numRecords = listaPaginada.getTotalRegistros();
- return listaPaginada;
- }
- public PaginacaoDataModel(String expression) {
- this.expression = expression;
- }
- public int getNumRecords() {
- return numRecords;
- }
- }