package cn.jimmyshi.beanquery.comparators; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class DefaultSortOrderableComparator<T> implements SortOrderableComparator<T> { private transient Logger logger = LoggerFactory.getLogger(DefaultSortOrderableComparator.class); private boolean desc = false; @Override public int compare(T o1, T o2) { int ascResult = ascCompare(o1, o2); int finalResult = desc ? 0 - ascResult : ascResult; logger.debug("desc [{}], ascResult [{}], finalResult [{}]", desc, ascResult, finalResult); return finalResult; } protected abstract int ascCompare(T o1, T o2); @Override public SortOrderableComparator<T> desc() { desc = true; return this; } @Override public SortOrderableComparator<T> asc() { desc = false; return this; } }