View Javadoc
1   /*******************************************************************************
2    *   Gisgraphy Project 
3    * 
4    *   This library is free software; you can redistribute it and/or
5    *   modify it under the terms of the GNU Lesser General Public
6    *   License as published by the Free Software Foundation; either
7    *   version 2.1 of the License, or (at your option) any later version.
8    * 
9    *   This library is distributed in the hope that it will be useful,
10   *   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12   *   Lesser General Public License for more details.
13   * 
14   *   You should have received a copy of the GNU Lesser General Public
15   *   License along with this library; if not, write to the Free Software
16   *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
17   * 
18   *  Copyright 2008  Gisgraphy project 
19   *  David Masclet <davidmasclet@gisgraphy.com>
20   *  
21   *  
22   *******************************************************************************/
23  package com.gisgraphy.hibernate.criterion;
24  
25  import org.hibernate.Criteria;
26  import org.hibernate.HibernateException;
27  import org.hibernate.criterion.CriteriaQuery;
28  import org.hibernate.criterion.Order;
29  
30  /**
31   * A criteria that sort by an already added projection
32   * 
33   * @author <a href="mailto:david.masclet@gisgraphy.com">David Masclet</a>
34   */
35  public class ProjectionOrder extends Order {
36  
37      private static final long serialVersionUID = -6838585369943470201L;
38      private String aliasName;
39      private boolean ascending = true;
40  
41      /**
42       * @param aliasName
43       *                The name of the alias we'd like to sort
44       * @param ascending
45       *                Whether we sort Ascending or descending
46       */
47      public ProjectionOrder(String aliasName, boolean ascending) {
48  	super(null, ascending);
49  	this.aliasName = aliasName;
50  	this.ascending = ascending;
51      }
52  
53      /**
54       * @param aliasName
55       *                The name of the alias we'd like to sort, default sorting
56       *                is ascending
57       */
58      public ProjectionOrder(String aliasName) {
59  	super(null, true);
60  	this.aliasName = aliasName;
61      }
62  
63      /*
64       * (non-Javadoc)
65       * 
66       * @see org.hibernate.criterion.Order#toSqlString(org.hibernate.Criteria,
67       *      org.hibernate.criterion.CriteriaQuery)
68       */
69      @Override
70      public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)
71  	    throws HibernateException {
72  	Order nso = new NativeSQLOrder(criteriaQuery.getColumnsUsingProjection(
73  		criteria, aliasName)[0], this.ascending);
74  	return nso.toSqlString(criteria, criteriaQuery);
75  
76      }
77  
78  }