1 /***
2 * License Agreement.
3 *
4 * JSPA (POJO-SP)
5 *
6 * Copyright (C) 2009 HRX Pty Ltd
7 *
8 * This file is part of JSPA.
9 *
10 * JSPA is free software: you can redistribute it and/or modify it under the
11 * terms of the GNU Lesser General Public License version 3 as published by the
12 * Free Software Foundation.
13 *
14 * JSPA is distributed in the hope that it will be useful, but WITHOUT ANY
15 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16 * A PARTICULAR PURPOSE. See the Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with JSPA. If not, see <http://www.gnu.org/licenses/>.
20 */
21 package com.hrx.rasp.util.dao;
22
23 import java.math.BigDecimal;
24 import java.math.BigInteger;
25 import java.sql.Clob;
26 import java.sql.Types;
27
28 /***
29 * Class used to map the Java null type to a specific SQL NULL Type expected by
30 * IN parameters of the stored procedure
31 *
32 * @author dan.stoica <dan.stoica@acslink.net.au>
33 *
34 */
35 public class NullValue
36 {
37
38 /*** for java.lang.Boolean */
39 public static final NullValue BOOLEAN = new NullValue(Types.BIT);
40
41 /*** for java.lang.Byte */
42 public static final NullValue BYTE = new NullValue(Types.TINYINT);
43
44 /*** for java.lang.Integer */
45 public static final NullValue INTEGER = new NullValue(Types.INTEGER);
46
47 /*** For java.lang.Long */
48 public static final NullValue LONG = new NullValue(Types.BIGINT);
49
50 /*** for java.lang.Double */
51 public static final NullValue DOUBLE = new NullValue(Types.DOUBLE);
52
53 /*** For java.lang.Float */
54 public static final NullValue FLOAT = new NullValue(Types.FLOAT);
55
56 /*** For java.lang.Short */
57 public static final NullValue SHORT = new NullValue(Types.SMALLINT);
58
59 /*** For java.math.BigDecimal */
60 public static final NullValue BIGDECIMAL = new NullValue(Types.DECIMAL);
61
62 /*** for java.math.Number */
63 public static final NullValue DECIMAL = new NullValue(Types.DECIMAL);
64
65 /*** for java.sql.Date */
66 public static final NullValue DATE = new NullValue(Types.DATE);
67
68 /*** for java.lang.String */
69 public static final NullValue STRING = new NullValue(Types.VARCHAR);
70
71 /*** for java.sql.Clob */
72 public static final NullValue CLOB = new NullValue(Types.CLOB);
73
74 /*** for java.sql.BLOB */
75 public static final NullValue BLOB = new NullValue(Types.BLOB);
76
77 /*** for java.sql.Timestamp */
78 public static final NullValue TIMESTAMP = new NullValue(Types.TIMESTAMP);
79
80 /*** for java.sql.Time */
81 public static final NullValue TIME = new NullValue(Types.TIME);
82
83 /*** for char */
84 public static final NullValue CHAR = new NullValue(Types.CHAR);
85
86 /*** for Character[] */
87 public static final NullValue LONGVARCHAR = new NullValue(Types.LONGVARCHAR);
88
89 /*** For java.lang.Byte[] */
90 public static final NullValue BYTE_ARRAY = new NullValue(Types.BINARY);
91
92 /*** for Object[] */
93 public static final NullValue ARRAY = new NullValue(Types.ARRAY);
94
95 /*** for null */
96 public static final NullValue NULL = new NullValue(Types.NULL);
97
98 /***
99 * Get the underlying SQL type for this NullValue
100 *
101 * @return the SQL type
102 */
103 public int getSQLType()
104 {
105 return m_sqlType;
106 }
107
108 /***
109 * Description for getFor method
110 *
111 * @param type
112 * @return
113 */
114 public static NullValue getFor(Class<?> javaType)
115 {
116 if (javaType == String.class)
117 return STRING;
118 else if (javaType == BigDecimal.class)
119 return BIGDECIMAL;
120 else if (javaType == BigInteger.class)
121 return LONG;
122 else if (javaType == Byte.class)
123 return BYTE;
124 else if (javaType == Character.class)
125 return CHAR;
126 else if (javaType == Double.class)
127 return DOUBLE;
128 else if (javaType == Float.class)
129 return FLOAT;
130 else if (javaType == Long.class)
131 return LONG;
132 else if (javaType == Boolean.class)
133 return BOOLEAN;
134 else if (javaType == Integer.class)
135 return INTEGER;
136 else if (javaType == Number.class)
137 return DECIMAL;
138 else if (javaType == Short.class)
139 return SHORT;
140 else if (javaType == java.util.Date.class || javaType == java.sql.Timestamp.class)
141 return TIMESTAMP;
142 else if (javaType == java.util.Calendar.class)
143 return TIMESTAMP;
144 else if (javaType == java.sql.Time.class)
145 return TIME;
146 else if (javaType == java.sql.Date.class)
147 return DATE;
148 else if (javaType == java.sql.Blob.class)
149 return BLOB;
150 else if (javaType == Clob.class)
151 return CLOB;
152 else if (javaType == char[].class || javaType == Character[].class)
153 return LONGVARCHAR;
154 else if (javaType == Byte[].class || javaType == byte[].class)
155 return BYTE_ARRAY;
156 else if (javaType == null)
157 return NULL;
158 else if (javaType.isArray())
159 return ARRAY;
160 else
161 return null;
162 }
163
164 /***
165 * Protected constructor, clients use the static constants
166 *
167 * @param sqlType
168 * the SQL type
169 */
170 private NullValue(int sqlType)
171 {
172 m_sqlType = sqlType;
173 }
174
175 /*** the SQL type */
176 protected int m_sqlType;
177
178 /*** debug */
179 public String toString()
180 {
181 return "NullValue";
182 }
183 }