/*
|
* Copyright (C) 2003, 2004, 2005, 2006 Joe Walnes.
|
* Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 XStream Committers.
|
* All rights reserved.
|
*
|
* The software in this package is published under the terms of the BSD
|
* style license a copy of which has been included with this distribution in
|
* the LICENSE.txt file.
|
*
|
* Created on 26. September 2003 by Joe Walnes
|
*/
|
package com.awsle.aibatis.xml.engine.alias;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
public class DefaultClassMapper implements ClassMapper {
|
|
private Map typeToNameMap = new HashMap();
|
private Map nameToTypeMap = new HashMap();
|
private Map baseTypeToDefaultTypeMap = new HashMap();
|
|
public DefaultClassMapper() {
|
// register primitive types
|
baseTypeToDefaultTypeMap.put(boolean.class, Boolean.class);
|
baseTypeToDefaultTypeMap.put(char.class, Character.class);
|
baseTypeToDefaultTypeMap.put(int.class, Integer.class);
|
baseTypeToDefaultTypeMap.put(float.class, Float.class);
|
baseTypeToDefaultTypeMap.put(double.class, Double.class);
|
baseTypeToDefaultTypeMap.put(short.class, Short.class);
|
baseTypeToDefaultTypeMap.put(byte.class, Byte.class);
|
baseTypeToDefaultTypeMap.put(long.class, Long.class);
|
}
|
|
public void alias(String elementName, Class type, Class defaultImplementation) {
|
nameToTypeMap.put(elementName, type.getName());
|
typeToNameMap.put(type, elementName);
|
if (!type.equals(defaultImplementation)) {
|
typeToNameMap.put(defaultImplementation, elementName);
|
}
|
baseTypeToDefaultTypeMap.put(type, defaultImplementation);
|
}
|
|
public String lookupName(Class type) {
|
boolean isArray = type.isArray();
|
if (type.isArray()) {
|
type = type.getComponentType();
|
}
|
String result = (String) typeToNameMap.get(type);
|
if (result == null) {
|
// the $ used in inner class names is illegal as an xml element name
|
result = type.getName().replaceAll("\\$", "-");
|
}
|
if (isArray) {
|
result += "-array";
|
}
|
return result;
|
}
|
|
public Class lookupType(String elementName) {
|
if (elementName.equals("null")) {
|
return null;
|
}
|
boolean isArray = elementName.endsWith("-array");
|
if (isArray) {
|
elementName = elementName.substring(0, elementName.length() - 6); // cut off -array
|
}
|
String mappedName = (String) nameToTypeMap.get(elementName);
|
if (mappedName != null) {
|
elementName = mappedName;
|
}
|
// the $ used in inner class names is illegal as an xml element name
|
elementName = elementName.replaceAll("\\-", "\\$");
|
try {
|
if (isArray) {
|
return Class.forName("[L" + elementName + ";");
|
} else {
|
return Class.forName(elementName);
|
}
|
} catch (ClassNotFoundException e) {
|
throw new CannotResolveClassException(elementName);
|
}
|
}
|
|
public Class lookupDefaultType(Class baseType) {
|
return (Class) baseTypeToDefaultTypeMap.get(baseType);
|
}
|
|
}
|