/**
  * get all built-in simple types, which are stored in a hashtable keyed by the name
  *
  * @return a hashtable which contains all built-in simple types
  */
 public SymbolHash getBuiltInTypes() {
   return (SymbolHash) fBuiltInTypes.makeClone();
 }
  // create common built-in types
  protected static void createBuiltInTypes(
      SymbolHash builtInTypes, XSSimpleTypeDecl baseAtomicType) {
    // all schema simple type names
    final String ANYSIMPLETYPE = "anySimpleType";
    final String ANYURI = "anyURI";
    final String BASE64BINARY = "base64Binary";
    final String BOOLEAN = "boolean";
    final String BYTE = "byte";
    final String DATE = "date";
    final String DATETIME = "dateTime";
    final String DAY = "gDay";
    final String DECIMAL = "decimal";
    final String DOUBLE = "double";
    final String DURATION = "duration";
    final String ENTITY = "ENTITY";
    final String ENTITIES = "ENTITIES";
    final String FLOAT = "float";
    final String HEXBINARY = "hexBinary";
    final String ID = "ID";
    final String IDREF = "IDREF";
    final String IDREFS = "IDREFS";
    final String INT = "int";
    final String INTEGER = "integer";
    final String LONG = "long";
    final String NAME = "Name";
    final String NEGATIVEINTEGER = "negativeInteger";
    final String MONTH = "gMonth";
    final String MONTHDAY = "gMonthDay";
    final String NCNAME = "NCName";
    final String NMTOKEN = "NMTOKEN";
    final String NMTOKENS = "NMTOKENS";
    final String LANGUAGE = "language";
    final String NONNEGATIVEINTEGER = "nonNegativeInteger";
    final String NONPOSITIVEINTEGER = "nonPositiveInteger";
    final String NORMALIZEDSTRING = "normalizedString";
    final String NOTATION = "NOTATION";
    final String POSITIVEINTEGER = "positiveInteger";
    final String QNAME = "QName";
    final String SHORT = "short";
    final String STRING = "string";
    final String TIME = "time";
    final String TOKEN = "token";
    final String UNSIGNEDBYTE = "unsignedByte";
    final String UNSIGNEDINT = "unsignedInt";
    final String UNSIGNEDLONG = "unsignedLong";
    final String UNSIGNEDSHORT = "unsignedShort";
    final String YEAR = "gYear";
    final String YEARMONTH = "gYearMonth";

    final XSFacets facets = new XSFacets();

    builtInTypes.put(ANYSIMPLETYPE, XSSimpleTypeDecl.fAnySimpleType);

    XSSimpleTypeDecl stringDV =
        new XSSimpleTypeDecl(
            baseAtomicType,
            STRING,
            XSSimpleTypeDecl.DV_STRING,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.STRING_DT);
    builtInTypes.put(STRING, stringDV);
    builtInTypes.put(
        BOOLEAN,
        new XSSimpleTypeDecl(
            baseAtomicType,
            BOOLEAN,
            XSSimpleTypeDecl.DV_BOOLEAN,
            XSSimpleType.ORDERED_FALSE,
            false,
            true,
            false,
            true,
            XSConstants.BOOLEAN_DT));
    XSSimpleTypeDecl decimalDV =
        new XSSimpleTypeDecl(
            baseAtomicType,
            DECIMAL,
            XSSimpleTypeDecl.DV_DECIMAL,
            XSSimpleType.ORDERED_TOTAL,
            false,
            false,
            true,
            true,
            XSConstants.DECIMAL_DT);
    builtInTypes.put(DECIMAL, decimalDV);

    builtInTypes.put(
        ANYURI,
        new XSSimpleTypeDecl(
            baseAtomicType,
            ANYURI,
            XSSimpleTypeDecl.DV_ANYURI,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.ANYURI_DT));
    builtInTypes.put(
        BASE64BINARY,
        new XSSimpleTypeDecl(
            baseAtomicType,
            BASE64BINARY,
            XSSimpleTypeDecl.DV_BASE64BINARY,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.BASE64BINARY_DT));

    XSSimpleTypeDecl durationDV =
        new XSSimpleTypeDecl(
            baseAtomicType,
            DURATION,
            XSSimpleTypeDecl.DV_DURATION,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.DURATION_DT);
    builtInTypes.put(DURATION, durationDV);

    builtInTypes.put(
        DATETIME,
        new XSSimpleTypeDecl(
            baseAtomicType,
            DATETIME,
            XSSimpleTypeDecl.DV_DATETIME,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.DATETIME_DT));
    builtInTypes.put(
        TIME,
        new XSSimpleTypeDecl(
            baseAtomicType,
            TIME,
            XSSimpleTypeDecl.DV_TIME,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.TIME_DT));
    builtInTypes.put(
        DATE,
        new XSSimpleTypeDecl(
            baseAtomicType,
            DATE,
            XSSimpleTypeDecl.DV_DATE,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.DATE_DT));
    builtInTypes.put(
        YEARMONTH,
        new XSSimpleTypeDecl(
            baseAtomicType,
            YEARMONTH,
            XSSimpleTypeDecl.DV_GYEARMONTH,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.GYEARMONTH_DT));
    builtInTypes.put(
        YEAR,
        new XSSimpleTypeDecl(
            baseAtomicType,
            YEAR,
            XSSimpleTypeDecl.DV_GYEAR,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.GYEAR_DT));
    builtInTypes.put(
        MONTHDAY,
        new XSSimpleTypeDecl(
            baseAtomicType,
            MONTHDAY,
            XSSimpleTypeDecl.DV_GMONTHDAY,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.GMONTHDAY_DT));
    builtInTypes.put(
        DAY,
        new XSSimpleTypeDecl(
            baseAtomicType,
            DAY,
            XSSimpleTypeDecl.DV_GDAY,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.GDAY_DT));
    builtInTypes.put(
        MONTH,
        new XSSimpleTypeDecl(
            baseAtomicType,
            MONTH,
            XSSimpleTypeDecl.DV_GMONTH,
            XSSimpleType.ORDERED_PARTIAL,
            false,
            false,
            false,
            true,
            XSConstants.GMONTH_DT));

    XSSimpleTypeDecl integerDV =
        new XSSimpleTypeDecl(
            decimalDV,
            INTEGER,
            XSSimpleTypeDecl.DV_INTEGER,
            XSSimpleType.ORDERED_TOTAL,
            false,
            false,
            true,
            true,
            XSConstants.INTEGER_DT);
    builtInTypes.put(INTEGER, integerDV);

    facets.maxInclusive = "0";
    XSSimpleTypeDecl nonPositiveDV =
        new XSSimpleTypeDecl(
            integerDV,
            NONPOSITIVEINTEGER,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.NONPOSITIVEINTEGER_DT);
    nonPositiveDV.applyFacets1(facets, XSSimpleType.FACET_MAXINCLUSIVE, (short) 0);
    builtInTypes.put(NONPOSITIVEINTEGER, nonPositiveDV);

    facets.maxInclusive = "-1";
    XSSimpleTypeDecl negativeDV =
        new XSSimpleTypeDecl(
            nonPositiveDV,
            NEGATIVEINTEGER,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.NEGATIVEINTEGER_DT);
    negativeDV.applyFacets1(facets, XSSimpleType.FACET_MAXINCLUSIVE, (short) 0);
    builtInTypes.put(NEGATIVEINTEGER, negativeDV);

    facets.maxInclusive = "9223372036854775807";
    facets.minInclusive = "-9223372036854775808";
    XSSimpleTypeDecl longDV =
        new XSSimpleTypeDecl(
            integerDV, LONG, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.LONG_DT);
    longDV.applyFacets1(
        facets,
        (short) (XSSimpleType.FACET_MAXINCLUSIVE | XSSimpleType.FACET_MININCLUSIVE),
        (short) 0);
    builtInTypes.put(LONG, longDV);

    facets.maxInclusive = "2147483647";
    facets.minInclusive = "-2147483648";
    XSSimpleTypeDecl intDV =
        new XSSimpleTypeDecl(
            longDV, INT, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.INT_DT);
    intDV.applyFacets1(
        facets,
        (short) (XSSimpleType.FACET_MAXINCLUSIVE | XSSimpleType.FACET_MININCLUSIVE),
        (short) 0);
    builtInTypes.put(INT, intDV);

    facets.maxInclusive = "32767";
    facets.minInclusive = "-32768";
    XSSimpleTypeDecl shortDV =
        new XSSimpleTypeDecl(
            intDV, SHORT, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.SHORT_DT);
    shortDV.applyFacets1(
        facets,
        (short) (XSSimpleType.FACET_MAXINCLUSIVE | XSSimpleType.FACET_MININCLUSIVE),
        (short) 0);
    builtInTypes.put(SHORT, shortDV);

    facets.maxInclusive = "127";
    facets.minInclusive = "-128";
    XSSimpleTypeDecl byteDV =
        new XSSimpleTypeDecl(
            shortDV, BYTE, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.BYTE_DT);
    byteDV.applyFacets1(
        facets,
        (short) (XSSimpleType.FACET_MAXINCLUSIVE | XSSimpleType.FACET_MININCLUSIVE),
        (short) 0);
    builtInTypes.put(BYTE, byteDV);

    facets.minInclusive = "0";
    XSSimpleTypeDecl nonNegativeDV =
        new XSSimpleTypeDecl(
            integerDV,
            NONNEGATIVEINTEGER,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.NONNEGATIVEINTEGER_DT);
    nonNegativeDV.applyFacets1(facets, XSSimpleType.FACET_MININCLUSIVE, (short) 0);
    builtInTypes.put(NONNEGATIVEINTEGER, nonNegativeDV);

    facets.maxInclusive = "18446744073709551615";
    XSSimpleTypeDecl unsignedLongDV =
        new XSSimpleTypeDecl(
            nonNegativeDV,
            UNSIGNEDLONG,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.UNSIGNEDLONG_DT);
    unsignedLongDV.applyFacets1(facets, XSSimpleType.FACET_MAXINCLUSIVE, (short) 0);
    builtInTypes.put(UNSIGNEDLONG, unsignedLongDV);

    facets.maxInclusive = "4294967295";
    XSSimpleTypeDecl unsignedIntDV =
        new XSSimpleTypeDecl(
            unsignedLongDV,
            UNSIGNEDINT,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.UNSIGNEDINT_DT);
    unsignedIntDV.applyFacets1(facets, XSSimpleType.FACET_MAXINCLUSIVE, (short) 0);
    builtInTypes.put(UNSIGNEDINT, unsignedIntDV);

    facets.maxInclusive = "65535";
    XSSimpleTypeDecl unsignedShortDV =
        new XSSimpleTypeDecl(
            unsignedIntDV,
            UNSIGNEDSHORT,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.UNSIGNEDSHORT_DT);
    unsignedShortDV.applyFacets1(facets, XSSimpleType.FACET_MAXINCLUSIVE, (short) 0);
    builtInTypes.put(UNSIGNEDSHORT, unsignedShortDV);

    facets.maxInclusive = "255";
    XSSimpleTypeDecl unsignedByteDV =
        new XSSimpleTypeDecl(
            unsignedShortDV,
            UNSIGNEDBYTE,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.UNSIGNEDBYTE_DT);
    unsignedByteDV.applyFacets1(facets, XSSimpleType.FACET_MAXINCLUSIVE, (short) 0);
    builtInTypes.put(UNSIGNEDBYTE, unsignedByteDV);

    facets.minInclusive = "1";
    XSSimpleTypeDecl positiveIntegerDV =
        new XSSimpleTypeDecl(
            nonNegativeDV,
            POSITIVEINTEGER,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.POSITIVEINTEGER_DT);
    positiveIntegerDV.applyFacets1(facets, XSSimpleType.FACET_MININCLUSIVE, (short) 0);
    builtInTypes.put(POSITIVEINTEGER, positiveIntegerDV);

    builtInTypes.put(
        FLOAT,
        new XSSimpleTypeDecl(
            baseAtomicType,
            FLOAT,
            XSSimpleTypeDecl.DV_FLOAT,
            XSSimpleType.ORDERED_PARTIAL,
            true,
            true,
            true,
            true,
            XSConstants.FLOAT_DT));
    builtInTypes.put(
        DOUBLE,
        new XSSimpleTypeDecl(
            baseAtomicType,
            DOUBLE,
            XSSimpleTypeDecl.DV_DOUBLE,
            XSSimpleType.ORDERED_PARTIAL,
            true,
            true,
            true,
            true,
            XSConstants.DOUBLE_DT));
    builtInTypes.put(
        HEXBINARY,
        new XSSimpleTypeDecl(
            baseAtomicType,
            HEXBINARY,
            XSSimpleTypeDecl.DV_HEXBINARY,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.HEXBINARY_DT));
    builtInTypes.put(
        NOTATION,
        new XSSimpleTypeDecl(
            baseAtomicType,
            NOTATION,
            XSSimpleTypeDecl.DV_NOTATION,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.NOTATION_DT));

    facets.whiteSpace = XSSimpleType.WS_REPLACE;
    XSSimpleTypeDecl normalizedDV =
        new XSSimpleTypeDecl(
            stringDV,
            NORMALIZEDSTRING,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.NORMALIZEDSTRING_DT);
    normalizedDV.applyFacets1(facets, XSSimpleType.FACET_WHITESPACE, (short) 0);
    builtInTypes.put(NORMALIZEDSTRING, normalizedDV);

    facets.whiteSpace = XSSimpleType.WS_COLLAPSE;
    XSSimpleTypeDecl tokenDV =
        new XSSimpleTypeDecl(
            normalizedDV, TOKEN, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.TOKEN_DT);
    tokenDV.applyFacets1(facets, XSSimpleType.FACET_WHITESPACE, (short) 0);
    builtInTypes.put(TOKEN, tokenDV);

    facets.whiteSpace = XSSimpleType.WS_COLLAPSE;
    facets.pattern = "([a-zA-Z]{1,8})(-[a-zA-Z0-9]{1,8})*";
    XSSimpleTypeDecl languageDV =
        new XSSimpleTypeDecl(
            tokenDV,
            LANGUAGE,
            URI_SCHEMAFORSCHEMA,
            (short) 0,
            false,
            null,
            XSConstants.LANGUAGE_DT);
    languageDV.applyFacets1(
        facets, (short) (XSSimpleType.FACET_WHITESPACE | XSSimpleType.FACET_PATTERN), (short) 0);
    builtInTypes.put(LANGUAGE, languageDV);

    facets.whiteSpace = XSSimpleType.WS_COLLAPSE;
    XSSimpleTypeDecl nameDV =
        new XSSimpleTypeDecl(
            tokenDV, NAME, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.NAME_DT);
    nameDV.applyFacets1(
        facets, XSSimpleType.FACET_WHITESPACE, (short) 0, XSSimpleTypeDecl.SPECIAL_PATTERN_NAME);
    builtInTypes.put(NAME, nameDV);

    facets.whiteSpace = XSSimpleType.WS_COLLAPSE;
    XSSimpleTypeDecl ncnameDV =
        new XSSimpleTypeDecl(
            nameDV, NCNAME, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.NCNAME_DT);
    ncnameDV.applyFacets1(
        facets, XSSimpleType.FACET_WHITESPACE, (short) 0, XSSimpleTypeDecl.SPECIAL_PATTERN_NCNAME);
    builtInTypes.put(NCNAME, ncnameDV);

    builtInTypes.put(
        QNAME,
        new XSSimpleTypeDecl(
            baseAtomicType,
            QNAME,
            XSSimpleTypeDecl.DV_QNAME,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.QNAME_DT));

    builtInTypes.put(
        ID,
        new XSSimpleTypeDecl(
            ncnameDV,
            ID,
            XSSimpleTypeDecl.DV_ID,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.ID_DT));
    XSSimpleTypeDecl idrefDV =
        new XSSimpleTypeDecl(
            ncnameDV,
            IDREF,
            XSSimpleTypeDecl.DV_IDREF,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.IDREF_DT);
    builtInTypes.put(IDREF, idrefDV);

    facets.minLength = 1;
    XSSimpleTypeDecl tempDV =
        new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short) 0, idrefDV, true, null);
    XSSimpleTypeDecl idrefsDV =
        new XSSimpleTypeDecl(tempDV, IDREFS, URI_SCHEMAFORSCHEMA, (short) 0, false, null);
    idrefsDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short) 0);
    builtInTypes.put(IDREFS, idrefsDV);

    XSSimpleTypeDecl entityDV =
        new XSSimpleTypeDecl(
            ncnameDV,
            ENTITY,
            XSSimpleTypeDecl.DV_ENTITY,
            XSSimpleType.ORDERED_FALSE,
            false,
            false,
            false,
            true,
            XSConstants.ENTITY_DT);
    builtInTypes.put(ENTITY, entityDV);

    facets.minLength = 1;
    tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short) 0, entityDV, true, null);
    XSSimpleTypeDecl entitiesDV =
        new XSSimpleTypeDecl(tempDV, ENTITIES, URI_SCHEMAFORSCHEMA, (short) 0, false, null);
    entitiesDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short) 0);
    builtInTypes.put(ENTITIES, entitiesDV);

    facets.whiteSpace = XSSimpleType.WS_COLLAPSE;
    XSSimpleTypeDecl nmtokenDV =
        new XSSimpleTypeDecl(
            tokenDV, NMTOKEN, URI_SCHEMAFORSCHEMA, (short) 0, false, null, XSConstants.NMTOKEN_DT);
    nmtokenDV.applyFacets1(
        facets, XSSimpleType.FACET_WHITESPACE, (short) 0, XSSimpleTypeDecl.SPECIAL_PATTERN_NMTOKEN);
    builtInTypes.put(NMTOKEN, nmtokenDV);

    facets.minLength = 1;
    tempDV = new XSSimpleTypeDecl(null, URI_SCHEMAFORSCHEMA, (short) 0, nmtokenDV, true, null);
    XSSimpleTypeDecl nmtokensDV =
        new XSSimpleTypeDecl(tempDV, NMTOKENS, URI_SCHEMAFORSCHEMA, (short) 0, false, null);
    nmtokensDV.applyFacets1(facets, XSSimpleType.FACET_MINLENGTH, (short) 0);
    builtInTypes.put(NMTOKENS, nmtokensDV);
  } // createBuiltInTypes()
 /**
  * Get a built-in simple type of the given name REVISIT: its still not decided within the Schema
  * WG how to define the ur-types and if all simple types should be derived from a complex type, so
  * as of now we ignore the fact that anySimpleType is derived from anyType, and pass 'null' as the
  * base of anySimpleType. It needs to be changed as per the decision taken.
  *
  * @param name the name of the datatype
  * @return the datatype validator of the given name
  */
 public XSSimpleType getBuiltInType(String name) {
   return (XSSimpleType) fBuiltInTypes.get(name);
 }