1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.kernel.dao.orm;
16  
17  import com.liferay.portal.kernel.util.CalendarUtil;
18  
19  import java.sql.Timestamp;
20  
21  import java.util.Date;
22  
23  /**
24   * <a href="QueryPos.java.html"><b><i>View Source</i></b></a>
25   *
26   * @author Brian Wing Shun Chan
27   * @author Shuyang Zhou
28   */
29  public class QueryPos {
30  
31      public static QueryPos getInstance(Query query) {
32          return new QueryPos(query);
33      }
34  
35      public void add(boolean value) {
36          _query.setBoolean(_pos++, value);
37      }
38  
39      public void add(Boolean value) {
40          if (value != null) {
41              _query.setBoolean(_pos++, value.booleanValue());
42          }
43          else {
44              _addNull();
45          }
46      }
47  
48      public void add(boolean[] values) {
49          add(values, _DEFAULT_ARRAY_COUNT);
50      }
51  
52      public void add(boolean[] values, int count) {
53          for (int i = 0; i < values.length; i++) {
54              for (int j = 0; j < count; j++) {
55                  add(values[i]);
56              }
57          }
58      }
59  
60      public void add(Boolean[] values) {
61          add(values, _DEFAULT_ARRAY_COUNT);
62      }
63  
64      public void add(Boolean[] values, int count) {
65          for (int i = 0; i < values.length; i++) {
66              for (int j = 0; j < count; j++) {
67                  add(values[i]);
68              }
69          }
70      }
71  
72      public void add(double value) {
73          _query.setDouble(_pos++, value);
74      }
75  
76      public void add(Double value) {
77          if (value != null) {
78              _query.setDouble(_pos++, value.doubleValue());
79          }
80          else {
81              _addNull();
82          }
83      }
84  
85      public void add(double[] values) {
86          add(values, _DEFAULT_ARRAY_COUNT);
87      }
88  
89      public void add(double[] values, int count) {
90          for (int i = 0; i < values.length; i++) {
91              for (int j = 0; j < count; j++) {
92                  add(values[i]);
93              }
94          }
95      }
96  
97      public void add(Double[] values) {
98          add(values, _DEFAULT_ARRAY_COUNT);
99      }
100 
101     public void add(Double[] values, int count) {
102         for (int i = 0; i < values.length; i++) {
103             for (int j = 0; j < count; j++) {
104                 add(values[i]);
105             }
106         }
107     }
108 
109     public void add(float value) {
110         _query.setFloat(_pos++, value);
111     }
112 
113     public void add(Float value) {
114         if (value != null) {
115             _query.setFloat(_pos++, value.intValue());
116         }
117         else {
118             _addNull();
119         }
120     }
121 
122     public void add(float[] values) {
123         add(values, _DEFAULT_ARRAY_COUNT);
124     }
125 
126     public void add(float[] values, int count) {
127         for (int i = 0; i < values.length; i++) {
128             for (int j = 0; j < count; j++) {
129                 add(values[i]);
130             }
131         }
132     }
133 
134     public void add(Float[] values) {
135         add(values, _DEFAULT_ARRAY_COUNT);
136     }
137 
138     public void add(Float[] values, int count) {
139         for (int i = 0; i < values.length; i++) {
140             for (int j = 0; j < count; j++) {
141                 add(values[i]);
142             }
143         }
144     }
145 
146     public void add(int value) {
147         _query.setInteger(_pos++, value);
148     }
149 
150     public void add(int[] values) {
151         add(values, _DEFAULT_ARRAY_COUNT);
152     }
153 
154     public void add(int[] values, int count) {
155         for (int i = 0; i < values.length; i++) {
156             for (int j = 0; j < count; j++) {
157                 add(values[i]);
158             }
159         }
160     }
161 
162     public void add(Integer value) {
163         if (value != null) {
164             _query.setInteger(_pos++, value.intValue());
165         }
166         else {
167             _addNull();
168         }
169     }
170 
171     public void add(Integer[] values) {
172         add(values, _DEFAULT_ARRAY_COUNT);
173     }
174 
175     public void add(Integer[] values, int count) {
176         for (int i = 0; i < values.length; i++) {
177             for (int j = 0; j < count; j++) {
178                 add(values[i]);
179             }
180         }
181     }
182 
183     public void add(long value) {
184         _query.setLong(_pos++, value);
185     }
186 
187     public void add(Long value) {
188         if (value != null) {
189             _query.setLong(_pos++, value.longValue());
190         }
191         else {
192             _addNull();
193         }
194     }
195 
196     public void add(long[] values) {
197         add(values, _DEFAULT_ARRAY_COUNT);
198     }
199 
200     public void add(long[] values, int count) {
201         for (int i = 0; i < values.length; i++) {
202             for (int j = 0; j < count; j++) {
203                 add(values[i]);
204             }
205         }
206     }
207 
208     public void add(Long[] values) {
209         add(values, _DEFAULT_ARRAY_COUNT);
210     }
211 
212     public void add(Long[] values, int count) {
213         for (int i = 0; i < values.length; i++) {
214             for (int j = 0; j < count; j++) {
215                 add(values[i]);
216             }
217         }
218     }
219 
220     public void add(Object obj) {
221         Class<?> classObj = obj.getClass();
222 
223         if (obj == null) {
224             _addNull();
225         }
226         else if (classObj == Boolean.class) {
227             add(((Boolean)obj).booleanValue());
228         }
229         else if (classObj == Date.class) {
230             add(CalendarUtil.getTimestamp((Date)obj));
231         }
232         else if (classObj == Double.class) {
233             add(((Double)obj).doubleValue());
234         }
235         else if (classObj == Float.class) {
236             add(((Float)obj).floatValue());
237         }
238         else if (classObj == Integer.class) {
239             add(((Integer)obj).intValue());
240         }
241         else if (classObj == Long.class) {
242             add(((Long)obj).longValue());
243         }
244         else if (classObj == Short.class) {
245             add(((Short)obj).shortValue());
246         }
247         else if (classObj == String.class) {
248             add((String)obj);
249         }
250         else if (classObj == Timestamp.class) {
251             add((Timestamp)obj);
252         }
253         else {
254             throw new RuntimeException("Unsupport type " + classObj.getName());
255         }
256     }
257 
258     public void add(short value) {
259         _query.setShort(_pos++, value);
260     }
261 
262     public void add(Short value) {
263         if (value != null) {
264             _query.setShort(_pos++, value.shortValue());
265         }
266         else {
267             _addNull();
268         }
269     }
270 
271     public void add(short[] values) {
272         add(values, _DEFAULT_ARRAY_COUNT);
273     }
274 
275     public void add(short[] values, int count) {
276         for (int i = 0; i < values.length; i++) {
277             for (int j = 0; j < count; j++) {
278                 add(values[i]);
279             }
280         }
281     }
282 
283     public void add(Short[] values) {
284         add(values, _DEFAULT_ARRAY_COUNT);
285     }
286 
287     public void add(Short[] values, int count) {
288         for (int i = 0; i < values.length; i++) {
289             for (int j = 0; j < count; j++) {
290                 add(values[i]);
291             }
292         }
293     }
294 
295     public void add(String value) {
296         _query.setString(_pos++, value);
297     }
298 
299     public void add(String[] values) {
300         add(values, _DEFAULT_ARRAY_COUNT);
301     }
302 
303     public void add(String[] values, int count) {
304         for (int i = 0; i < values.length; i++) {
305             for (int j = 0; j < count; j++) {
306                 add(values[i]);
307             }
308         }
309     }
310 
311     public void add(Timestamp value) {
312         _query.setTimestamp(_pos++, value);
313     }
314 
315     public void add(Timestamp[] values) {
316         add(values, _DEFAULT_ARRAY_COUNT);
317     }
318 
319     public void add(Timestamp[] values, int count) {
320         for (int i = 0; i < values.length; i++) {
321             for (int j = 0; j < count; j++) {
322                 add(values[i]);
323             }
324         }
325     }
326 
327     public int getPos() {
328         return _pos;
329     }
330 
331     private QueryPos(Query query) {
332         _query = query;
333     }
334 
335     private void _addNull() {
336         _query.setSerializable(_pos++, null);
337     }
338 
339     private static final int _DEFAULT_ARRAY_COUNT = 1;
340 
341     private int _pos;
342     private Query _query;
343 
344 }