View Javadoc
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 }