1 /***
2 * Copyright (c) 2003 held jointly by the individual authors.
3 *
4 * This library is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License as published
6 * by the Free Software Foundation; either version 2.1 of the License, or
7 * (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; with out even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; if not, write to the Free Software Foundation,
16 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17 *
18 * > http://www.gnu.org/copyleft/lesser.html
19 * > http://www.opensource.org/licenses/lgpl-license.php
20 */
21 package net.mlw.vlh.adapter.jdbc.util.setter;
22
23 import java.sql.PreparedStatement;
24 import java.sql.SQLException;
25 import java.sql.Timestamp;
26 import java.text.ParseException;
27 import java.text.SimpleDateFormat;
28 import java.util.Calendar;
29 import java.util.Date;
30
31 /***
32 * Sets a <code>java.sql.Types.TIMESTAMP</code> on a query using <code>PreparedStatement.setTimestamp()</code>.
33 * Conversion is provided for types <code>java.sql.Timestamp</code>, <code>java.util.Date</code>, <code>java.util.Calendar</code>.
34 * Conversion from a string is provided using a formater - the default format is "MM/dd/yyyy".
35 *
36 * @see PreparedStatement#setTimestamp(int, java.sql.Timestamp)
37 *
38 * @author Matthew L. Wilson
39 * @version $Revision: 1.6 $ $Date: 2005/12/19 10:56:41 $
40 */
41 public class TimestampSetter extends AbstractSetter
42 {
43 public static final String DEFAULT_FORMAT = "MM/dd/yyyy";
44
45 protected SimpleDateFormat formatter = new SimpleDateFormat(DEFAULT_FORMAT);
46
47 /***
48 * @see net.mlw.vlh.adapter.jdbc.util.Setter#set(java.sql.PreparedStatement, int, java.lang.Object)
49 */
50 public int set(PreparedStatement query, int index, Object value) throws SQLException, ParseException
51 {
52
53 if (value == null || value instanceof Timestamp)
54 {
55 Timestamp timestamp = (Timestamp) value;
56 query.setTimestamp(index++, timestamp);
57 }
58 else if (value instanceof Date)
59 {
60 Date date = (Date) value;
61 Timestamp timestamp = new Timestamp(date.getTime());
62 query.setTimestamp(index++, timestamp);
63 }
64 else if (value instanceof Calendar)
65 {
66 Calendar calendar = (Calendar) value;
67 Timestamp timestamp = new Timestamp(calendar.getTimeInMillis());
68 query.setTimestamp(index++, timestamp);
69 }
70 else if (value instanceof String)
71 {
72 Date date = formatter.parse((String) value);
73 Timestamp timestamp = new Timestamp(date.getTime());
74 query.setTimestamp(index++, timestamp);
75 }
76 else
77 {
78 throw new IllegalArgumentException("Cannot convert object of type " + value.getClass().getName() + " to timestamp at position "
79 + index);
80 }
81
82 return index;
83 }
84
85 /***
86 * @param format The format to set.
87 */
88 public void setFormat(String format)
89 {
90 formatter = new SimpleDateFormat(format);
91 }
92 }