package er.extensions.foundation; import com.webobjects.foundation.NSComparator; import com.webobjects.foundation.NSComparator.ComparisonException; import com.webobjects.foundation.NSKeyValueCoding; /** * Useful methods when working with NSComparator. * * @author Chuck Hill */ public class ERXComparatorSupport { /** * Compares object1 and object2 using comparator. If object1 or object2 is null/NSKeyValueCoding.NullValue it will * sort before the other object. * * @param comparator NSComparator instance to use if both object1 and object2 are not null/NSKeyValueCoding.NullValue * @param object1 first object to compare * @param object2 second object to compare * @return the result of comparing object1 to object2 * @throws ComparisonException if comparator throws this comparing object1 to object2 */ public static int compareWithNullsFirst(NSComparator comparator, Object object1, Object object2) throws ComparisonException { if (object1 == null || object1 == NSKeyValueCoding.NullValue) { return (object2 == null || object2 == NSKeyValueCoding.NullValue) ? 0 : -1; } if (object2 == null || object2 == NSKeyValueCoding.NullValue) { return 1; } return comparator.compare(object1, object2); } /** * Compares object1 and object2 using comparator. If object1 or object2 is null/NSKeyValueCoding.NullValue it will * sort after the other object. * * @param comparator NSComparator instance to use if both object1 and object2 are not null/NSKeyValueCoding.NullValue * @param object1 first object to compare * @param object2 second object to compare * @return the result of comparing object1 to object2 * @throws ComparisonException if comparator throws this comparing object1 to object2 */ public static int compareWithNullsLast(NSComparator comparator, Object object1, Object object2) throws ComparisonException { if (object1 == null || object1 == NSKeyValueCoding.NullValue) { return (object2 == null || object2 == NSKeyValueCoding.NullValue) ? 0 : 1; } if (object2 == null || object2 == NSKeyValueCoding.NullValue) { return -1; } return comparator.compare(object1, object2); } }