Added sourceReference
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / persistence / query / RandomOrder.java
1 package eu.etaxonomy.cdm.persistence.query;
2
3 import java.util.Map;
4
5 import org.hibernate.Criteria;
6 import org.hibernate.HibernateException;
7 import org.hibernate.criterion.CriteriaQuery;
8 import org.hibernate.criterion.Order;
9 import org.hibernate.envers.query.AuditQuery;
10 import org.hibernate.util.StringHelper;
11
12 import eu.etaxonomy.cdm.persistence.dao.common.OperationNotSupportedInPriorViewException;
13
14
15 public class RandomOrder extends OrderHint {
16 private final static String PROPERTY_NAME = "uselessAnyways";
17
18 public RandomOrder() {
19 super(RandomOrder.PROPERTY_NAME,SortOrder.ASCENDING);
20 }
21
22 @Override
23 public void add(Criteria criteria, Map<String, Criteria> criteriaMap) {
24 criteria.addOrder(new RandomHibernateOrder());
25 }
26
27 public class RandomHibernateOrder extends Order {
28
29 protected RandomHibernateOrder() {
30 super(RandomOrder.PROPERTY_NAME, true);
31 }
32
33
34 @Override
35 public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
36 throws HibernateException {
37 StringBuilder fragment = new StringBuilder();
38 fragment.append(" rand()");
39 return StringHelper.replace(fragment.toString(), "{alias}",
40 criteriaQuery.getSQLAlias(criteria));
41 }
42 }
43 @Override
44 public void add(AuditQuery query) {
45 throw new OperationNotSupportedInPriorViewException("You cannot sort in a random order in the history view");
46 }
47 }