DefaultElementConverter.java

  1. package com.gh.mygreen.xlsmapper.cellconverter;

  2. import java.math.BigDecimal;
  3. import java.math.BigInteger;
  4. import java.util.HashMap;
  5. import java.util.Map;

  6. import com.gh.mygreen.xlsmapper.util.ArgUtils;
  7. import com.gh.mygreen.xlsmapper.util.Utils;
  8. /**
  9.  * 標準の{@link ElementConverter}の実装クラス。
  10.  * <p>次の基本的な型のみ対応しています。</p>
  11.  * <ul>
  12.  *   <li>String型</li>
  13.  *   <li>プリミティブ型「boolean/char/byte/short/int/long/float/double」と、そのラッパークラス。</li>
  14.  *   <li>{@link BigDecimal}/{@link BigInteger}</li>
  15.  * </ul>
  16.  *
  17.  *
  18.  * @since 1.1
  19.  * @author T.TSUCHIE
  20.  *
  21.  */
  22. public class DefaultElementConverter implements ElementConverter<Object> {
  23.    
  24.     /** プリミティブ型のデフォルト値 */
  25.     private static final Map<Class<?>, Object> primitiveDefaults = new HashMap<>();
  26.    
  27.     static {
  28.         primitiveDefaults.put(Boolean.TYPE, Boolean.FALSE);
  29.         primitiveDefaults.put(Byte.TYPE, (byte)0);
  30.         primitiveDefaults.put(Short.TYPE, (short)0);
  31.         primitiveDefaults.put(Character.TYPE, (char)0);
  32.         primitiveDefaults.put(Integer.TYPE, 0);
  33.         primitiveDefaults.put(Long.TYPE, 0L);
  34.         primitiveDefaults.put(Float.TYPE, 0.0f);
  35.         primitiveDefaults.put(Double.TYPE, 0.0);
  36.         primitiveDefaults.put(BigInteger.class, new BigInteger("0"));
  37.         primitiveDefaults.put(BigDecimal.class, new BigDecimal("0.0"));
  38.     }
  39.    
  40.     @Override
  41.     public Object convertToObject(final String str, final Class<Object> targetClass) throws ConversionException {
  42.        
  43.         ArgUtils.notNull(targetClass, "targetClass");
  44.        
  45.         try {
  46.             if(targetClass.isAssignableFrom(String.class)) {
  47.                 return (Object) (Utils.isEmpty(str) ? null : str.toString());
  48.                
  49.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(boolean.class)) {
  50.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Boolean.TYPE) : Boolean.valueOf(str));
  51.            
  52.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(char.class)) {
  53.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Character.TYPE) : str.charAt(0));
  54.            
  55.             } else if(targetClass.isAssignableFrom(Character.class)) {
  56.                 return (Object) (Utils.isEmpty(str) ? null : str.charAt(0));
  57.                
  58.             } else if(targetClass.isAssignableFrom(Boolean.class)) {
  59.                 return (Object) (Utils.isEmpty(str) ? null : Boolean.valueOf(str));
  60.                
  61.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(short.class)) {
  62.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Short.TYPE) : Short.valueOf(str));
  63.            
  64.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(byte.class)) {
  65.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Byte.TYPE) : Byte.valueOf(str));
  66.            
  67.             } else if(targetClass.isAssignableFrom(Byte.class)) {
  68.                 return (Object) (Utils.isEmpty(str) ? null : Byte.valueOf(str));
  69.                
  70.             } else if(targetClass.isAssignableFrom(Short.class)) {
  71.                 return (Object) (Utils.isEmpty(str) ? null : Short.valueOf(str));
  72.                
  73.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(int.class)) {
  74.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Integer.TYPE) : Integer.valueOf(str));
  75.            
  76.             } else if(targetClass.isAssignableFrom(Integer.class)) {
  77.                 return (Object) (Utils.isEmpty(str) ? null : Integer.valueOf(str));
  78.                
  79.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(long.class)) {
  80.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Long.TYPE) : Long.valueOf(str));
  81.            
  82.             } else if(targetClass.isAssignableFrom(Long.class)) {
  83.                 return (Object) (Utils.isEmpty(str) ? null : Long.valueOf(str));
  84.                
  85.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(float.class)) {
  86.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Float.TYPE) : Float.valueOf(str));
  87.            
  88.             } else if(targetClass.isAssignableFrom(Float.class)) {
  89.                 return (Object) (Utils.isEmpty(str) ? null : Float.valueOf(str));
  90.                
  91.             } else if(targetClass.isPrimitive() && targetClass.isAssignableFrom(double.class)) {
  92.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(Double.TYPE) : Double.valueOf(str));
  93.            
  94.             } else if(targetClass.isAssignableFrom(Double.class)) {
  95.                 return (Object) (Utils.isEmpty(str) ? null : Double.valueOf(str));
  96.                
  97.             } else if(targetClass.isAssignableFrom(BigInteger.class)) {
  98.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(BigInteger.class) : new BigInteger(str));
  99.                
  100.             } else if(targetClass.isAssignableFrom(BigDecimal.class)) {
  101.                 return (Object) (Utils.isEmpty(str) ? primitiveDefaults.get(BigDecimal.class) : new BigDecimal(str));
  102.             }
  103.        
  104.         } catch(NumberFormatException e) {
  105.             throw new ConversionException(String.format("Cannot convert string to %s.", str), e, targetClass);
  106.         }
  107.        
  108.         throw new ConversionException(String.format("Cannot convert string to Object [%s].", targetClass.getName()), targetClass);
  109.        
  110.     }
  111.    
  112.     @Override
  113.     public String convertToString(final Object value) {
  114.        
  115.         if(value == null) {
  116.             return "";
  117.         }
  118.        
  119.         return value.toString();
  120.        
  121.     }
  122.    
  123. }