/* * Redistribution and use of this software and associated documentation * ("Software"), with or without modification, are permitted provided * that the following conditions are met: * * 1. Redistributions of source code must retain copyright * statements and notices. Redistributions must also contain a * copy of this document. * * 2. Redistributions in binary form must reproduce the * above copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * * 3. The name "Exolab" must not be used to endorse or promote * products derived from this Software without prior written * permission of Intalio, Inc. For written permission, * please contact info@exolab.org. * * 4. Products derived from this Software may not be called "Exolab" * nor may "Exolab" appear in their names without prior written * permission of Intalio, Inc. Exolab is a registered * trademark of Intalio, Inc. * * 5. Due credit should be given to the Exolab Project * (http://www.exolab.org/). * * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * * Copyright 1999-2002 (C) Intalio Inc. All Rights Reserved. * * $Id$ */ package org.exolab.castor.builder; import java.util.Enumeration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.exolab.castor.builder.types.XSAnyURI; import org.exolab.castor.builder.types.XSBase64Binary; import org.exolab.castor.builder.types.XSBoolean; import org.exolab.castor.builder.types.XSByte; import org.exolab.castor.builder.types.XSClass; import org.exolab.castor.builder.types.XSDate; import org.exolab.castor.builder.types.XSDateTime; import org.exolab.castor.builder.types.XSDecimal; import org.exolab.castor.builder.types.XSDouble; import org.exolab.castor.builder.types.XSDuration; import org.exolab.castor.builder.types.XSFloat; import org.exolab.castor.builder.types.XSGDay; import org.exolab.castor.builder.types.XSGMonth; import org.exolab.castor.builder.types.XSGMonthDay; import org.exolab.castor.builder.types.XSGYear; import org.exolab.castor.builder.types.XSGYearMonth; import org.exolab.castor.builder.types.XSHexBinary; import org.exolab.castor.builder.types.XSId; import org.exolab.castor.builder.types.XSIdRef; import org.exolab.castor.builder.types.XSIdRefs; import org.exolab.castor.builder.types.XSInt; import org.exolab.castor.builder.types.XSInteger; import org.exolab.castor.builder.types.XSLong; import org.exolab.castor.builder.types.XSNCName; import org.exolab.castor.builder.types.XSNMToken; import org.exolab.castor.builder.types.XSNMTokens; import org.exolab.castor.builder.types.XSNegativeInteger; import org.exolab.castor.builder.types.XSNonNegativeInteger; import org.exolab.castor.builder.types.XSNonPositiveInteger; import org.exolab.castor.builder.types.XSNormalizedString; import org.exolab.castor.builder.types.XSPositiveInteger; import org.exolab.castor.builder.types.XSQName; import org.exolab.castor.builder.types.XSShort; import org.exolab.castor.builder.types.XSString; import org.exolab.castor.builder.types.XSTime; import org.exolab.castor.builder.types.XSType; import org.exolab.castor.builder.types.XSUnsignedByte; import org.exolab.castor.builder.types.XSUnsignedInt; import org.exolab.castor.builder.types.XSUnsignedLong; import org.exolab.castor.builder.types.XSUnsignedShort; import org.exolab.castor.xml.schema.AttributeDecl; import org.exolab.castor.xml.schema.ElementDecl; import org.exolab.castor.xml.schema.Facet; import org.exolab.castor.xml.schema.Schema; import org.exolab.castor.xml.schema.SimpleType; import org.exolab.castor.xml.schema.SimpleTypesFactory; import org.exolab.castor.xml.schema.Structure; import org.exolab.castor.xml.schema.Union; import org.exolab.javasource.JClass; import org.exolab.javasource.JNaming; import org.exolab.javasource.JType; /** * A class used to convert XML Schema SimpleTypes into the appropriate XSType. * @author <a href="mailto:kvisco@intalio.com">Keith Visco</a> * @author <a href="mailto:blandin@intalio.com">Arnaud Blandin</a> * @version $Revision$ $Date: 2006-01-21 04:43:28 -0700 (Sat, 21 Jan 2006) $ */ public final class TypeConversion { /** Jakarta's common-logging logger. */ private static final Log LOG = LogFactory.getLog(TypeConversion.class); /** Configuration for our source generator. */ private final BuilderConfiguration _config; /** * Creates a new TypeConversion instance. * * @param config the BuilderConfiguration instance (must not be null). */ public TypeConversion(final BuilderConfiguration config) { if (config == null) { String error = "The argument 'config' must not be null."; throw new IllegalArgumentException(error); } _config = config; } //-- TypeConversion /** * Converts the given Simpletype to the appropriate XSType. * * @param simpleType the SimpleType to convert to an XSType instance * @param useJava50 true if source code is to be generated for Java 5 * @return the XSType which represets the given Simpletype */ public XSType convertType(final SimpleType simpleType, final boolean useJava50) { return convertType(simpleType, null, useJava50); } /** * Converts the given Simpletype to the appropriate XSType. * * @param simpleType the SimpleType to convert to an XSType instance * @param packageName the packageName for any new class types * @param useJava50 true if source code is to be generated for Java 5 * @return the XSType which represets the given Simpletype */ public XSType convertType(final SimpleType simpleType, final String packageName, final boolean useJava50) { return convertType(simpleType, packageName, _config.usePrimitiveWrapper(), useJava50, null); } /** * Converts the given Simpletype to the appropriate XSType. * * @param simpleType the SimpleType to convert to an XSType instance * @param packageName the packageName for any new class types * @param useWrapper a boolean that when true indicates that primitive * wrappers be used instead of the actual primitives (e.g. * java.lang.Integer instead of int) * @param useJava50 true if source code is to be generated for Java 5 * @param javaClassBindingName valid java Class Name specified by corresponding * binding component * @return the XSType which represets the given Simpletype */ public XSType convertType(final SimpleType simpleType, final String packageName, final boolean useWrapper, final boolean useJava50, final String javaClassBindingName) { if (simpleType == null) { return null; } XSType xsType = null; //-- determine base type SimpleType base = simpleType; while ((base != null) && (!base.isBuiltInType())) { base = (SimpleType) base.getBaseType(); } // try to find a common type for UNIONs, and use it; if not, // use 'java.lang.Object' instead. if (simpleType.getStructureType() == Structure.UNION) { return convertUnion(simpleType, packageName, useWrapper, useJava50); } else if (base == null) { String className = _config.getJavaNaming().toJavaClassName(simpleType.getName()); return new XSClass(new JClass(className)); } xsType = findXSTypeForEnumeration(simpleType, packageName, javaClassBindingName); if (xsType != null) { return xsType; } // If we don't have the XSType yet, we have to look at the Type Code switch (base.getTypeCode()) { case SimpleTypesFactory.ID_TYPE: //-- ID return new XSId(); case SimpleTypesFactory.IDREF_TYPE: //-- IDREF return new XSIdRef(); case SimpleTypesFactory.IDREFS_TYPE: //-- IDREFS return new XSIdRefs(SourceGeneratorConstants.FIELD_INFO_VECTOR, useJava50); case SimpleTypesFactory.NMTOKEN_TYPE: //-- NMTOKEN XSNMToken xsNMToken = new XSNMToken(); xsNMToken.setFacets(simpleType); return xsNMToken; case SimpleTypesFactory.NMTOKENS_TYPE: //-- NMTOKENS return new XSNMTokens(SourceGeneratorConstants.FIELD_INFO_VECTOR, useJava50); case SimpleTypesFactory.ANYURI_TYPE: //--AnyURI return new XSAnyURI(); case SimpleTypesFactory.BASE64BINARY_TYPE: //-- base64Bbinary return new XSBase64Binary(useJava50); case SimpleTypesFactory.HEXBINARY_TYPE: //-- hexBinary return new XSHexBinary(useJava50); case SimpleTypesFactory.BOOLEAN_TYPE: //-- boolean return new XSBoolean(useWrapper); case SimpleTypesFactory.BYTE_TYPE: //--byte XSByte xsByte = new XSByte(useWrapper); if (!simpleType.isBuiltInType()) { xsByte.setFacets(simpleType); } return xsByte; case SimpleTypesFactory.DATE_TYPE: //-- date XSDate xsDate = new XSDate(); if (!simpleType.isBuiltInType()) { xsDate.setFacets(simpleType); } return xsDate; case SimpleTypesFactory.DATETIME_TYPE: //-- dateTime XSDateTime xsDateTime = new XSDateTime(); if (!simpleType.isBuiltInType()) { xsDateTime.setFacets(simpleType); } return xsDateTime; case SimpleTypesFactory.DOUBLE_TYPE: //-- double XSDouble xsDouble = new XSDouble(useWrapper); if (!simpleType.isBuiltInType()) { xsDouble.setFacets(simpleType); } return xsDouble; case SimpleTypesFactory.DURATION_TYPE: //-- duration XSDuration xsDuration = new XSDuration(); if (!simpleType.isBuiltInType()) { xsDuration.setFacets(simpleType); } return xsDuration; case SimpleTypesFactory.DECIMAL_TYPE: //-- decimal XSDecimal xsDecimal = new XSDecimal(); if (!simpleType.isBuiltInType()) { xsDecimal.setFacets(simpleType); } return xsDecimal; case SimpleTypesFactory.FLOAT_TYPE: //-- float XSFloat xsFloat = new XSFloat(useWrapper); if (!simpleType.isBuiltInType()) { xsFloat.setFacets(simpleType); } return xsFloat; case SimpleTypesFactory.GDAY_TYPE: //--GDay XSGDay xsGDay = new XSGDay(); if (!simpleType.isBuiltInType()) { xsGDay.setFacets(simpleType); } return xsGDay; case SimpleTypesFactory.GMONTHDAY_TYPE: //--GMonthDay XSGMonthDay xsGMonthDay = new XSGMonthDay(); if (!simpleType.isBuiltInType()) { xsGMonthDay.setFacets(simpleType); } return xsGMonthDay; case SimpleTypesFactory.GMONTH_TYPE: //--GMonth XSGMonth xsGMonth = new XSGMonth(); if (!simpleType.isBuiltInType()) { xsGMonth.setFacets(simpleType); } return xsGMonth; case SimpleTypesFactory.GYEARMONTH_TYPE: //--GYearMonth XSGYearMonth xsGYearMonth = new XSGYearMonth(); if (!simpleType.isBuiltInType()) { xsGYearMonth.setFacets(simpleType); } return xsGYearMonth; case SimpleTypesFactory.GYEAR_TYPE: //--GYear XSGYear xsGYear = new XSGYear(); if (!simpleType.isBuiltInType()) { xsGYear.setFacets(simpleType); } return xsGYear; case SimpleTypesFactory.INTEGER_TYPE: //-- integer XSInteger xsInteger = new XSInteger(useWrapper); if (!simpleType.isBuiltInType()) { xsInteger.setFacets(simpleType); } return xsInteger; case SimpleTypesFactory.INT_TYPE: //-- int XSInt xsInt = new XSInt(useWrapper); if (!simpleType.isBuiltInType()) { xsInt.setFacets(simpleType); } return xsInt; case SimpleTypesFactory.LANGUAGE_TYPE: //-- Language //-- since we don't actually support this type, yet, we'll simply treat //-- it as a string, but warn the user. LOG.warn("Warning: Currently, the W3C datatype '" + simpleType.getName() + "' is supported only as a String by Castor Source Generator."); return new XSString(); case SimpleTypesFactory.LONG_TYPE: //-- long XSLong xsLong = new XSLong(useWrapper); if (!simpleType.isBuiltInType()) { xsLong.setFacets(simpleType); } return xsLong; case SimpleTypesFactory.NCNAME_TYPE: //--NCName return new XSNCName(); case SimpleTypesFactory.NON_POSITIVE_INTEGER_TYPE: //-- nonPositiveInteger XSNonPositiveInteger xsNPInteger = new XSNonPositiveInteger(useWrapper); xsNPInteger.setFacets(simpleType); return xsNPInteger; case SimpleTypesFactory.NON_NEGATIVE_INTEGER_TYPE: //-- nonNegativeInteger XSNonNegativeInteger xsNNInteger = new XSNonNegativeInteger(useWrapper); xsNNInteger.setFacets(simpleType); return xsNNInteger; case SimpleTypesFactory.NEGATIVE_INTEGER_TYPE: //-- negative-integer XSNegativeInteger xsNInteger = new XSNegativeInteger(useWrapper); xsNInteger.setFacets(simpleType); return xsNInteger; case SimpleTypesFactory.UNSIGNED_INT_TYPE: //-- unsigned-integer XSUnsignedInt xsUnsignedInt = new XSUnsignedInt(useWrapper); xsUnsignedInt.setFacets(simpleType); return xsUnsignedInt; case SimpleTypesFactory.UNSIGNED_SHORT_TYPE: //-- unsigned-short XSUnsignedShort xsUnsignedShort = new XSUnsignedShort(useWrapper); xsUnsignedShort.setFacets(simpleType); return xsUnsignedShort; case SimpleTypesFactory.UNSIGNED_BYTE_TYPE: //-- unsigned-byte XSUnsignedByte xsUnsignedByte = new XSUnsignedByte(useWrapper); xsUnsignedByte.setFacets(simpleType); return xsUnsignedByte; case SimpleTypesFactory.UNSIGNED_LONG_TYPE: //-- unsigned-long XSUnsignedLong xsUnsignedLong = new XSUnsignedLong(); xsUnsignedLong.setFacets(simpleType); return xsUnsignedLong; case SimpleTypesFactory.NORMALIZEDSTRING_TYPE: //-- normalizedString XSNormalizedString xsNormalString = new XSNormalizedString(); if (!simpleType.isBuiltInType()) { xsNormalString.setFacets(simpleType); } return xsNormalString; case SimpleTypesFactory.POSITIVE_INTEGER_TYPE: //-- positive-integer XSPositiveInteger xsPInteger = new XSPositiveInteger(useWrapper); xsPInteger.setFacets(simpleType); return xsPInteger; case SimpleTypesFactory.QNAME_TYPE: //-- QName XSQName xsQName = new XSQName(); xsQName.setFacets(simpleType); return xsQName; case SimpleTypesFactory.STRING_TYPE: //-- string xsType = findXSTypeForEnumeration(simpleType, packageName, javaClassBindingName); if (xsType == null) { // Not an enumerated String type XSString xsString = new XSString(); if (!simpleType.isBuiltInType()) { xsString.setFacets(simpleType); } xsType = xsString; } break; case SimpleTypesFactory.SHORT_TYPE: //-- short XSShort xsShort = new XSShort(useWrapper); if (!simpleType.isBuiltInType()) { xsShort.setFacets(simpleType); } return xsShort; case SimpleTypesFactory.TIME_TYPE: //-- time XSTime xsTime = new XSTime(); if (!simpleType.isBuiltInType()) { xsTime.setFacets(simpleType); } return xsTime; case SimpleTypesFactory.TOKEN_TYPE: //-- token //-- since we don't actually support this type, yet, we'll simply treat //-- it as a string, but warn the user. LOG.warn("Warning: Currently, the W3C datatype 'token'" + " is supported only as a String by Castor Source Generator."); XSString xsString = new XSString(); if (!simpleType.isBuiltInType()) { xsString.setFacets(simpleType); } return xsString; default: //-- error String name = simpleType.getName(); if (name == null || name.length() == 0) { //--we know it is a restriction name = simpleType.getBuiltInBaseType().getName(); } LOG.warn("Warning: The W3C datatype '" + name + "' " + "is not currently supported by Castor Source Generator."); String className = _config.getJavaNaming().toJavaClassName(name); xsType = new XSClass(new JClass(className)); break; } return xsType; } //-- convertType /** * Converts the given XML schema Union type to the appropriate XSType. * * @param simpleType the SimpleType to convert to an XSType instance * @param packageName the packageName for any new class types * @param useJava50 true if source code is to be generated for Java 5 * @param useWrapper indicates whether primitive wrappers should be used instead * of the actual primitives (e.g. java.lang.Integer instead of int) * @return the XSType which represets the given Simpletype */ private XSType convertUnion(final SimpleType simpleType, final String packageName, final boolean useWrapper, final boolean useJava50) { SimpleType currentUnion = simpleType; SimpleType common = findCommonType((Union) currentUnion); // look at type hierarchy (if any), and try to // find a common type recursively while (common == null && currentUnion.getBaseType() != null && currentUnion.getBaseType().getStructureType() == Structure.UNION) { currentUnion = (SimpleType) currentUnion.getBaseType(); common = findCommonType((Union) currentUnion); } if (common == null) { return new XSClass(SGTypes.OBJECT); } XSType convertedType = convertType(common, packageName, useWrapper, useJava50, null); Union unionType = (Union) simpleType; Enumeration<SimpleType> memberTypes = unionType.getMemberTypes(); while (memberTypes.hasMoreElements()) { SimpleType memberType = memberTypes.nextElement(); convertedType.setFacets(memberType); } return convertedType; } /** * Returns the XSType that corresponds to the given javaType. * @param javaType name of the Java type for which to look up the XSType * @return XSType that corresponds to the given javaType */ public static XSType convertType(final String javaType) { if (javaType == null) { return null; } //--Boolean if (javaType.equals(TypeNames.BOOLEAN_OBJECT)) { return new XSBoolean(true); } else if (javaType.equals(TypeNames.BOOLEAN_PRIMITIVE)) { return new XSBoolean(false); } else if (javaType.equals(TypeNames.BYTE_OBJECT)) { return new XSByte(true); } else if (javaType.equals(TypeNames.BYTE_PRIMITIVE)) { return new XSBoolean(false); } else if (javaType.equals(TypeNames.CASTOR_DATE)) { return new XSDateTime(); } else if (javaType.equals(TypeNames.CASTOR_DURATION)) { return new XSDuration(); } else if (javaType.equals(TypeNames.CASTOR_GDAY)) { return new XSGDay(); } else if (javaType.equals(TypeNames.CASTOR_GMONTH)) { return new XSGMonth(); } else if (javaType.equals(TypeNames.CASTOR_GMONTHDAY)) { return new XSGMonthDay(); } else if (javaType.equals(TypeNames.CASTOR_GYEAR)) { return new XSGYear(); } else if (javaType.equals(TypeNames.CASTOR_GYEARMONTH)) { return new XSGYearMonth(); } else if (javaType.equals(TypeNames.CASTOR_TIME)) { return new XSTime(); } else if (javaType.equals(TypeNames.DATE)) { return new XSDate(); } else if (javaType.equals(TypeNames.DECIMAL)) { return new XSDecimal(); } else if (javaType.equals(TypeNames.DOUBLE_OBJECT)) { return new XSDouble(true); } else if (javaType.equals(TypeNames.DOUBLE_PRIMITIVE)) { return new XSDouble(false); } else if (javaType.equals(TypeNames.FLOAT_OBJECT)) { return new XSFloat(true); } else if (javaType.equals(TypeNames.FLOAT_PRIMITIVE)) { return new XSDouble(false); } else if (javaType.equals(TypeNames.INTEGER)) { return new XSInteger(true); } else if (javaType.equals(TypeNames.INT)) { return new XSInt(); } else if (javaType.equals(TypeNames.SHORT_OBJECT)) { return new XSShort(true); } else if (javaType.equals(TypeNames.SHORT_PRIMITIVE)) { return new XSShort(false); } else if (javaType.equals(TypeNames.STRING)) { return new XSString(); } //--no XSType implemented for it we return a XSClass return new XSClass(new JClass(javaType)); } /** * Returns an XSType for an enumerated type. For non-enumerated types, * returns null. * * @param simpleType * the SimpleType being inspected * @param packageName * current package name * @param javaClassBindingName * valid Java Class Name specified by corresponding binding * component * @return an XSType for an enumerated type, null for a non-enumerated type. */ private XSType findXSTypeForEnumeration(final SimpleType simpleType, final String packageName, final String javaClassBindingName) { if (!simpleType.hasFacet(Facet.ENUMERATION)) { return null; } XSType xsType = null; String typeName = simpleType.getName(); //-- anonymous type if (typeName == null) { if (javaClassBindingName != null) { // handled by binding file if (!JNaming.isInJavaLang(javaClassBindingName) && !JNaming.isReservedByCastor(javaClassBindingName) && !JNaming.isReservedByWindows(javaClassBindingName)) { typeName = javaClassBindingName; // typeName += "Type"; } } } if (typeName == null) { // not handled by binding file Structure parent = simpleType.getParent(); if (parent instanceof ElementDecl) { typeName = ((ElementDecl) parent).getName(); } else if (parent instanceof AttributeDecl) { typeName = ((AttributeDecl) parent).getName(); } typeName = typeName + "Type"; } String className = _config.getJavaNaming().toJavaClassName(typeName); // Get the appropriate package name for this type String typePackageName = packageName; if (typePackageName == null) { String ns = simpleType.getSchema().getTargetNamespace(); typePackageName = _config.lookupPackageByNamespace(ns); } if (typePackageName != null && typePackageName.length() > 0) { typePackageName = typePackageName + '.' + SourceGeneratorConstants.TYPES_PACKAGE; } else { typePackageName = SourceGeneratorConstants.TYPES_PACKAGE; } className = typePackageName + '.' + className; xsType = new XSClass(new JClass(className)); xsType.setAsEnumerated(true); return xsType; } /** * Returns the common type for the Union, or null if no common type exists * among the members of the Union. * * @param union * the Union to return the common type for * @return the common SimpleType for the Union. */ private static SimpleType findCommonType(final Union union) { SimpleType common = null; Enumeration<SimpleType> enumeration = union.getMemberTypes(); while (enumeration.hasMoreElements()) { SimpleType type = enumeration.nextElement(); type = type.getBuiltInBaseType(); if (common == null) { common = type; } else { common = findCommonType(common, type); //-- no common types if (common == null) { break; } } } return common; } //-- findCommonType /** * Compares the two SimpleTypes. The lowest common ancestor of both types * will be returned, otherwise null is returned if the types are not * compatible. * * @param aType * the first type to compare * @param bType * the second type to compare * @return the common ancestor of both types if there is one, null if the * types are not compatible. */ private static SimpleType findCommonType(final SimpleType aType, final SimpleType bType) { int type1 = aType.getTypeCode(); int type2 = bType.getTypeCode(); if (type1 == type2) { return aType; } if (isNumeric(aType) && isNumeric(bType)) { // TODO Finish this so we can implement Unions } else if (isString(aType) && isString(bType)) { // TODO Finish this so we can implement Unions } //-- Just return string for now, as all simpleTypes can fit into a string Schema schema = aType.getSchema(); return schema.getSimpleType("string", schema.getSchemaNamespace()); } /** * Returns true if this simpletype is numeric. * @param type the type to be examined * @return true if this simpletype is numeric. */ private static boolean isNumeric(final SimpleType type) { int code = type.getTypeCode(); switch (code) { case SimpleTypesFactory.BYTE_TYPE: case SimpleTypesFactory.DOUBLE_TYPE: case SimpleTypesFactory.DECIMAL_TYPE: case SimpleTypesFactory.FLOAT_TYPE: case SimpleTypesFactory.INTEGER_TYPE: case SimpleTypesFactory.INT_TYPE: case SimpleTypesFactory.LONG_TYPE: case SimpleTypesFactory.NON_POSITIVE_INTEGER_TYPE: case SimpleTypesFactory.NON_NEGATIVE_INTEGER_TYPE: case SimpleTypesFactory.NEGATIVE_INTEGER_TYPE: case SimpleTypesFactory.POSITIVE_INTEGER_TYPE: case SimpleTypesFactory.SHORT_TYPE: return true; default: return false; } } //-- isNumeric /** * Returns true if this simpletype is a String. * @param type the type to be examined * @return true if this simpletype is String. */ private static boolean isString(final SimpleType type) { int code = type.getTypeCode(); switch (code) { //-- string types case SimpleTypesFactory.ANYURI_TYPE: case SimpleTypesFactory.ID_TYPE: case SimpleTypesFactory.IDREF_TYPE: case SimpleTypesFactory.IDREFS_TYPE: case SimpleTypesFactory.LANGUAGE_TYPE: case SimpleTypesFactory.NCNAME_TYPE: case SimpleTypesFactory.NMTOKEN_TYPE: case SimpleTypesFactory.NMTOKENS_TYPE: case SimpleTypesFactory.NORMALIZEDSTRING_TYPE: case SimpleTypesFactory.STRING_TYPE: case SimpleTypesFactory.QNAME_TYPE: return true; default: return false; } } //-- isString /** * Constants. */ protected static class TypeNames { protected static final String BOOLEAN_PRIMITIVE = JType.BOOLEAN.getName(); protected static final String BOOLEAN_OBJECT = JType.BOOLEAN.getWrapperName(); protected static final String BYTE_PRIMITIVE = JType.BYTE.getName(); protected static final String BYTE_OBJECT = JType.BYTE.getWrapperName(); protected static final String DATE = "java.util.Date"; protected static final String CASTOR_DATE = "org.exolab.castor.types.Date"; protected static final String CASTOR_TIME = "org.exolab.castor.types.Time"; protected static final String CASTOR_DURATION = "org.exolab.castor.types.Duration"; protected static final String CASTOR_GMONTH = "org.exolab.castor.types.GMonth"; protected static final String CASTOR_GMONTHDAY = "org.exolab.castor.types.GMonthDay"; protected static final String CASTOR_GYEAR = "org.exolab.castor.types.GYear"; protected static final String CASTOR_GYEARMONTH = "org.exolab.castor.types.GYearMonth"; protected static final String CASTOR_GDAY = "org.exolab.castor.types.GDay"; protected static final String DECIMAL = "java.math.BigDecimal"; protected static final String DOUBLE_PRIMITIVE = JType.DOUBLE.getName(); protected static final String DOUBLE_OBJECT = JType.DOUBLE.getWrapperName(); protected static final String FLOAT_PRIMITIVE = JType.FLOAT.getName(); protected static final String FLOAT_OBJECT = JType.FLOAT.getWrapperName(); protected static final String INT = JType.INT.getName(); protected static final String INTEGER = JType.INT.getWrapperName(); protected static final String SHORT_PRIMITIVE = JType.SHORT.getName(); protected static final String SHORT_OBJECT = JType.SHORT.getWrapperName(); protected static final String STRING = "java.lang.String"; } } //-- TypeConversion