package fr.openwide.core.wicket.more.markup.repeater.data; import java.io.Serializable; import java.util.Iterator; import java.util.List; import org.apache.wicket.markup.repeater.data.IDataProvider; import org.apache.wicket.model.IModel; import fr.openwide.core.jpa.business.generic.model.GenericEntity; import fr.openwide.core.wicket.more.model.GenericEntityModel; public class GenericEntityListModelDataProvider<K extends Serializable & Comparable<K>, E extends GenericEntity<K, ?>> implements IDataProvider<E> { private static final long serialVersionUID = -238640572566596234L; private IModel<? extends List<E>> listModel; public GenericEntityListModelDataProvider(IModel<? extends List<E>> listModel) { if (listModel == null) { throw new IllegalArgumentException("listModel cannot be null"); } this.listModel = listModel; } @Override public void detach() { listModel.detach(); } @Override public Iterator<? extends E> iterator(final long first, final long count) { List<? extends E> list = listModel.getObject(); long toIndex = first + count; if (toIndex > list.size()) { toIndex = list.size(); } return list.subList(safeLongToInt(first), safeLongToInt(toIndex)).listIterator(); } @Override public long size() { return listModel.getObject().size(); } @Override public IModel<E> model(E object) { return new GenericEntityModel<K, E>(object); } private static int safeLongToInt(long l) { if (l < Integer.MIN_VALUE || l > Integer.MAX_VALUE) { throw new IllegalArgumentException(l + " cannot be cast to int without changing its value."); } return (int) l; } }