package com.hwlcn.ldap.util; import com.hwlcn.core.annotation.NotMutable; import com.hwlcn.core.annotation.ThreadSafety; import java.io.Serializable; import java.util.Comparator; @NotMutable() @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE) public final class ReverseComparator<T> implements Comparator<T>, Serializable { private static final long serialVersionUID = -4615537960027681276L; private final Comparator<T> baseComparator; public ReverseComparator() { baseComparator = null; } public ReverseComparator(final Comparator<T> baseComparator) { this.baseComparator = baseComparator; } @SuppressWarnings("unchecked") public int compare(final T o1, final T o2) { final int baseValue; if (baseComparator == null) { baseValue = ((Comparable<? super T>) o1).compareTo(o2); } else { baseValue = baseComparator.compare(o1, o2); } if (baseValue < 0) { return 1; } else if (baseValue > 0) { return -1; } else { return 0; } } @Override() public int hashCode() { if (baseComparator == null) { return 0; } else { return baseComparator.hashCode(); } } @Override() @SuppressWarnings("unchecked") public boolean equals(final Object o) { if (o == null) { return false; } if (o == this) { return true; } if (! (o.getClass().equals(ReverseComparator.class))) { return false; } final ReverseComparator<T> c = (ReverseComparator<T>) o; if (baseComparator == null) { return (c.baseComparator == null); } else { return baseComparator.equals(c.baseComparator); } } }