Project

General

Profile

Download (1.79 KB) Statistics
| Branch: | Tag: | Revision:
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 NativeSqlOrderHint extends OrderHint {
16
	private final static String PROPERTY_NAME = "uselessAnyways";
17
	private String nativeSQL;
18

    
19
	public NativeSqlOrderHint(String nativeSQL, SortOrder sortOrder) {
20
		super(NativeSqlOrderHint.PROPERTY_NAME,sortOrder);
21
		this.nativeSQL = nativeSQL;
22
    }
23
	
24
	@Override
25
	public void add(Criteria criteria, Map<String, Criteria> criteriaMap) {
26
		criteria.addOrder(new NativeSqlHibernateOrder(this.getSortOrder().equals(SortOrder.ASCENDING) ? true : false,nativeSQL));
27
	}
28
    
29
	public class NativeSqlHibernateOrder extends Order {
30
		private String nativeSQL;
31
		private Boolean ascending;
32

    
33
		protected NativeSqlHibernateOrder(Boolean ascending, String nativeSQL) {
34
			super(NativeSqlOrderHint.PROPERTY_NAME, ascending);
35
			this.nativeSQL = nativeSQL; 
36
			this.ascending = ascending;
37
		}
38
		
39

    
40
		@Override
41
		public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
42
		    StringBuilder fragment = new StringBuilder();
43
//		    fragment.append("(");
44
		    fragment.append(this.nativeSQL);
45
//		    fragment.append(")");
46
		    fragment.append(ascending ? " asc" : " desc");
47
		    return StringHelper.replace(fragment.toString(), "{alias}", criteriaQuery.getSQLAlias(criteria));
48
		} 
49
	}
50
	@Override
51
	public void add(AuditQuery query) {
52
			throw new OperationNotSupportedInPriorViewException("You cannot sort using native SQL in  history view");
53
	}
54
}
(5-5/7)