1. /**
  2. * Copyright: Copyright (c) 2005-2005
  3. * Company: JavaResearch(http://www.javaresearch.org)
  4. */
  5. package org.javaresearch.jerch;
  6. import java.util.HashMap;
  7. /**
  8. * 值转换工厂。
  9. * 最后更新日期:2005年3月28日
  10. * @author cherami
  11. */
  12. public class ValueConverterFactory {
  13. /**
  14. * 值类型转换映射。
  15. */
  16. private static HashMap converterMap = new HashMap();
  17. static {
  18. registerDefaultValueConverter();
  19. }
  20. /**
  21. * 值转换方法,将根据original的类型取得对应的类型的转换器并转换为目标类型。
  22. * @param original 原始值
  23. * @param targetType 目标类型
  24. * @param useSuper 找不到完全匹配的类型时是否使用父类的转换器
  25. * @return 转换后的值,如果没有对应的类型的转换器则直接返回原值。
  26. */
  27. public static Object convert(Object original, Class targetType,boolean useSuper) {
  28. ValueConverter converter = getValueConverter(original.getClass(),useSuper);
  29. if (converter != null) {
  30. return converter.convert(original, targetType);
  31. } else {
  32. return original;
  33. }
  34. }
  35. /**
  36. * 值转换方法,将根据original的类型取得对应的类型的转换器并转换为目标类型,
  37. * 没有完全匹配的类型时使用父类的类型进行转换。
  38. * @param original 原始值
  39. * @param targetType 目标类型
  40. * @return 转换后的值,如果没有对应的类型的转换器则直接返回原值。
  41. */
  42. public static Object convert(Object original, Class targetType) {
  43. return convert(original,targetType,true);
  44. }
  45. /**
  46. * 得到类型对应的转换器。
  47. * @param type 类型
  48. * @param useSuper 没有完全匹配的类型时是否使用父类的转换器
  49. * @return 对应的转换器,没有时返回null。
  50. */
  51. public static ValueConverter getValueConverter(Class type,boolean useSuper) {
  52. if (useSuper) {
  53. ValueConverter converter = (ValueConverter) converterMap.get(type);
  54. while (converter==null) {
  55. type=type.getSuperclass();
  56. if (type!=null) {
  57. converter = (ValueConverter) converterMap.get(type);
  58. } else {
  59. return null;
  60. }
  61. }
  62. return converter;
  63. } else {
  64. return (ValueConverter) converterMap.get(type);
  65. }
  66. }
  67. /**
  68. * 注册类型对应的转换器。
  69. * @param type 原值类型
  70. * @param valueConverter 转换器
  71. */
  72. public static void registerValueConverter(Class type,ValueConverter valueConverter) {
  73. converterMap.put(type, valueConverter);
  74. }
  75. /**
  76. * 注册系统缺省的转换器。
  77. */
  78. private static void registerDefaultValueConverter() {
  79. new NumberValueConverter();
  80. }
  81. }