View Javadoc

1   /*
2    * Joey and its relative products are published under the terms
3    * of the Apache Software License.
4    */
5   /*
6    * Created on 2004/02/19
7    */
8   package org.asyrinx.joey.om.hibernate;
9   
10  import java.text.DateFormat;
11  import java.text.ParseException;
12  import java.util.Date;
13  import java.util.Map;
14  
15  import org.apache.commons.lang.exception.NestableRuntimeException;
16  import org.asyrinx.brownie.core.sql.Operator;
17  import org.asyrinx.brownie.core.sql2.Select;
18  import org.asyrinx.joey.om.ConditionTranslator;
19  import org.asyrinx.joey.om.SearchCondition;
20  
21  /***
22   * @author akima
23   */
24  public class HqlTranslator
25  	extends AbstractHibernateTranslator
26  	implements ConditionTranslator {
27  
28  	/***
29  	 * 
30  	 */
31  	public HqlTranslator(Map columnToProperty, Map tableToClass) {
32  		super(columnToProperty, tableToClass);
33  	}
34  
35  	protected final Select dynamicSelect = new Select();
36  
37  	/***
38  	 * @see org.asyrinx.joey.om.ConditionTranslater#addFrom(java.lang.String)
39  	 */
40  	public void addFrom(String tableName) {
41  		tableName = toClass(tableName);
42  		dynamicSelect.getFromTables().add(tableName);
43  	}
44  
45  	/***
46  	 * @see org.asyrinx.joey.om.ConditionTranslater#addAscendingOrderByColumn(java.lang.String)
47  	 */
48  	public void addAscendingOrderByColumn(String fieldName) {
49  		fieldName = toFieldName(fieldName);
50  		dynamicSelect.getOrderByFields().add(fieldName);
51  	}
52  
53  	/***
54  	 * @see org.asyrinx.joey.om.ConditionTranslater#addDate(java.lang.String, java.lang.String, java.lang.Object, java.text.DateFormat)
55  	 */
56  	public void addDate(
57  		String fieldName,
58  		Object value,
59  		Object operator,
60  		DateFormat dateFormat) {
61  		fieldName = toFieldName(fieldName);
62  		try {
63  			final Date d =
64  				(value instanceof Date)
65  					? (Date) value
66  					: dateFormat.parse(String.valueOf(value));
67  			dynamicSelect.getWhereConditions().add(
68  				fieldName,
69  				d,
70  				Operator.get(operator));
71  		} catch (ParseException e) {
72  			throw new NestableRuntimeException(e);
73  		}
74  	}
75  
76  	/***
77  	 * @see org.asyrinx.joey.om.ConditionTranslater#addDescendingOrderByColumn(java.lang.String)
78  	 */
79  	public void addDescendingOrderByColumn(String fieldName) {
80  		fieldName = toFieldName(fieldName);
81  		dynamicSelect.getOrderByFields().add(fieldName + " desc");
82  	}
83  
84  	/***
85  	 * @see org.asyrinx.joey.om.ConditionTranslater#addInt(java.lang.String, java.lang.String, java.lang.Object)
86  	 */
87  	public void addInt(String fieldName, Object value, Object operator) {
88  		fieldName = toFieldName(fieldName);
89  		final Object val = toNumber(value, Integer.class);
90  		if (val == null)
91  			return;
92  		dynamicSelect.getWhereConditions().add(
93  			fieldName,
94  			val,
95  			Operator.get(operator));
96  	}
97  
98  	/***
99  	 * @see org.asyrinx.joey.om.ConditionTranslater#addLong(java.lang.String, java.lang.String, java.lang.Object)
100 	 */
101 	public void addLong(String fieldName, Object value, Object operator) {
102 		fieldName = toFieldName(fieldName);
103 		final Object val = toNumber(value, Long.class);
104 		if (val == null)
105 			return;
106 		dynamicSelect.getWhereConditions().add(
107 			fieldName,
108 			val,
109 			Operator.get(operator));
110 	}
111 
112 	/***
113 	 * @see org.asyrinx.joey.om.ConditionTranslater#addString(java.lang.String, java.lang.String, java.lang.Object)
114 	 */
115 	public void addString(String fieldName, Object value, Object operator) {
116 		fieldName = toFieldName(fieldName);
117 		dynamicSelect.getWhereConditions().add(
118 			fieldName,
119 			value,
120 			Operator.get(operator));
121 	}
122 
123 	public String toHQL(SearchCondition condition) {
124 		condition.attach(this);
125 		final String result = dynamicSelect.toSql();
126 		log.info(result);
127 		return result;
128 	}
129 
130 }