package er.extensions.foundation;
import java.lang.reflect.InvocationTargetException;
import java.util.Comparator;
import com.webobjects.foundation.NSSelector;
/**
* <p>
* ERXComparatorSelector allows you to pass an arbitrary Comparator instance as an NSSelector into EOSortOrdering for use
* with an in-memory sort. Note that this WILL NOT work for sorting directly in the database. This exploits the fact
* that EOSortOrdering calls selector.invoke(left, right) when you pass it an arbitrary selector to use.
* </p>
*
* <pre>
* Example: ERXArrayUtilities.sortedArraySortedWithKey(array, "someKey", new ERXComparatorSelector(Collator.getInstance()))
* </pre>
*
* @author mschrag
*/
public class ERXComparatorSelector extends NSSelector {
/**
* Do I need to update serialVersionUID?
* See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the
* <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a>
*/
private static final long serialVersionUID = 1L;
private Comparator _comparator;
/**
* Constructs a new ERXComparatorSelector.
*
* @param comparator the backing comparator to sort with
*/
public ERXComparatorSelector(Comparator comparator) {
super("ERXComparatorSelector:" + comparator.getClass().getSimpleName(), null);
_comparator = comparator;
}
@Override
public Object invoke(Object target, Object argument) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
return Integer.valueOf(_comparator.compare(target, argument));
}
}