KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > dozer > util > mapping > converters > PrimitiveOrWrapperConverter


1 /*
2  * Copyright 2005-2007 the original author or authors.
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 package net.sf.dozer.util.mapping.converters;
17
18 import java.math.BigDecimal JavaDoc;
19 import java.math.BigInteger JavaDoc;
20 import java.util.Calendar JavaDoc;
21 import java.util.HashMap JavaDoc;
22 import java.util.Map JavaDoc;
23
24 import net.sf.dozer.util.mapping.util.DateFormatContainer;
25
26 import org.apache.commons.beanutils.Converter;
27 import org.apache.commons.beanutils.converters.BigDecimalConverter;
28 import org.apache.commons.beanutils.converters.BigIntegerConverter;
29 import org.apache.commons.beanutils.converters.BooleanConverter;
30 import org.apache.commons.beanutils.converters.ByteConverter;
31 import org.apache.commons.beanutils.converters.CharacterConverter;
32 import org.apache.commons.beanutils.converters.DoubleConverter;
33 import org.apache.commons.beanutils.converters.FloatConverter;
34 import org.apache.commons.beanutils.converters.IntegerConverter;
35 import org.apache.commons.beanutils.converters.LongConverter;
36 import org.apache.commons.beanutils.converters.ShortConverter;
37
38 /**
39  * @author tierney.matt
40  * @author garsombke.franz
41  * @author benson.matt
42  */

43 public class PrimitiveOrWrapperConverter {
44   private static final Map JavaDoc PRIMITIVE_TYPE_MAP = new HashMap JavaDoc();
45   private static final Map JavaDoc CONVERTER_MAP = new HashMap JavaDoc();
46   private static final Converter DEFAULT_CONVERTER = new StringConstructorConverter();
47   
48   static {
49     // Set up PRIMITIVE_TYPE_MAP:
50
Class JavaDoc[] primitives = { Boolean.TYPE, Byte.TYPE, Character.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE };
51     Class JavaDoc[] wrappers = { Boolean JavaDoc.class, Byte JavaDoc.class, Character JavaDoc.class, Short JavaDoc.class, Integer JavaDoc.class, Long JavaDoc.class, Float JavaDoc.class, Double JavaDoc.class };
52     for (int i = 0; i < primitives.length; i++) {
53       PRIMITIVE_TYPE_MAP.put(primitives[i], wrappers[i]);
54     }
55     // Set up CONVERTER_MAP:
56
CONVERTER_MAP.put(Integer JavaDoc.class, new IntegerConverter());
57     CONVERTER_MAP.put(Double JavaDoc.class, new DoubleConverter());
58     CONVERTER_MAP.put(Short JavaDoc.class, new ShortConverter());
59     CONVERTER_MAP.put(Character JavaDoc.class, new CharacterConverter());
60     CONVERTER_MAP.put(Long JavaDoc.class, new LongConverter());
61     CONVERTER_MAP.put(Boolean JavaDoc.class, new BooleanConverter());
62     CONVERTER_MAP.put(Byte JavaDoc.class, new ByteConverter());
63     CONVERTER_MAP.put(Float JavaDoc.class, new FloatConverter());
64     CONVERTER_MAP.put(BigDecimal JavaDoc.class, new BigDecimalConverter());
65     CONVERTER_MAP.put(BigInteger JavaDoc.class, new BigIntegerConverter());
66   }
67   
68   public Object JavaDoc convert(Object JavaDoc sourceFieldValue, Class JavaDoc destFieldClass, DateFormatContainer dateFormatContainer) {
69     if (sourceFieldValue == null || destFieldClass == null
70         || (sourceFieldValue.equals("") && !destFieldClass.equals(String JavaDoc.class))) {
71       return null;
72     }
73     Converter converter = getPrimitiveOrWrapperConverter(destFieldClass, dateFormatContainer);
74     try {
75       return converter.convert(destFieldClass, sourceFieldValue);
76     } catch (org.apache.commons.beanutils.ConversionException e) {
77       throw new net.sf.dozer.util.mapping.converters.ConversionException(e);
78     }
79   }
80   
81   private Converter getPrimitiveOrWrapperConverter(Class JavaDoc destClass, DateFormatContainer dateFormatContainer) {
82     if (String JavaDoc.class.equals(destClass)) {
83       return new StringConverter(dateFormatContainer);
84     }
85
86     Converter result = (Converter) CONVERTER_MAP.get(destClass.isPrimitive() ? wrapPrimitive(destClass) : destClass);
87     
88     if (result == null) {
89       if (java.util.Date JavaDoc.class.isAssignableFrom(destClass)) {
90         result = new DateConverter(dateFormatContainer.getDateFormat());
91       }
92       if (Calendar JavaDoc.class.isAssignableFrom(destClass)) {
93         result = new CalendarConverter(dateFormatContainer.getDateFormat());
94       }
95     }
96     return result == null ? DEFAULT_CONVERTER : result;
97   }
98   
99   private Class JavaDoc wrapPrimitive(Class JavaDoc c) {
100     return (Class JavaDoc) PRIMITIVE_TYPE_MAP.get(c);
101   }
102   
103 }
Popular Tags