Merged from trunk to statistics branch
[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.internal.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 private static final long serialVersionUID = 8231534219451938847L;
29
30
31 protected RandomHibernateOrder() {
32 super(RandomOrder.PROPERTY_NAME, true);
33 }
34
35
36 @Override
37 public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
38 throws HibernateException {
39 StringBuilder fragment = new StringBuilder();
40 fragment.append(" rand()");
41 return StringHelper.replace(fragment.toString(), "{alias}",
42 criteriaQuery.getSQLAlias(criteria));
43 }
44 }
45
46 @Override
47 public void add(AuditQuery query) {
48 throw new OperationNotSupportedInPriorViewException("You cannot sort in a random order in the history view");
49 }
50 }