001    /**
002     * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portal.kernel.dao.orm;
016    
017    import com.liferay.portal.kernel.util.CalendarUtil;
018    
019    import java.sql.Timestamp;
020    
021    import java.util.Date;
022    
023    /**
024     * @author Brian Wing Shun Chan
025     * @author Shuyang Zhou
026     */
027    public class QueryPos {
028    
029            public static QueryPos getInstance(Query query) {
030                    return new QueryPos(query);
031            }
032    
033            public void add(boolean value) {
034                    _query.setBoolean(_pos++, value);
035            }
036    
037            public void add(Boolean value) {
038                    if (value != null) {
039                            _query.setBoolean(_pos++, value.booleanValue());
040                    }
041                    else {
042                            _addNull();
043                    }
044            }
045    
046            public void add(boolean[] values) {
047                    add(values, _DEFAULT_ARRAY_COUNT);
048            }
049    
050            public void add(boolean[] values, int count) {
051                    for (int i = 0; i < values.length; i++) {
052                            for (int j = 0; j < count; j++) {
053                                    add(values[i]);
054                            }
055                    }
056            }
057    
058            public void add(Boolean[] values) {
059                    add(values, _DEFAULT_ARRAY_COUNT);
060            }
061    
062            public void add(Boolean[] values, int count) {
063                    for (int i = 0; i < values.length; i++) {
064                            for (int j = 0; j < count; j++) {
065                                    add(values[i]);
066                            }
067                    }
068            }
069    
070            public void add(double value) {
071                    _query.setDouble(_pos++, value);
072            }
073    
074            public void add(Double value) {
075                    if (value != null) {
076                            _query.setDouble(_pos++, value.doubleValue());
077                    }
078                    else {
079                            _addNull();
080                    }
081            }
082    
083            public void add(double[] values) {
084                    add(values, _DEFAULT_ARRAY_COUNT);
085            }
086    
087            public void add(double[] values, int count) {
088                    for (int i = 0; i < values.length; i++) {
089                            for (int j = 0; j < count; j++) {
090                                    add(values[i]);
091                            }
092                    }
093            }
094    
095            public void add(Double[] values) {
096                    add(values, _DEFAULT_ARRAY_COUNT);
097            }
098    
099            public void add(Double[] values, int count) {
100                    for (int i = 0; i < values.length; i++) {
101                            for (int j = 0; j < count; j++) {
102                                    add(values[i]);
103                            }
104                    }
105            }
106    
107            public void add(float value) {
108                    _query.setFloat(_pos++, value);
109            }
110    
111            public void add(Float value) {
112                    if (value != null) {
113                            _query.setFloat(_pos++, value.intValue());
114                    }
115                    else {
116                            _addNull();
117                    }
118            }
119    
120            public void add(float[] values) {
121                    add(values, _DEFAULT_ARRAY_COUNT);
122            }
123    
124            public void add(float[] values, int count) {
125                    for (int i = 0; i < values.length; i++) {
126                            for (int j = 0; j < count; j++) {
127                                    add(values[i]);
128                            }
129                    }
130            }
131    
132            public void add(Float[] values) {
133                    add(values, _DEFAULT_ARRAY_COUNT);
134            }
135    
136            public void add(Float[] values, int count) {
137                    for (int i = 0; i < values.length; i++) {
138                            for (int j = 0; j < count; j++) {
139                                    add(values[i]);
140                            }
141                    }
142            }
143    
144            public void add(int value) {
145                    _query.setInteger(_pos++, value);
146            }
147    
148            public void add(int[] values) {
149                    add(values, _DEFAULT_ARRAY_COUNT);
150            }
151    
152            public void add(int[] values, int count) {
153                    for (int i = 0; i < values.length; i++) {
154                            for (int j = 0; j < count; j++) {
155                                    add(values[i]);
156                            }
157                    }
158            }
159    
160            public void add(Integer value) {
161                    if (value != null) {
162                            _query.setInteger(_pos++, value.intValue());
163                    }
164                    else {
165                            _addNull();
166                    }
167            }
168    
169            public void add(Integer[] values) {
170                    add(values, _DEFAULT_ARRAY_COUNT);
171            }
172    
173            public void add(Integer[] values, int count) {
174                    for (int i = 0; i < values.length; i++) {
175                            for (int j = 0; j < count; j++) {
176                                    add(values[i]);
177                            }
178                    }
179            }
180    
181            public void add(long value) {
182                    _query.setLong(_pos++, value);
183            }
184    
185            public void add(Long value) {
186                    if (value != null) {
187                            _query.setLong(_pos++, value.longValue());
188                    }
189                    else {
190                            _addNull();
191                    }
192            }
193    
194            public void add(long[] values) {
195                    add(values, _DEFAULT_ARRAY_COUNT);
196            }
197    
198            public void add(long[] values, int count) {
199                    for (int i = 0; i < values.length; i++) {
200                            for (int j = 0; j < count; j++) {
201                                    add(values[i]);
202                            }
203                    }
204            }
205    
206            public void add(Long[] values) {
207                    add(values, _DEFAULT_ARRAY_COUNT);
208            }
209    
210            public void add(Long[] values, int count) {
211                    for (int i = 0; i < values.length; i++) {
212                            for (int j = 0; j < count; j++) {
213                                    add(values[i]);
214                            }
215                    }
216            }
217    
218            public void add(Object obj) {
219                    if (obj == null) {
220                            _addNull();
221    
222                            return;
223                    }
224    
225                    Class<?> classObj = obj.getClass();
226    
227                    if (classObj == Boolean.class) {
228                            add(((Boolean)obj).booleanValue());
229                    }
230                    else if (classObj == Date.class) {
231                            add(CalendarUtil.getTimestamp((Date)obj));
232                    }
233                    else if (classObj == Double.class) {
234                            add(((Double)obj).doubleValue());
235                    }
236                    else if (classObj == Float.class) {
237                            add(((Float)obj).floatValue());
238                    }
239                    else if (classObj == Integer.class) {
240                            add(((Integer)obj).intValue());
241                    }
242                    else if (classObj == Long.class) {
243                            add(((Long)obj).longValue());
244                    }
245                    else if (classObj == Short.class) {
246                            add(((Short)obj).shortValue());
247                    }
248                    else if (classObj == String.class) {
249                            add((String)obj);
250                    }
251                    else if (classObj == Timestamp.class) {
252                            add((Timestamp)obj);
253                    }
254                    else {
255                            throw new RuntimeException("Unsupport type " + classObj.getName());
256                    }
257            }
258    
259            public void add(short value) {
260                    _query.setShort(_pos++, value);
261            }
262    
263            public void add(Short value) {
264                    if (value != null) {
265                            _query.setShort(_pos++, value.shortValue());
266                    }
267                    else {
268                            _addNull();
269                    }
270            }
271    
272            public void add(short[] values) {
273                    add(values, _DEFAULT_ARRAY_COUNT);
274            }
275    
276            public void add(short[] values, int count) {
277                    for (int i = 0; i < values.length; i++) {
278                            for (int j = 0; j < count; j++) {
279                                    add(values[i]);
280                            }
281                    }
282            }
283    
284            public void add(Short[] values) {
285                    add(values, _DEFAULT_ARRAY_COUNT);
286            }
287    
288            public void add(Short[] values, int count) {
289                    for (int i = 0; i < values.length; i++) {
290                            for (int j = 0; j < count; j++) {
291                                    add(values[i]);
292                            }
293                    }
294            }
295    
296            public void add(String value) {
297                    _query.setString(_pos++, value);
298            }
299    
300            public void add(String[] values) {
301                    add(values, _DEFAULT_ARRAY_COUNT);
302            }
303    
304            public void add(String[] values, int count) {
305                    for (int i = 0; i < values.length; i++) {
306                            for (int j = 0; j < count; j++) {
307                                    add(values[i]);
308                            }
309                    }
310            }
311    
312            public void add(Timestamp value) {
313                    _query.setTimestamp(_pos++, value);
314            }
315    
316            public void add(Timestamp[] values) {
317                    add(values, _DEFAULT_ARRAY_COUNT);
318            }
319    
320            public void add(Timestamp[] values, int count) {
321                    for (int i = 0; i < values.length; i++) {
322                            for (int j = 0; j < count; j++) {
323                                    add(values[i]);
324                            }
325                    }
326            }
327    
328            public int getPos() {
329                    return _pos;
330            }
331    
332            private QueryPos(Query query) {
333                    _query = query;
334            }
335    
336            private void _addNull() {
337                    _query.setSerializable(_pos++, null);
338            }
339    
340            private static final int _DEFAULT_ARRAY_COUNT = 1;
341    
342            private int _pos;
343            private Query _query;
344    
345    }