001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
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(Date value) {
071                    add(CalendarUtil.getTimestamp(value));
072            }
073    
074            public void add(Date[] values) {
075                    add(values, _DEFAULT_ARRAY_COUNT);
076            }
077    
078            public void add(Date[] values, int count) {
079                    for (int i = 0; i < values.length; i++) {
080                            for (int j = 0; j < count; j++) {
081                                    add(CalendarUtil.getTimestamp(values[i]));
082                            }
083                    }
084            }
085    
086            public void add(double value) {
087                    _query.setDouble(_pos++, value);
088            }
089    
090            public void add(Double value) {
091                    if (value != null) {
092                            _query.setDouble(_pos++, value.doubleValue());
093                    }
094                    else {
095                            _addNull();
096                    }
097            }
098    
099            public void add(double[] values) {
100                    add(values, _DEFAULT_ARRAY_COUNT);
101            }
102    
103            public void add(double[] values, int count) {
104                    for (int i = 0; i < values.length; i++) {
105                            for (int j = 0; j < count; j++) {
106                                    add(values[i]);
107                            }
108                    }
109            }
110    
111            public void add(Double[] values) {
112                    add(values, _DEFAULT_ARRAY_COUNT);
113            }
114    
115            public void add(Double[] values, int count) {
116                    for (int i = 0; i < values.length; i++) {
117                            for (int j = 0; j < count; j++) {
118                                    add(values[i]);
119                            }
120                    }
121            }
122    
123            public void add(float value) {
124                    _query.setFloat(_pos++, value);
125            }
126    
127            public void add(Float value) {
128                    if (value != null) {
129                            _query.setFloat(_pos++, value.intValue());
130                    }
131                    else {
132                            _addNull();
133                    }
134            }
135    
136            public void add(float[] values) {
137                    add(values, _DEFAULT_ARRAY_COUNT);
138            }
139    
140            public void add(float[] values, int count) {
141                    for (int i = 0; i < values.length; i++) {
142                            for (int j = 0; j < count; j++) {
143                                    add(values[i]);
144                            }
145                    }
146            }
147    
148            public void add(Float[] values) {
149                    add(values, _DEFAULT_ARRAY_COUNT);
150            }
151    
152            public void add(Float[] 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(int value) {
161                    _query.setInteger(_pos++, value);
162            }
163    
164            public void add(int[] values) {
165                    add(values, _DEFAULT_ARRAY_COUNT);
166            }
167    
168            public void add(int[] values, int count) {
169                    for (int i = 0; i < values.length; i++) {
170                            for (int j = 0; j < count; j++) {
171                                    add(values[i]);
172                            }
173                    }
174            }
175    
176            public void add(Integer value) {
177                    if (value != null) {
178                            _query.setInteger(_pos++, value.intValue());
179                    }
180                    else {
181                            _addNull();
182                    }
183            }
184    
185            public void add(Integer[] values) {
186                    add(values, _DEFAULT_ARRAY_COUNT);
187            }
188    
189            public void add(Integer[] values, int count) {
190                    for (int i = 0; i < values.length; i++) {
191                            for (int j = 0; j < count; j++) {
192                                    add(values[i]);
193                            }
194                    }
195            }
196    
197            public void add(long value) {
198                    _query.setLong(_pos++, value);
199            }
200    
201            public void add(Long value) {
202                    if (value != null) {
203                            _query.setLong(_pos++, value.longValue());
204                    }
205                    else {
206                            _addNull();
207                    }
208            }
209    
210            public void add(long[] values) {
211                    add(values, _DEFAULT_ARRAY_COUNT);
212            }
213    
214            public void add(long[] values, int count) {
215                    for (int i = 0; i < values.length; i++) {
216                            for (int j = 0; j < count; j++) {
217                                    add(values[i]);
218                            }
219                    }
220            }
221    
222            public void add(Long[] values) {
223                    add(values, _DEFAULT_ARRAY_COUNT);
224            }
225    
226            public void add(Long[] values, int count) {
227                    for (int i = 0; i < values.length; i++) {
228                            for (int j = 0; j < count; j++) {
229                                    add(values[i]);
230                            }
231                    }
232            }
233    
234            public void add(Object obj) {
235                    if (obj == null) {
236                            _addNull();
237    
238                            return;
239                    }
240    
241                    Class<?> clazz = obj.getClass();
242    
243                    if (clazz == Boolean.class) {
244                            add(((Boolean)obj).booleanValue());
245                    }
246                    else if (clazz == Date.class) {
247                            add(CalendarUtil.getTimestamp((Date)obj));
248                    }
249                    else if (clazz == Double.class) {
250                            add(((Double)obj).doubleValue());
251                    }
252                    else if (clazz == Float.class) {
253                            add(((Float)obj).floatValue());
254                    }
255                    else if (clazz == Integer.class) {
256                            add(((Integer)obj).intValue());
257                    }
258                    else if (clazz == Long.class) {
259                            add(((Long)obj).longValue());
260                    }
261                    else if (clazz == Short.class) {
262                            add(((Short)obj).shortValue());
263                    }
264                    else if (clazz == String.class) {
265                            add((String)obj);
266                    }
267                    else if (clazz == Timestamp.class) {
268                            add((Timestamp)obj);
269                    }
270                    else {
271                            throw new RuntimeException("Unsupport type " + clazz.getName());
272                    }
273            }
274    
275            public void add(short value) {
276                    _query.setShort(_pos++, value);
277            }
278    
279            public void add(Short value) {
280                    if (value != null) {
281                            _query.setShort(_pos++, value.shortValue());
282                    }
283                    else {
284                            _addNull();
285                    }
286            }
287    
288            public void add(short[] values) {
289                    add(values, _DEFAULT_ARRAY_COUNT);
290            }
291    
292            public void add(short[] values, int count) {
293                    for (int i = 0; i < values.length; i++) {
294                            for (int j = 0; j < count; j++) {
295                                    add(values[i]);
296                            }
297                    }
298            }
299    
300            public void add(Short[] values) {
301                    add(values, _DEFAULT_ARRAY_COUNT);
302            }
303    
304            public void add(Short[] 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(String value) {
313                    _query.setString(_pos++, value);
314            }
315    
316            public void add(String[] values) {
317                    add(values, _DEFAULT_ARRAY_COUNT);
318            }
319    
320            public void add(String[] 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 void add(Timestamp value) {
329                    _query.setTimestamp(_pos++, value);
330            }
331    
332            public void add(Timestamp[] values) {
333                    add(values, _DEFAULT_ARRAY_COUNT);
334            }
335    
336            public void add(Timestamp[] values, int count) {
337                    for (int i = 0; i < values.length; i++) {
338                            for (int j = 0; j < count; j++) {
339                                    add(values[i]);
340                            }
341                    }
342            }
343    
344            public int getPos() {
345                    return _pos;
346            }
347    
348            private QueryPos(Query query) {
349                    _query = query;
350            }
351    
352            private void _addNull() {
353                    _query.setSerializable(_pos++, null);
354            }
355    
356            private static final int _DEFAULT_ARRAY_COUNT = 1;
357    
358            private int _pos;
359            private Query _query;
360    
361    }