package org.appfuse.webapp.pages;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ReverseComparator;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.IModel;
import org.appfuse.model.User;
import org.appfuse.service.UserManager;
public class SortableUserDataProvider extends SortableDataProvider<User, String> {
private UserManager userManager;
public SortableUserDataProvider(UserManager userManager) {
this.userManager = userManager;
}
public SortableUserDataProvider() {
// default sort
setSort("firstName", SortOrder.ASCENDING);
}
/**
* @todo implement paging in the database, this is just stubbed out for now
*/
@SuppressWarnings("unchecked")
public Iterator iterator(long first, long count) {
List users = userManager.getUsers();
if (first > 0) {
users = users.subList((int) first, (int) (first + count));
}
SortParam sp = getSort();
if (sp != null) {
Object sortColumn = sp.getProperty();
Comparator comparator;
comparator = new BeanComparator(sortColumn.toString());
if (!sp.isAscending()) {
comparator = new ReverseComparator(comparator);
}
Collections.sort(users, comparator);
}
return users.iterator();
}
public long size() {
return userManager.getUsers().size();
}
@Override
public IModel<User> model(User user) {
return new UserModel(user, userManager);
}
}