1 | |
|
2 | |
|
3 | |
|
4 | |
|
5 | |
|
6 | |
|
7 | |
|
8 | |
|
9 | |
|
10 | |
|
11 | |
|
12 | |
|
13 | |
|
14 | |
|
15 | |
|
16 | |
|
17 | |
|
18 | |
|
19 | |
|
20 | |
|
21 | |
|
22 | |
package org.webmacro.util; |
23 | |
|
24 | |
|
25 | |
|
26 | |
|
27 | |
|
28 | |
|
29 | |
|
30 | |
public final class CastUtil |
31 | |
{ |
32 | |
|
33 | 40 | static private CastUtil _singleton = new CastUtil(); |
34 | |
|
35 | |
|
36 | |
private CastUtil () |
37 | 40 | { |
38 | 40 | } |
39 | |
|
40 | |
public static CastUtil getInstance () |
41 | |
{ |
42 | 0 | return _singleton; |
43 | |
} |
44 | |
|
45 | |
public static Boolean toBoolean (java.lang.Object o) |
46 | |
{ |
47 | 0 | if (o == null) return Boolean.FALSE; |
48 | 0 | return Boolean.valueOf(o.toString()); |
49 | |
} |
50 | |
|
51 | |
public static Character toChar (Object o) throws org.webmacro.PropertyException |
52 | |
{ |
53 | 0 | Character c = null; |
54 | 0 | if (o == null || o == "") return null; |
55 | 0 | if (o instanceof Character) return (Character) o; |
56 | 0 | if (o instanceof Number) |
57 | |
{ |
58 | |
try |
59 | |
{ |
60 | 0 | c = new Character((char) ((Number) o).intValue()); |
61 | |
} |
62 | 0 | catch (Exception e) |
63 | |
{ |
64 | 0 | throw new IllegalArgumentException( |
65 | |
"Not a valid char: " + |
66 | |
o.toString() + "; type=" + o.getClass().getName()); |
67 | 0 | } |
68 | |
} |
69 | 0 | else if (o instanceof String) |
70 | |
{ |
71 | 0 | String s = (String) o; |
72 | 0 | if (s.startsWith("\\u") && s.length() == 6) |
73 | |
{ |
74 | |
|
75 | 0 | int i = Integer.parseInt(s.substring(2), 16); |
76 | 0 | c = new Character((char) i); |
77 | 0 | } |
78 | |
else |
79 | |
{ |
80 | 0 | char ch = s.charAt(0); |
81 | 0 | c = new Character(ch); |
82 | |
} |
83 | 0 | } |
84 | |
else |
85 | |
{ |
86 | 0 | throw new org.webmacro.PropertyException( |
87 | |
"$Type.toChar() is unable to convert the supplied value to a Character." + |
88 | |
" The argument" |
89 | |
+ " must be a number or a String. The supplied argument was " |
90 | |
+ o + " of type " + o.getClass().getName()); |
91 | |
} |
92 | 0 | return c; |
93 | |
} |
94 | |
|
95 | |
public static Byte toByte (java.lang.Object o) |
96 | |
{ |
97 | 0 | if (o instanceof Byte) return (Byte) o; |
98 | 0 | Byte v = null; |
99 | |
try |
100 | |
{ |
101 | 0 | int i = Integer.parseInt(o.toString()); |
102 | 0 | v = new Byte((byte) i); |
103 | |
} |
104 | 0 | catch (Exception e) |
105 | |
{ |
106 | 0 | throw new IllegalArgumentException("Not a valid byte: " + |
107 | |
((o == null) ? "null" : |
108 | |
(o.toString() + "; type=" + o.getClass().getName()))); |
109 | 0 | } |
110 | 0 | return v; |
111 | |
} |
112 | |
|
113 | |
public static Short toShort (java.lang.Object o) |
114 | |
{ |
115 | 0 | if (o instanceof Short) return (Short) o; |
116 | 0 | Short v = null; |
117 | |
try |
118 | |
{ |
119 | 0 | int i = Integer.parseInt(o.toString()); |
120 | 0 | v = new Short((short) i); |
121 | |
} |
122 | 0 | catch (Exception e) |
123 | |
{ |
124 | 0 | throw new IllegalArgumentException("Not a valid short: " + |
125 | |
((o == null) ? "null" : |
126 | |
(o.toString() + "; type=" + o.getClass().getName()))); |
127 | 0 | } |
128 | 0 | return v; |
129 | |
} |
130 | |
|
131 | |
public static Integer toInt (java.lang.Object o) |
132 | |
{ |
133 | 0 | Integer i = null; |
134 | 0 | if (o instanceof Integer) return (Integer) o; |
135 | |
try |
136 | |
{ |
137 | 0 | i = new Integer(o.toString()); |
138 | |
} |
139 | 0 | catch (Exception e) |
140 | |
{ |
141 | 0 | throw new IllegalArgumentException( |
142 | |
"Not a valid int: " + |
143 | |
((o == null) ? "null" : |
144 | |
(o.toString() + "; type=" + o.getClass().getName()))); |
145 | 0 | } |
146 | 0 | return i; |
147 | |
} |
148 | |
|
149 | |
public static Long toLong (java.lang.Object o) |
150 | |
{ |
151 | 0 | Long l = null; |
152 | 0 | if (o instanceof Long) return (Long) o; |
153 | |
try |
154 | |
{ |
155 | 0 | l = new Long(o.toString()); |
156 | |
} |
157 | 0 | catch (Exception e) |
158 | |
{ |
159 | 0 | throw new IllegalArgumentException("Not a valid long: " + |
160 | |
((o == null) ? "null" : |
161 | |
(o.toString() + "; type=" + o.getClass().getName()))); |
162 | 0 | } |
163 | 0 | return l; |
164 | |
} |
165 | |
|
166 | |
public static Float toFloat (java.lang.Object o) |
167 | |
{ |
168 | 0 | Float f = null; |
169 | 0 | if (o instanceof Float) return (Float) o; |
170 | |
try |
171 | |
{ |
172 | 0 | f = new Float(o.toString()); |
173 | |
} |
174 | 0 | catch (Exception e) |
175 | |
{ |
176 | 0 | throw new IllegalArgumentException( |
177 | |
"Not a valid float: " + ((o == null) ? "null" : |
178 | |
(o.toString() + "; type=" + o.getClass().getName()))); |
179 | 0 | } |
180 | 0 | return f; |
181 | |
} |
182 | |
|
183 | |
public static Double toDouble (java.lang.Object o) |
184 | |
{ |
185 | 0 | Double d = null; |
186 | 0 | if (o instanceof Double) return (Double) o; |
187 | |
try |
188 | |
{ |
189 | 0 | d = new Double(o.toString()); |
190 | |
} |
191 | 0 | catch (Exception e) |
192 | |
{ |
193 | 0 | throw new IllegalArgumentException( |
194 | |
"Not a valid double: " + ((o == null) ? "null" : |
195 | |
(o.toString() + "; type=" + o.getClass().getName()))); |
196 | 0 | } |
197 | 0 | return d; |
198 | |
} |
199 | |
|
200 | |
public static String toString(java.lang.Object o) { |
201 | 0 | return (o != null ? o.toString() : null); |
202 | |
} |
203 | |
|
204 | |
static public void main (String[] args) |
205 | |
{ |
206 | 0 | println("77" |
207 | |
+ test(BOOLEAN, "77") |
208 | |
+ test(CHAR, "77") |
209 | |
+ test(BYTE, "77") |
210 | |
+ test(SHORT, "77") |
211 | |
+ test(INTEGER, "77") |
212 | |
+ test(LONG, "77") |
213 | |
+ test(FLOAT, "77") |
214 | |
+ test(DOUBLE, "77") |
215 | |
+ "."); |
216 | 0 | println("true: " + test(BOOLEAN, "true") + "."); |
217 | 0 | println("FalSE: " + test(BOOLEAN, "FalSE") + "."); |
218 | 0 | println("null: " + test(BOOLEAN, null) + "."); |
219 | 0 | } |
220 | |
|
221 | |
static private void println (String s) |
222 | |
{ |
223 | 0 | System.out.println(s); |
224 | 0 | } |
225 | |
|
226 | |
final static public int BOOLEAN = 1; |
227 | |
final static public int CHAR = 2; |
228 | |
final static public int BYTE = 3; |
229 | |
final static public int SHORT = 4; |
230 | |
final static public int INTEGER = 5; |
231 | |
final static public int LONG = 6; |
232 | |
final static public int FLOAT = 7; |
233 | |
final static public int DOUBLE = 8; |
234 | |
|
235 | |
static private String test (int type, Object val) |
236 | |
{ |
237 | 0 | String s = null; |
238 | |
try |
239 | |
{ |
240 | 0 | Object o = null; |
241 | 0 | switch (type) |
242 | |
{ |
243 | |
case BOOLEAN: |
244 | 0 | o = toBoolean(val); |
245 | 0 | break; |
246 | |
case CHAR: |
247 | 0 | o = toChar(val); |
248 | 0 | break; |
249 | |
case BYTE: |
250 | 0 | o = toByte(val); |
251 | 0 | break; |
252 | |
case SHORT: |
253 | 0 | o = toShort(val); |
254 | 0 | break; |
255 | |
case INTEGER: |
256 | 0 | o = toInt(val); |
257 | 0 | break; |
258 | |
case LONG: |
259 | 0 | o = toLong(val); |
260 | 0 | break; |
261 | |
case FLOAT: |
262 | 0 | o = toFloat(val); |
263 | 0 | break; |
264 | |
case DOUBLE: |
265 | 0 | o = toDouble(val); |
266 | 0 | break; |
267 | |
default: |
268 | 0 | throw new IllegalArgumentException("Unknown type: " + type); |
269 | |
} |
270 | 0 | s = ", " + o + " (" + o.getClass().getName() + ")"; |
271 | |
} |
272 | 0 | catch (Exception e) |
273 | |
{ |
274 | 0 | e.printStackTrace(); |
275 | 0 | } |
276 | 0 | return s; |
277 | |
} |
278 | |
|
279 | |
} |