1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.beanutils.converters;
19
20
21 import org.apache.commons.beanutils.ConversionException;
22 import org.apache.commons.beanutils.Converter;
23
24
25 /**
26 * <p>Standard {@link Converter} implementation that converts an incoming
27 * String into a <code>java.lang.Class</code> object, optionally using a
28 * default value or throwing a {@link ConversionException} if a conversion
29 * error occurs. The class will be loaded from the thread context class
30 * loader (if it exists); otherwise the class loader that loaded this class
31 * will be used.</p>
32 *
33 * @author Tomas Viberg
34 * @version $Revision: 1.6 $ $Date: 2004/02/28 13:18:34 $
35 * @since 1.4
36 */
37
38 public final class ClassConverter implements Converter {
39
40
41
42
43
44 /**
45 * Create a {@link Converter} that will throw a {@link ConversionException}
46 * if a conversion error occurs.
47 */
48 public ClassConverter() {
49
50 this.defaultValue = null;
51 this.useDefault = false;
52
53 }
54
55
56 /**
57 * Create a {@link Converter} that will return the specified default value
58 * if a conversion error occurs.
59 *
60 * @param defaultValue The default value to be returned
61 */
62 public ClassConverter(Object defaultValue) {
63
64 this.defaultValue = defaultValue;
65 this.useDefault = true;
66
67 }
68
69
70
71
72
73 /**
74 * The default value specified to our Constructor, if any.
75 */
76 private Object defaultValue = null;
77
78
79 /**
80 * Should we return the default value on conversion errors?
81 */
82 private boolean useDefault = true;
83
84
85
86
87
88 /**
89 * Convert the specified input object into an output object of the
90 * specified type.
91 *
92 * @param type Data type to which this value should be converted
93 * @param value The input value to be converted
94 *
95 * @exception ConversionException if conversion cannot be performed
96 * successfully
97 */
98 public Object convert(Class type, Object value) {
99
100 if (value == null) {
101 if (useDefault) {
102 return (defaultValue);
103 } else {
104 throw new ConversionException("No value specified");
105 }
106 }
107
108 if (value instanceof Class) {
109 return (value);
110 }
111
112 try {
113 ClassLoader classLoader =
114 Thread.currentThread().getContextClassLoader();
115 if (classLoader == null) {
116 classLoader = ClassConverter.class.getClassLoader();
117 }
118 return (classLoader.loadClass(value.toString()));
119 } catch (Exception e) {
120 if (useDefault) {
121 return (defaultValue);
122 } else {
123 throw new ConversionException(e);
124 }
125 }
126
127 }
128
129
130 }