package org.tarena.dang.entity;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Property;
/**
* 排序规则的灵活切换_此代码是我最近就一个学习项目时候用到感觉特好,就这样简短的一个枚举无须修改
*dao,service,只需要在Action或者界面层传入一个int数据给BookListSortRule setRule(int order)就可以实现
*多个排序规则的使用很在程序提高了代码的复用性。
* @author zhouzhengde
*
*/
public enum BookListSortRule {
DangPrice_ASC(Property.forName("dangPrice").asc()),
DangPrice_DESC(Property.forName("dangPrice").desc()),
PublishTime_ASC(Property.forName("publishTime").asc()),
PublishTime_DESC(Property.forName("publishTime").desc()),
AddTime_ASC(Property.forName("addTime").asc()),
AddTime_DESC(Property.forName("addTime").desc()),
NoneRule(Property.forName("id").asc());
private Order order;
private BookListSortRule(Order order) {
this.order = order;
}
public Order getOrder() {
return order;
}
private static Integer rule = new Integer(0);
private static Boolean isasc = new Boolean(false);
public static BookListSortRule setRule(int order) {
initialOrder(order);
if (rule == 1) {
if (isasc)
return DangPrice_ASC;
return DangPrice_DESC;
} else if (rule == 2) {
if (isasc)
return PublishTime_ASC;
return PublishTime_DESC;
} else if (rule == 3) {
if (isasc)
return AddTime_ASC;
return AddTime_DESC;
} else {
return NoneRule;
}
}
private static void initialOrder(int order) {
rule = order / 10;
if (order % 10 == 1)
isasc = true;
}
}