package fr.openwide.core.jpa.more.business.sort;
import java.io.Serializable;
import java.util.List;
import org.apache.lucene.search.SortField;
import com.querydsl.core.types.OrderSpecifier;
/**
* @param <S> The sort field type (@see {@link SortField}, {@link OrderSpecifier}, etc.).
* This type must describe the field on which sort is applied and the way the sort is applied.
*/
public interface ISort<S> extends Serializable {
List<S> getSortFields(SortOrder sortOrder);
SortOrder getDefaultOrder();
public enum SortOrder {
ASC {
@Override public SortOrder reverse() { return DESC; }
},
DESC {
@Override public SortOrder reverse() { return ASC; }
};
public abstract SortOrder reverse();
public SortOrder asDefaultFor(SortOrder sortOrder) {
return sortOrder == null ? this : sortOrder;
}
}
/**
* @deprecated Use NullSortValue instead.
*/
@Deprecated
public enum SortNull {
NONE,
NULL_FIRST,
NULL_LAST;
}
/**
* The relative value of <code>null</code> when sorting.
*/
public enum NullSortValue {
NONE,
SMALLEST {
@Override
public boolean isFirst(SortOrder order) {
return order == SortOrder.ASC;
}
@Override
public boolean isLast(SortOrder order) {
return order == SortOrder.DESC;
}
},
GREATEST {
@Override
public boolean isFirst(SortOrder order) {
return order == SortOrder.DESC;
}
@Override
public boolean isLast(SortOrder order) {
return order == SortOrder.ASC;
}
};
public boolean isFirst(SortOrder order) {
return false;
}
public boolean isLast(SortOrder order) {
return false;
}
}
}