/*
* Copyright (c) 2009 Mysema Ltd.
* All rights reserved.
*
*/
package com.mysema.rdfbean.beangen;
import java.util.HashMap;
import java.util.Map;
import com.google.common.primitives.Primitives;
import com.mysema.codegen.model.ClassType;
import com.mysema.codegen.model.SimpleType;
import com.mysema.codegen.model.Type;
import com.mysema.codegen.model.TypeCategory;
import com.mysema.codegen.model.Types;
import com.mysema.rdfbean.model.ID;
import com.mysema.rdfbean.model.RDF;
import com.mysema.rdfbean.model.RDFS;
import com.mysema.rdfbean.model.UID;
import com.mysema.rdfbean.model.XSD;
import com.mysema.rdfbean.xsd.Year;
/**
* @author tiwe
*/
public class TypeMapping {
private static final Type YEAR = new ClassType(TypeCategory.COMPARABLE, Year.class);
private final Map<UID, Type> datatypeToType = new HashMap<UID, Type>();
private final boolean usePrimitives;
private Type defaultType;
public TypeMapping(boolean usePrimitives) {
this.usePrimitives = usePrimitives;
register(RDF.text, Types.STRING);
register(XSD.anyURI, Types.URI);
register(XSD.booleanType, Types.BOOLEAN);
register(XSD.byteType, Types.BYTE);
register(XSD.decimalType, Types.BIG_DECIMAL);
register(XSD.doubleType, Types.DOUBLE);
// duration
register(XSD.floatType, Types.FLOAT);
// gDay
// gMonth
// gMonthDay
// gYear
register(XSD.gYear, YEAR);
// gYearMonth
register(XSD.integerType, Types.BIG_INTEGER);
register(XSD.intType, Types.INT);
register(XSD.longType, Types.LONG);
register(XSD.shortType, Types.SHORT);
register(XSD.stringType, Types.STRING);
register(RDFS.Literal, Types.STRING);
register(XSD.date, Types.LOCAL_DATE); // joda-time
register(XSD.dateTime, Types.DATE_TIME); // joda-time
register(XSD.time, Types.LOCAL_TIME); // joda-time
defaultType = datatypeToType.get(XSD.stringType);
}
private void register(UID uid, Type type) {
if (usePrimitives && Primitives.isWrapperType(type.getJavaClass())) {
String name = Primitives.unwrap(type.getJavaClass()).getName();
type = new SimpleType(type.getCategory(), "java.lang." + name, "java.lang", name, true, true);
}
datatypeToType.put(uid, type);
}
public Type getDefaultType() {
return defaultType;
}
public void setDefaultType(Type type) {
this.defaultType = type;
}
public boolean containsKey(ID id) {
return datatypeToType.containsKey(id);
}
public Type get(ID id) {
return datatypeToType.get(id);
}
}