1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.jxpath.util;
18
19 import java.util.HashMap;
20
21 /**
22 * Global type conversion utilities.
23 *
24 * @author Dmitri Plotnikov
25 * @version $Revision: 652845 $ $Date: 2008-05-02 13:46:46 -0400 (Fri, 02 May 2008) $
26 */
27 public class TypeUtils {
28 private static TypeConverter typeConverter = new BasicTypeConverter();
29 private static final HashMap PRIMITIVE_TYPE_MAP = new HashMap() {
30 {
31 put(int.class, Integer.class);
32 put(byte.class, Byte.class);
33 put(short.class, Short.class);
34 put(char.class, Character.class);
35 put(long.class, Long.class);
36 put(float.class, Float.class);
37 put(double.class, Double.class);
38 put(boolean.class, Boolean.class);
39 }
40 };
41
42 /**
43 * Install an alternative type converter.
44 * @param converter new TypeConverter
45 */
46 public static synchronized void setTypeConverter(TypeConverter converter) {
47 typeConverter = converter;
48 }
49
50 /**
51 * Returns the current type converter.
52 * @return TypeConverter
53 */
54 public static TypeConverter getTypeConverter() {
55 return typeConverter;
56 }
57
58 /**
59 * Returns true if the global converter can convert the supplied
60 * object to the specified type.
61 * @param object object to test
62 * @param toType target class
63 * @return boolean
64 */
65 public static boolean canConvert(Object object, Class toType) {
66 return typeConverter.canConvert(object, toType);
67 }
68
69 /**
70 * Converts the supplied object to the specified type. May
71 * throw a RuntimeException.
72 * @param object object to convert
73 * @param toType target class
74 * @return resulting Object
75 */
76 public static Object convert(Object object, Class toType) {
77 return typeConverter.convert(object, toType);
78 }
79
80 /**
81 * Return the appropriate wrapper type for the specified class.
82 * @param p Class for which to retrieve a wrapper class.
83 * @return the wrapper if <code>p</code> is primitive, else <code>p</code>.
84 * @since JXPath 1.3
85 */
86 public static Class wrapPrimitive(Class p) {
87 return p.isPrimitive() ? (Class) PRIMITIVE_TYPE_MAP.get(p) : p;
88 }
89 }