\r
import javax.xml.namespace.QName;\r
\r
+import org.simantics.xml.sax.SchemaConversionBase.Inheritance;\r
import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
import org.simantics.xml.sax.SchemaConversionBase.TypeEntry;\r
import org.w3._2001.xmlschema.AttributeGroupRef;\r
return binding.getValueGetter();\r
}\r
\r
+ @Override\r
+ public String getSimpleTypePrefix() {\r
+ return "SimpleTypes_";\r
+ } \r
+ \r
@Override\r
public String getComplexTypePrefix() {\r
return "ComplexTypes_";\r
}\r
\r
@Override\r
- public void handleChoice(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements, String name) {\r
-\r
- for (SchemaElement e : elements) {\r
- Element localElement = e.getElement();\r
- if (localElement.getName() != null) {\r
- QName refType = localElement.getType();\r
- if (refType != null)\r
- //handleIndicator(parent, indicator, e, false, name, refType);\r
- handleIndicator(parent, indicator, e, name, RefType.Type);\r
- } else if (localElement.getRef() != null) {\r
- //QName refType = localElement.getRef();\r
- //handleIndicator(parent, indicator, e, true, name, refType);\r
- handleIndicator(parent, indicator, e, name, RefType.Reference);\r
- }\r
- }\r
+ public String handleChoice(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements, String name) {\r
+ String baseRelationName = getName(parent) + ".has" + name;\r
+ \r
+// for (SchemaElement e : elements) {\r
+// Element localElement = e.getElement();\r
+// if (localElement.getName() != null) {\r
+// QName refType = localElement.getType();\r
+// if (refType != null)\r
+// //handleIndicator(parent, indicator, e, false, name, refType);\r
+// handleIndicator(parent, indicator, e, name, RefType.Type, baseRelationName);\r
+// } else if (localElement.getRef() != null) {\r
+// //QName refType = localElement.getRef();\r
+// //handleIndicator(parent, indicator, e, true, name, refType);\r
+// handleIndicator(parent, indicator, e, name, RefType.Reference, baseRelationName);\r
+// }\r
+// }\r
\r
+ return baseRelationName;\r
}\r
\r
protected String getOntologyImport() {\r
case ATTRIBUTE_GROUP:\r
return getAttributeGroupPrefix()+obj.getName();\r
case SIMPLE_TYPE:\r
- return obj.getName();\r
+ return getSimpleTypePrefix()+obj.getName();\r
}\r
} else {\r
SchemaObject o = obj;\r
case ATTRIBUTE_GROUP:\r
return getAttributeGroupPrefix()+name;\r
case SIMPLE_TYPE:\r
- return name;\r
+ return getSimpleTypePrefix()+name;\r
}\r
}\r
throw new RuntimeException();\r
case ATTRIBUTE_GROUP:\r
return getAttributeGroupPrefix()+rel+obj.getName();\r
case SIMPLE_TYPE:\r
- return rel+obj.getName();\r
+ return getSimpleTypePrefix()+rel+obj.getName();\r
}\r
} else {\r
SchemaObject o = obj;\r
case ATTRIBUTE_GROUP:\r
return getAttributeGroupPrefix()+rel+name;\r
case SIMPLE_TYPE:\r
- return rel+name;\r
+ return getSimpleTypePrefix()+rel+name;\r
}\r
}\r
throw new RuntimeException();\r
\r
\r
protected abstract void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList);\r
- protected abstract void createPrimitiveIndicator(SchemaObject parent, String refName, String binding);\r
+ protected abstract void createPrimitiveIndicator(SchemaObject parent, String refName, TypeEntry typeEntry, QName typeName);\r
protected abstract void createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList);\r
\r
@Override\r
- public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType) {\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 refType;\r
+ QName refTypeName;\r
+ SchemaObject refObject = null;\r
if (referenceType == RefType.Type) {\r
- refType = element.getElement().getType();\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
- refType = element.getElement().getRef();\r
+ refTypeName = element.getElement().getRef();\r
if (refName == null)\r
- refName = refType.getLocalPart();\r
- objectName = refType.getLocalPart();\r
+ refName = refTypeName.getLocalPart();\r
+ objectName = refTypeName.getLocalPart();\r
+ refObject = this.base.getElement(refTypeName);\r
}\r
\r
- String binding = this.base.getBindingFromPrimitiveType(refType);\r
- if (binding == null) {\r
- SchemaObject refElement = this.base.getElement(refType);\r
- SchemaObject refComplexType = this.base.getComplexType(refType);\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 (refElement != null)\r
- primaryClassName = getName(refElement);\r
- else\r
- primaryClassName = getName(refComplexType);\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 (refComplexType != null) {\r
- secondaryClassName = getName(refComplexType);\r
- } else {\r
- secondaryClassName = getName(refElement);\r
+ if (refObject != null) {\r
+ secondaryClassName = getName(refObject);\r
}\r
- boolean useElementList = this.base.useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refType);\r
- boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refType);\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, binding);\r
+ createPrimitiveIndicator(parent, refName, typeEntry, refTypeName);\r
}\r
} else {\r
Element attrs= element.getElement();\r