package org.appfuse.webapp.pages.admin;
import org.appfuse.model.User;
import java.io.Serializable;
import java.util.Comparator;
/**
* A smarter way to compare elements in UserDataProvider.
*
* Not fully implemented. Currently not used.
*
* @author Marcin ZajÄ…czkowski, 2011-05-22
*/
public class UserComparatorResolver {
public static Comparator<User> getComparatorBySoftProperty(String property, boolean isAscending) {
//TODO: Implement resolver or fall back to original solution with a lot of object creation on every compare
throw new IllegalStateException("Not implemented yet");
}
abstract class AbstractUserComparator<T extends Comparable<T>> implements Comparator<User>, Serializable {
private final boolean ascending;
protected AbstractUserComparator(boolean ascending) {
this.ascending = ascending;
}
public int compare(User o1, User o2) {
int result = getPropertyToCompare(o1).compareTo(getPropertyToCompare(o2));
if (!ascending) {
result = -result;
}
return result;
}
protected abstract T getPropertyToCompare(User user);
}
class UsernameUserComparator extends AbstractUserComparator<String> {
protected UsernameUserComparator(boolean ascending) {
super(ascending);
}
@Override
protected String getPropertyToCompare(User user) {
return user.getUsername();
}
}
class LastNameUserComparator extends AbstractUserComparator<String> {
protected LastNameUserComparator(boolean ascending) {
super(ascending);
}
@Override
protected String getPropertyToCompare(User user) {
return user.getLastName();
}
}
class EmailUserComparator extends AbstractUserComparator<String> {
EmailUserComparator(boolean ascending) {
super(ascending);
}
@Override
protected String getPropertyToCompare(User user) {
return user.getEmail();
}
}
class EnabledUserComparator extends AbstractUserComparator<Boolean> {
EnabledUserComparator(boolean ascending) {
super(ascending);
}
@Override
protected Boolean getPropertyToCompare(User user) {
return user.isEnabled();
}
}
}