1 55 56 package org.apache.bsf.util.type; 57 58 import java.awt.Color ; 59 import java.awt.Font ; 60 import java.util.*; 61 62 71 public class TypeConvertorRegistry { 72 Hashtable reg = new Hashtable (); 73 Hashtable keyedReg = new Hashtable (); 74 75 public TypeConvertorRegistry () { 77 TypeConvertor tc = new TypeConvertor () { 79 public Object convert (Class from, Class to, Object obj) { 80 return obj; 81 } 82 83 public String getCodeGenString() { 84 return "(Class from, Class to, Object obj) {\n" + 85 "return obj;\n" + 86 "}"; 87 } 88 }; 89 register (Boolean .class, boolean.class, tc); 90 register (boolean.class, Boolean .class, tc); 91 register (Byte .class, byte.class, tc); 92 register (byte.class, Byte .class, tc); 93 register (Character .class, char.class, tc); 94 register (char.class, Character .class, tc); 95 register (Short .class, short.class, tc); 96 register (short.class, Short .class, tc); 97 register (Integer .class, int.class, tc); 98 register (int.class, Integer .class, tc); 99 register (Long .class, long.class, tc); 100 register (long.class, Long .class, tc); 101 register (Float .class, float.class, tc); 102 register (float.class, Float .class, tc); 103 register (Double .class, double.class, tc); 104 register (double.class, Double .class, tc); 105 106 tc = new TypeConvertor () { 110 public Object convert (Class from, Class to, Object obj) { 111 return (obj == null) ? "(null)" : obj.toString (); 112 } 113 114 public String getCodeGenString() { 115 return "(Class from, Class to, Object obj) {\n" + 116 "return (obj == null) ? \"(null)\" : obj.toString ();\n" + 117 "}"; 118 } 119 }; 120 register (Object .class, String .class, tc); 121 122 tc = new TypeConvertor () { 125 public Object convert (Class from, Class to, Object obj) { 126 String str = (String ) obj; 127 if (to == Boolean .class || to == boolean.class) { 128 return Boolean.valueOf (str); 129 } else if (to == Byte .class || to == byte.class) { 130 return Byte.valueOf (str); 131 } else if (to == Character .class || to == char.class) { 132 return new Character (str.charAt (0)); 133 } else if (to == Short .class || to == short.class) { 134 return Short.valueOf (str); 135 } else if (to == Integer .class || to == int.class) { 136 return Integer.valueOf (str); 137 } else if (to == Long .class || to == long.class) { 138 return Long.valueOf (str); 139 } else if (to == Float .class || to == float.class) { 140 return Float.valueOf (str); 141 } else if (to == Double .class || to == double.class) { 142 return Double.valueOf (str); 143 } else { 144 return null; 145 } 146 } 147 148 public String getCodeGenString() { 149 return "(Class from, Class to, Object obj) {\n" + 150 "String str = (String) obj;\n" + 151 "if (to == Boolean.class || to == boolean.class) {\n" + 152 "return Boolean.valueOf (str);\n" + 153 "} else if (to == Byte.class || to == byte.class) {\n" + 154 "return Byte.valueOf (str);\n" + 155 "} else if (to == Character.class || to == char.class) {\n" + 156 "return new Character (str.charAt (0));\n" + 157 "} else if (to == Short.class || to == short.class) {\n" + 158 "return Short.valueOf (str);\n" + 159 "} else if (to == Integer.class || to == int.class) {\n" + 160 "return Integer.valueOf (str);\n" + 161 "} else if (to == Long.class || to == long.class) {\n" + 162 "return Long.valueOf (str);\n" + 163 "} else if (to == Float.class || to == float.class) {\n" + 164 "return Float.valueOf (str);\n" + 165 "} else if (to == Double.class || to == double.class) {\n" + 166 "return Double.valueOf (str);\n" + 167 "} else {\n" + 168 "return null;\n" + 169 "}\n" + 170 "}"; 171 } 172 }; 173 register (String .class, boolean.class, tc); 174 register (String .class, Boolean .class, tc); 175 register (String .class, byte.class, tc); 176 register (String .class, Byte .class, tc); 177 register (String .class, char.class, tc); 178 register (String .class, Character .class, tc); 179 register (String .class, short.class, tc); 180 register (String .class, Short .class, tc); 181 register (String .class, int.class, tc); 182 register (String .class, Integer .class, tc); 183 register (String .class, long.class, tc); 184 register (String .class, Long .class, tc); 185 register (String .class, float.class, tc); 186 register (String .class, Float .class, tc); 187 register (String .class, double.class, tc); 188 register (String .class, Double .class, tc); 189 190 tc = new TypeConvertor () { 192 public Object convert (Class from, Class to, Object obj) { 193 return Font.decode ((String ) obj); 194 } 195 196 public String getCodeGenString() { 197 return "(Class from, Class to, Object obj) {\n" + 198 "return Font.decode ((String) obj);\n" + 199 "}"; 200 } 201 }; 202 register (String .class, Font .class, tc); 203 204 tc = new TypeConvertor () { 206 public Object convert (Class from, Class to, Object obj) { 207 return Color.decode ((String ) obj); 208 } 209 210 public String getCodeGenString() { 211 return "(Class from, Class to, Object obj) {\n" + 212 "return Color.decode ((String) obj);\n" + 213 "}"; 214 } 215 }; 216 register (String .class, Color .class, tc); 217 } 218 public TypeConvertor lookup (Class from, Class to) { 220 String key = from.getName () + " -> " + to.getName (); 221 TypeConvertor tc = (TypeConvertor) reg.get (key); 222 if (tc == null) { 223 Class objectClass = Object .class; 224 if (from != void.class 225 && from != Void .class 226 && to == String .class) { 227 return lookup (Object .class, String .class); 229 } 230 } 231 return tc; 232 } 233 public TypeConvertor lookupByKey (Object key) { 235 return (TypeConvertor) keyedReg.get (key); 236 } 237 public void register (Class from, Class to, TypeConvertor convertor) { 239 String key = from.getName () + " -> " + to.getName (); 240 reg.put (key, convertor); 241 } 242 public void registerByKey (Object key, TypeConvertor convertor) { 244 keyedReg.put (key, convertor); 245 } 246 } 247 | Popular Tags |