View Javadoc
1 package com.thoughtworks.xstream.alias; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public class DefaultClassMapper implements ClassMapper { 7 8 private Map typeToNameMap = new HashMap(); 9 private Map nameToTypeMap = new HashMap(); 10 private Map baseTypeToDefaultTypeMap = new HashMap(); 11 12 public DefaultClassMapper() { 13 // register primitive types 14 baseTypeToDefaultTypeMap.put(boolean.class, Boolean.class); 15 baseTypeToDefaultTypeMap.put(char.class, Character.class); 16 baseTypeToDefaultTypeMap.put(int.class, Integer.class); 17 baseTypeToDefaultTypeMap.put(float.class, Float.class); 18 baseTypeToDefaultTypeMap.put(double.class, Double.class); 19 baseTypeToDefaultTypeMap.put(short.class, Short.class); 20 baseTypeToDefaultTypeMap.put(byte.class, Byte.class); 21 baseTypeToDefaultTypeMap.put(long.class, Long.class); 22 } 23 24 public void alias(String elementName, Class type, Class defaultImplementation) { 25 nameToTypeMap.put(elementName, type.getName()); 26 typeToNameMap.put(type, elementName); 27 if (!type.equals(defaultImplementation)) { 28 typeToNameMap.put(defaultImplementation, elementName); 29 } 30 baseTypeToDefaultTypeMap.put(type, defaultImplementation); 31 } 32 33 public String lookupName(Class type) { 34 boolean isArray = type.isArray(); 35 if (type.isArray()) { 36 type = type.getComponentType(); 37 } 38 String result = (String) typeToNameMap.get(type); 39 if (result == null) { 40 // the $ used in inner class names is illegal as an xml element name 41 result = type.getName().replaceAll("//$", "-"); 42 } 43 if (isArray) { 44 result += "-array"; 45 } 46 return result; 47 } 48 49 public Class lookupType(String elementName) { 50 if (elementName.equals("null")) { 51 return null; 52 } 53 boolean isArray = elementName.endsWith("-array"); 54 if (isArray) { 55 elementName = elementName.substring(0, elementName.length() - 6); // cut off -array 56 } 57 String mappedName = (String) nameToTypeMap.get(elementName); 58 if (mappedName != null) { 59 elementName = mappedName; 60 } 61 // the $ used in inner class names is illegal as an xml element name 62 elementName = elementName.replaceAll("//-", "//$"); 63 try { 64 if (isArray) { 65 return Class.forName("[L" + elementName + ";"); 66 } else { 67 return Class.forName(elementName); 68 } 69 } catch (ClassNotFoundException e) { 70 throw new CannotResolveClassException(elementName); 71 } 72 } 73 74 public Class lookupDefaultType(Class baseType) { 75 return (Class) baseTypeToDefaultTypeMap.get(baseType); 76 } 77 78 }

This page was automatically generated by Maven