return type;\r
}\r
}\r
-// SimpleContent simpleContent = complexType.getSimpleContent();\r
-// if (simpleContent != null) {\r
-// ExtensionType extensionType = simpleContent.getExtension();\r
-// if (extensionType != null) {\r
-// QName type = extensionType.getBase();\r
-// return type;\r
-// }\r
-// }\r
return null;\r
}\r
\r
protected void handle(SchemaObject parent, SchemaElement indicator, SchemaElement element) {\r
Element localElement = element.getElement();\r
if (localElement.getName() != null) {\r
- SchemaObject eObj = elements.get(localElement); // FIXME: handleIndicator should be refactored, not this methdof must be overridden in JavaGenerator to handle renaming of Elements properly\r
- //String refName = eObj.getName();//localElement.getName();\r
+ SchemaObject eObj = elements.get(localElement); \r
QName refType = localElement.getType();\r
if (refType != null)\r
- //handleIndicator(parent, indicator, element, false, refName, refType);\r
handleIndicator(parent, indicator, element, null, RefType.Type);\r
else {\r
handleElement(eObj);\r
- //handleIndicator(parent, indicator, element, false, refName, localElement);\r
handleIndicator(parent, indicator, element, null, RefType.Element);\r
}\r
} else if (localElement.getRef() != null) {\r
- //QName refType = localElement.getRef();\r
- //handleIndicator(parent, indicator,element, true, refType.getLocalPart(), refType);\r
handleIndicator(parent, indicator,element, null, RefType.Reference);\r
}\r
}\r
}\r
\r
}\r
+ \r
+ public enum InheritanceType{ComplexType,AtomicType,None};\r
+ \r
+ public static class Inheritance {\r
+ public String baseClass;\r
+ public InheritanceType type;\r
+ public TypeEntry atomicType;\r
+ \r
+ public Inheritance(String baseClass) {\r
+ this.baseClass = baseClass;\r
+ this.type = InheritanceType.None;\r
+ }\r
+ }\r
+ \r
+ public abstract String getComplexTypePrefix(); \r
+ \r
+ public abstract String getAttributeGroupPrefix();\r
+ \r
+ public abstract String getName(SchemaObject obj);\r
+ \r
+ protected abstract String getBaseClass(ObjectType type);\r
+ \r
+ \r
+ \r
+ protected Inheritance getInheritance(SchemaObject topLevelObj) {\r
+ Inheritance inheritance = null;\r
+ if (topLevelObj.getType() == ObjectType.ELEMENT) {\r
+ Element topLevelElement = topLevelObj.getElement();\r
+ inheritance = new Inheritance(getBaseClass(ObjectType.ELEMENT));\r
+ if (topLevelElement.getType() != null) {\r
+ QName type = topLevelElement.getType();\r
+ if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
+ SchemaObject obj = complexTypeName.get(type.getLocalPart());\r
+ // if (obj == null)\r
+ // obj = simpleTypeName.get(type.getLocalPart());\r
+ if (obj != null) {\r
+ inheritance.baseClass = getName(obj);\r
+ inheritance.type = InheritanceType.ComplexType;\r
+ }\r
+ } else {\r
+ TypeEntry entry = getTypeEntry(type);\r
+ if (entry != null) {\r
+ inheritance.type = InheritanceType.AtomicType;\r
+ inheritance.atomicType = entry;\r
+ }\r
+ }\r
+ }\r
+ if (inheritance.type == InheritanceType.None) {\r
+ QName type = getElementBase(topLevelElement);\r
+ if (type != null) {\r
+ if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
+ SchemaObject obj = getWithName(topLevelObj, type.getLocalPart());\r
+ inheritance.baseClass = getName(obj);\r
+ inheritance.type = InheritanceType.ComplexType;\r
+ } else {\r
+ TypeEntry entry = getTypeEntry(type);\r
+ if (entry != null) {\r
+ inheritance.type = InheritanceType.AtomicType;\r
+ inheritance.atomicType = entry;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (inheritance.type == InheritanceType.None) {\r
+ QName type = topLevelElement.getSubstitutionGroup();\r
+ if (type != null) {\r
+ if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
+ SchemaObject obj = getWithName(topLevelObj, type.getLocalPart());\r
+ inheritance.baseClass = getName(obj);\r
+ inheritance.type = InheritanceType.ComplexType;\r
+ } else {\r
+ TypeEntry entry = getTypeEntry(type);\r
+ if (entry != null) {\r
+ inheritance.type = InheritanceType.AtomicType;\r
+ inheritance.atomicType = entry;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ } else if (topLevelObj.getType() == ObjectType.COMPLEX_TYPE) {\r
+ ComplexType complexType = topLevelObj.getComplexType();\r
+ QName type = getComplexTypeBase(complexType);\r
+ inheritance = new Inheritance(getBaseClass(ObjectType.COMPLEX_TYPE));\r
+ if (type != null && !type.getNamespaceURI().equals("http://www.w3.org/2001/XMLSchema")) {\r
+ SchemaObject obj = complexTypeName.get(type.getLocalPart());\r
+ if (obj != null) {\r
+ inheritance.baseClass = getName(obj);\r
+ inheritance.type = InheritanceType.ComplexType;\r
+ }\r
+ }\r
+ SimpleContent simpleContent = complexType.getSimpleContent();\r
+ if (simpleContent != null) {\r
+ ExtensionType extensionType = simpleContent.getExtension();\r
+ if (extensionType != null) {\r
+ type = extensionType.getBase();\r
+ getAtomicTypeInheritance(type, topLevelObj, inheritance);\r
+ }\r
+ }\r
+ }\r
+ \r
+ return inheritance;\r
+ } \r
+ /**\r
+ * Goes through chain of SimpleTypes until locates Atomic Type (type defined in XML schema). \r
+ * @param type\r
+ * @param topLevelObj\r
+ * @param inheritance\r
+ */\r
+ protected void getAtomicTypeInheritance(QName type, SchemaObject topLevelObj, Inheritance inheritance) {\r
+ if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
+ SchemaObject obj = getWithName(topLevelObj, type.getLocalPart());\r
+ if (obj.getType() != ObjectType.SIMPLE_TYPE)\r
+ throw new RuntimeException("SimpleContent does not use SimpleType definition");\r
+ SimpleType simpleType = obj.getSimpleType();\r
+ type = getSimpleTypeBase(simpleType);\r
+ getAtomicTypeInheritance(type, topLevelObj, inheritance);\r
+ } else {\r
+ TypeEntry entry = getTypeEntry(type);\r
+ if (entry != null) {\r
+ inheritance.type = InheritanceType.AtomicType;\r
+ inheritance.atomicType = entry;\r
+ }\r
+ }\r
+ }\r
\r
}\r