package com.taobao.tddl.common.utils.convertor; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 定义自己的convertor仓库 * * @author jianghang 2011-5-25 下午10:16:10 */ public class ConvertorRepository { private static final String SEPERATOR = ":"; private static String int_name = Integer.class.getName(); private static String short_name = Short.class.getName(); private static String long_name = Long.class.getName(); private static String char_name = Character.class.getName(); private static String void_name = Void.class.getName(); private static String double_name = Double.class.getName(); private static String float_name = Float.class.getName(); private static String byte_name = Byte.class.getName(); private static String bool_name = Boolean.class.getName(); private Map<String, Convertor> convertors = new ConcurrentHashMap<String, Convertor>(10); public Convertor getConvertor(Class src, Class dest) { // 按照src->dest来取映射 return convertors.get(mapperConvertorName(src, dest)); } public Convertor getConvertor(String alias) { return convertors.get(alias); } public void registerConvertor(Class src, Class dest, Convertor convertor) { String key = mapperConvertorName(src, dest); // 对于已经注册的convert,进行覆盖处理 if (convertor != null) { convertors.put(key, convertor); } } public void registerConvertor(String alias, Convertor convertor) { // 对于已经注册的convert,进行覆盖处理 if (convertor != null) { convertors.put(alias, convertor); } } // ========================= helper method =================== private String mapperConvertorName(Class src, Class dest) { String name1 = getName(src); String name2 = getName(dest); return name1 + SEPERATOR + name2; } private String getName(Class type) { if (type.isPrimitive()) { if (type == int.class) { return int_name; } else if (type == short.class) { return short_name; } else if (type == long.class) { return long_name; } else if (type == char.class) { return char_name; } else if (type == void.class) { return void_name; } else if (type == double.class) { return double_name; } else if (type == float.class) { return float_name; } else if (type == byte.class) { return byte_name; } else if (type == boolean.class) { return bool_name; } } return type.getName(); } }