Utils { {{ public static final int BUILT_IN_JAVA_TYPE = 0; public static final int BUILT_IN_NON_JAVA_TYPE = 1; public static final int USER_DEFINED_TYPE = 10; private static Hashtable builtInJavaTypes = null; private static Hashtable builtInNonJavaTypes = null; private static Hashtable nameTypes = new Hashtable(); }} public static TypeInfo resolveXMLTypeName(String XMLType) {{ if ((builtInJavaTypes == null) && (builtInNonJavaTypes == null)) createTypeTables(); TypeInfo typeinfo = new TypeInfo(); typeinfo.typeName = "Unknown"; typeinfo.listUnitClassDef = null; // First, check if it's a built-in type with a corresponding Java type Object o = builtInJavaTypes.get(XMLType); if (o != null) { typeinfo.category = BUILT_IN_JAVA_TYPE; typeinfo.typeName = (String) o; typeinfo.classDef = null; } else // check if it's a built-in type with no corresponding Java type { o = builtInNonJavaTypes.get(XMLType); if (o != null) { typeinfo.category = BUILT_IN_NON_JAVA_TYPE; typeinfo.classDef = (DataClass) o; typeinfo.typeName = typeinfo.classDef.get_name(); if (typeinfo.typeName.equals("XMLENTITIES")) typeinfo.listUnitClassDef = (DataClass) builtInNonJavaTypes.get("ENTITY"); else if (typeinfo.typeName.equals("XMLIDREFS")) typeinfo.listUnitClassDef = (DataClass) builtInNonJavaTypes.get("IDREF"); else if (typeinfo.typeName.equals("XMLNMTOKENS")) typeinfo.listUnitClassDef = (DataClass) builtInNonJavaTypes.get("NMTOKEN"); } else // it's not an implemented built-in data type { typeinfo.category = USER_DEFINED_TYPE; typeinfo.typeName = XMLType; typeinfo.classDef = null; } } return typeinfo; }} public static boolean isBuiltInXMLType(String XMLType) {{ if ((builtInJavaTypes == null) && (builtInNonJavaTypes == null)) createTypeTables(); return (builtInJavaTypes.containsKey(XMLType) || builtInNonJavaTypes.containsKey(XMLType)); }} public static boolean isPrimitiveDataType(String typeName) {{ if ((typeName.equals("boolean")) || (typeName.equals("byte")) || (typeName.equals("char")) || (typeName.equals("double")) || (typeName.equals("float")) || (typeName.equals("int")) || (typeName.equals("short"))) return true; else return false; }} public static String convertToObjectType(String typeName) {{ if (typeName.equals("boolean")) return "Boolean"; if (typeName.equals("byte")) return "Byte"; if (typeName.equals("char")) return "Character"; if (typeName.equals("double")) return "Double"; if (typeName.equals("float")) return "Float"; if (typeName.equals("int")) return "Integer"; if (typeName.equals("short")) return "Short"; return typeName; }} private static void createTypeTables() {{ builtInJavaTypes = new Hashtable(); builtInNonJavaTypes = new Hashtable(); // Add the entries for the XML built-in data types that have a // corresponding Java type. Entries are ordered alphabetically. builtInJavaTypes.put("base64binary", "String"); builtInJavaTypes.put("hexbinary", "String"); builtInJavaTypes.put("boolean", "boolean"); builtInJavaTypes.put("byte", "byte"); builtInJavaTypes.put("normalizedString", "String"); builtInJavaTypes.put("number", "double"); builtInJavaTypes.put("double", "double"); builtInJavaTypes.put("float", "float"); builtInJavaTypes.put("int", "int"); builtInJavaTypes.put("integer", "int"); builtInJavaTypes.put("long", "long"); builtInJavaTypes.put("Name", "String"); builtInJavaTypes.put("NCName", "String"); builtInJavaTypes.put("NMTOKEN", "String"); builtInJavaTypes.put("QName", "String"); builtInJavaTypes.put("short", "short"); builtInJavaTypes.put("string", "String"); builtInJavaTypes.put("token", "String"); builtInJavaTypes.put("unsignedByte", "short"); builtInJavaTypes.put("unsignedInt", "int"); builtInJavaTypes.put("unsignedLong", "long"); builtInJavaTypes.put("unsignedShort", "int"); // Add the entries for the XML built-in data types that do not have a // corresponding Java type - and equivalent classes are to be created // to implement them. Entries are ordered alphabetically. DataClass classDef; classDef = DataClass.parse( "DataClass \"XMLcentury\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("century", classDef); classDef = DataClass.parse( "DataClass \"XMLdate\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("date", classDef); classDef = DataClass.parse( "DataClass \"XMLENTITY\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("ENTITY", classDef); classDef = DataClass.parse( "DataClass \"XMLENTITIES\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 0 " + Integer.MAX_VALUE + " " + "\"value\" \"XMLENTITY\")"); builtInNonJavaTypes.put("ENTITIES", classDef); classDef = DataClass.parse( "DataClass \"XMLID\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 id true \"value\" \"String\")"); builtInNonJavaTypes.put("ID", classDef); classDef = DataClass.parse( "DataClass \"XMLIDREF\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 idref true \"value\" \"String\")"); builtInNonJavaTypes.put("IDREF", classDef); classDef = DataClass.parse( "DataClass \"XMLIDREFS\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 0 " + Integer.MAX_VALUE + " " + "\"value\" \"XMLIDREF\")"); builtInNonJavaTypes.put("IDREFS", classDef); classDef = DataClass.parse( "DataClass \"XMLlanguage\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("language", classDef); classDef = DataClass.parse( "DataClass \"XMLgMonth\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("gMonth", classDef); classDef = DataClass.parse( "DataClass \"XMLnegativeInteger\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 maxV \"-1\" maxI true " + "\"value\" \"int\")"); builtInNonJavaTypes.put("negativeInteger", classDef); classDef = DataClass.parse( "DataClass \"XMLNMTOKENS\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 0 " + Integer.MAX_VALUE + " " + "\"value\" \"XMLNMTOKEN\")"); builtInNonJavaTypes.put("NMTOKENS", classDef); classDef = DataClass.parse( "DataClass \"XMLnonNegativeInteger\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 minV \"0\" minI true " + "\"value\" \"int\")"); builtInNonJavaTypes.put("nonNegativeInteger", classDef); classDef = DataClass.parse( "DataClass \"XMLnonPositiveInteger\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 maxV \"0\" maxI true " + "\"value\" \"int\")"); builtInNonJavaTypes.put("nonPositiveInteger", classDef); classDef = DataClass.parse( "DataClass \"XMLpositiveInteger\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 minV \"1\" minI true " + "\"value\" \"int\")"); builtInNonJavaTypes.put("positiveInteger", classDef); classDef = DataClass.parse( "DataClass \"XMLmonthDay\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("monthDay", classDef); classDef = DataClass.parse( "DataClass \"XMLgDay\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("gDay", classDef); classDef = DataClass.parse( "DataClass \"XMLrecurringDuration\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("recurringDuration", classDef); classDef = DataClass.parse( "DataClass \"XMLtime\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("time", classDef); classDef = DataClass.parse( "DataClass \"XMLduration\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("duration", classDef); classDef = DataClass.parse( "DataClass \"XMLdateTime\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("dateTime", classDef); classDef = DataClass.parse( "DataClass \"XMLtimePeriod\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("timePeriod", classDef); classDef = DataClass.parse( "DataClass \"XMLanyURI\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("anyURI", classDef); classDef = DataClass.parse( "DataClass \"XMLgYear\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("gYear", classDef); classDef = DataClass.parse( "DataClass \"XMLgYearMonth\" \"SIMPLE\" false () () " + "(ElementClassPart Constraint 1 1 \"value\" \"String\")"); builtInNonJavaTypes.put("gYearMonth", classDef); }} public static String getUniqueName(String itemType, String baseName) {{ HashSet nameType = (HashSet) nameTypes.get(itemType); if (nameType == null) return baseName; if (! nameType.contains(baseName)) return baseName; for (int suffix = 1; ; suffix++) { String newName = baseName + "_" + suffix; if (! nameType.contains(newName)) return newName; } }} public static void registerName(String itemType, String name) {{ HashSet nameType = (HashSet) nameTypes.get(itemType); if (nameType == null) { nameType = new HashSet(); nameTypes.put(itemType, nameType); } nameType.add(name); }} {{ public static class TypeInfo { String typeName; int category; DataClass classDef; DataClass listUnitClassDef; } }} }