package ch.rasc.wampspring.demo.various.grid;
import java.util.Comparator;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class PropertyComparator<T> implements Comparator<T> {
private final static SpelExpressionParser parser = new SpelExpressionParser();
private final Expression readPropertyExpression;
public PropertyComparator(String property) {
this.readPropertyExpression = parser.parseExpression(property);
}
@SuppressWarnings("unchecked")
@Override
public int compare(T o1, T o2) {
Object left = this.readPropertyExpression.getValue(o1);
Object right = this.readPropertyExpression.getValue(o2);
if (left == right) {
return 0;
}
if (left == null) {
return -1;
}
if (right == null) {
return 1;
}
if (left instanceof String) {
return ((String) left).compareToIgnoreCase((String) right);
}
return ((Comparable<Object>) left).compareTo(right);
}
}