+ @Override\r
+ public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType, String baseRelationName) {\r
+ String objectName;\r
+ if (referenceType != RefType.Element) {\r
+ QName refTypeName;\r
+ SchemaObject refObject = null;\r
+ if (referenceType == RefType.Type) {\r
+ refTypeName = element.getElement().getType();\r
+ if (refName == null)\r
+ refName = element.getElement().getName();\r
+ objectName = element.getElement().getName();\r
+ refObject = this.base.getComplexType(refTypeName);\r
+ if (refObject == null) this.base.getSimpleType(refTypeName);\r
+ } else {\r
+ refTypeName = element.getElement().getRef();\r
+ if (refName == null)\r
+ refName = refTypeName.getLocalPart();\r
+ objectName = refTypeName.getLocalPart();\r
+ refObject = this.base.getElement(refTypeName);\r
+ }\r
+ \r
+ TypeEntry typeEntry = this.base.getTypeEntry(refTypeName);\r
+ if (typeEntry == null) {\r
+ // prefer element reference over complex type reference\r
+ String primaryClassName = null;\r
+ String secondaryClassName = null;\r
+ if (refObject != null)\r
+ primaryClassName = getName(refObject);\r
+ else if (this.base.getSimpleType(refTypeName) != null) {\r
+ Inheritance inheritance = new Inheritance("");\r
+ this.base.getAtomicTypeInheritance(refTypeName, inheritance);\r
+ if (inheritance.atomicType != null) {\r
+ createPrimitiveIndicator(parent, refName, inheritance.atomicType, refTypeName);\r
+ return;\r
+ }\r
+ else {\r
+ throw new RuntimeException("No supported atomic type found for simple type " + refTypeName.toString());\r
+ }\r
+ }\r
+ else {\r
+ throw new RuntimeException("Type that is neither complex nor simple??");\r
+ }\r
+ \r
+ if (refObject != null) {\r
+ secondaryClassName = getName(refObject);\r
+ }\r
+ boolean useElementList = this.base.useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName);\r
+ boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName);\r
+ createReferenceIndicator(parent, referenceType, refName, objectName, primaryClassName, secondaryClassName, useElementList, useOriginalList);\r
+ } else {\r
+ createPrimitiveIndicator(parent, refName, typeEntry, refTypeName);\r
+ }\r
+ } else {\r
+ Element attrs= element.getElement();\r
+ SchemaObject obj = this.base.getWithObj(parent, attrs);\r
+ \r
+ String className = getName(obj);\r
+ if (refName == null)\r
+ refName = attrs.getName();\r
+ \r
+ boolean useElementList = this.base.useElementList(parent, indicator,element, false, refName, new QName(obj.getName()));\r
+ boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, false, refName, new QName(obj.getName()));\r
+ createElementIndicator(parent, useElementList, refName, className, useOriginalList);\r
+ }\r
+ }\r