package org.appfuse.webapp.pages.admin;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.appfuse.model.User;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import static org.appfuse.webapp.util.NumberRangeUtil.checkIfLongWithinIntegerRange;
public class StaticUserDataProvider extends SortableDataProvider<User, String> {
private final List<User> users;
public StaticUserDataProvider(List<User> users) {
this.users = users;
setSort("username", SortOrder.ASCENDING);
}
@Override
public Iterator<? extends User> iterator(long first, long count) {
Collections.sort(users, getSortableUserDataProviderComparator());
checkIfLongWithinIntegerRange(first, count, first + count);
return users.subList((int)first, (int)first + (int)count).iterator();
}
private SortableDataProviderComparator<User> getSortableUserDataProviderComparator() {
return SortableDataProviderComparator.getInstanceForSortParam(getSort());
}
@Override
public long size() {
return users.size();
}
@Override
public IModel<User> model(final User user) {
//TODO: MZA: Verification needed
return new LoadableDetachableModel<User>(user) {
@Override
protected User load() {
return users.get(users.indexOf(user));
}
};
}
}