View Javadoc

1   /*
2    * Copyright 2001-2004 The Apache Software Foundation.
3    * 
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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      // ----------------------------------------------------------- Constructors
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      // ----------------------------------------------------- Instance Variables
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      // --------------------------------------------------------- Public Methods
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 }