01: //$Id: Order.java 7495 2005-07-15 16:52:10Z oneovthafew $
02: package org.hibernate.criterion;
03:
04: import java.io.Serializable;
05: import java.sql.Types;
06:
07: import org.hibernate.Criteria;
08: import org.hibernate.HibernateException;
09: import org.hibernate.engine.SessionFactoryImplementor;
10: import org.hibernate.type.Type;
11:
12: /**
13: * Represents an order imposed upon a <tt>Criteria</tt> result set
14: * @author Gavin King
15: */
16: public class Order implements Serializable {
17:
18: private boolean ascending;
19: private boolean ignoreCase;
20: private String propertyName;
21:
22: public String toString() {
23: return propertyName + ' ' + (ascending ? "asc" : "desc");
24: }
25:
26: public Order ignoreCase() {
27: ignoreCase = true;
28: return this ;
29: }
30:
31: /**
32: * Constructor for Order.
33: */
34: protected Order(String propertyName, boolean ascending) {
35: this .propertyName = propertyName;
36: this .ascending = ascending;
37: }
38:
39: /**
40: * Render the SQL fragment
41: *
42: */
43: public String toSqlString(Criteria criteria,
44: CriteriaQuery criteriaQuery) throws HibernateException {
45: String[] columns = criteriaQuery.getColumnsUsingProjection(
46: criteria, propertyName);
47: Type type = criteriaQuery.getTypeUsingProjection(criteria,
48: propertyName);
49: StringBuffer fragment = new StringBuffer();
50: for (int i = 0; i < columns.length; i++) {
51: SessionFactoryImplementor factory = criteriaQuery
52: .getFactory();
53: boolean lower = ignoreCase
54: && type.sqlTypes(factory)[i] == Types.VARCHAR;
55: if (lower) {
56: fragment.append(
57: factory.getDialect().getLowercaseFunction())
58: .append('(');
59: }
60: fragment.append(columns[i]);
61: if (lower)
62: fragment.append(')');
63: fragment.append(ascending ? " asc" : " desc");
64: if (i < columns.length - 1)
65: fragment.append(", ");
66: }
67: return fragment.toString();
68: }
69:
70: /**
71: * Ascending order
72: *
73: * @param propertyName
74: * @return Order
75: */
76: public static Order asc(String propertyName) {
77: return new Order(propertyName, true);
78: }
79:
80: /**
81: * Descending order
82: *
83: * @param propertyName
84: * @return Order
85: */
86: public static Order desc(String propertyName) {
87: return new Order(propertyName, false);
88: }
89:
90: }
|