X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FJavaGenerator.java;h=4869e0711e073297f01c390aac96849dcf9d6be3;hb=04f3fb6796cd6225be090e1e1feb866ae0d03173;hp=126dcf45691cb3110cf5d66c3ae422479082a126;hpb=d788a05e77b983199f0982a0e56629e7fc30c691;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java b/org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java index 126dcf4..4869e07 100644 --- a/org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java +++ b/org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java @@ -10,6 +10,7 @@ import java.util.Map; import javax.xml.namespace.QName; +import org.simantics.xml.sax.SchemaConversionBase.Inheritance; import org.simantics.xml.sax.SchemaConversionBase.RefType; import org.simantics.xml.sax.SchemaConversionBase.TypeEntry; import org.w3._2001.xmlschema.AttributeGroupRef; @@ -80,6 +81,11 @@ public abstract class JavaGenerator implements SchemaConversionComponent { return binding.getValueGetter(); } + @Override + public String getSimpleTypePrefix() { + return "SimpleTypes_"; + } + @Override public String getComplexTypePrefix() { return "ComplexTypes_"; @@ -91,22 +97,24 @@ public abstract class JavaGenerator implements SchemaConversionComponent { } @Override - public void handleChoice(SchemaObject parent, SchemaElement indicator, List elements, String name) { - - for (SchemaElement e : elements) { - Element localElement = e.getElement(); - if (localElement.getName() != null) { - QName refType = localElement.getType(); - if (refType != null) - //handleIndicator(parent, indicator, e, false, name, refType); - handleIndicator(parent, indicator, e, name, RefType.Type); - } else if (localElement.getRef() != null) { - //QName refType = localElement.getRef(); - //handleIndicator(parent, indicator, e, true, name, refType); - handleIndicator(parent, indicator, e, name, RefType.Reference); - } - } + public String handleChoice(SchemaObject parent, SchemaElement indicator, List elements, String name) { + String baseRelationName = getName(parent) + ".has" + name; + +// for (SchemaElement e : elements) { +// Element localElement = e.getElement(); +// if (localElement.getName() != null) { +// QName refType = localElement.getType(); +// if (refType != null) +// //handleIndicator(parent, indicator, e, false, name, refType); +// handleIndicator(parent, indicator, e, name, RefType.Type, baseRelationName); +// } else if (localElement.getRef() != null) { +// //QName refType = localElement.getRef(); +// //handleIndicator(parent, indicator, e, true, name, refType); +// handleIndicator(parent, indicator, e, name, RefType.Reference, baseRelationName); +// } +// } + return baseRelationName; } protected String getOntologyImport() { @@ -142,7 +150,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent { case ATTRIBUTE_GROUP: return getAttributeGroupPrefix()+obj.getName(); case SIMPLE_TYPE: - return obj.getName(); + return getSimpleTypePrefix()+obj.getName(); } } else { SchemaObject o = obj; @@ -165,7 +173,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent { case ATTRIBUTE_GROUP: return getAttributeGroupPrefix()+name; case SIMPLE_TYPE: - return name; + return getSimpleTypePrefix()+name; } } throw new RuntimeException(); @@ -182,7 +190,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent { case ATTRIBUTE_GROUP: return getAttributeGroupPrefix()+rel+obj.getName(); case SIMPLE_TYPE: - return rel+obj.getName(); + return getSimpleTypePrefix()+rel+obj.getName(); } } else { SchemaObject o = obj; @@ -203,7 +211,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent { case ATTRIBUTE_GROUP: return getAttributeGroupPrefix()+rel+name; case SIMPLE_TYPE: - return rel+name; + return getSimpleTypePrefix()+rel+name; } } throw new RuntimeException(); @@ -236,49 +244,60 @@ public abstract class JavaGenerator implements SchemaConversionComponent { protected abstract void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList); - protected abstract void createPrimitiveIndicator(SchemaObject parent, String refName, String binding); + protected abstract void createPrimitiveIndicator(SchemaObject parent, String refName, TypeEntry typeEntry, QName typeName); protected abstract void createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList); @Override - public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType) { + public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType, String baseRelationName) { String objectName; if (referenceType != RefType.Element) { - QName refType; + QName refTypeName; + SchemaObject refObject = null; if (referenceType == RefType.Type) { - refType = element.getElement().getType(); + refTypeName = element.getElement().getType(); if (refName == null) refName = element.getElement().getName(); objectName = element.getElement().getName(); + refObject = this.base.getComplexType(refTypeName); + if (refObject == null) this.base.getSimpleType(refTypeName); } else { - refType = element.getElement().getRef(); + refTypeName = element.getElement().getRef(); if (refName == null) - refName = refType.getLocalPart(); - objectName = refType.getLocalPart(); + refName = refTypeName.getLocalPart(); + objectName = refTypeName.getLocalPart(); + refObject = this.base.getElement(refTypeName); } - String binding = this.base.getBindingFromPrimitiveType(refType); - if (binding == null) { - SchemaObject refElement = this.base.elementName.get(refType.getLocalPart()); - SchemaObject refComplexType = this.base.complexTypeName.get(refType.getLocalPart()); - + TypeEntry typeEntry = this.base.getTypeEntry(refTypeName); + if (typeEntry == null) { // prefer element reference over complex type reference String primaryClassName = null; String secondaryClassName = null; - if (refElement != null) - primaryClassName = getName(refElement); - else - primaryClassName = getName(refComplexType); + if (refObject != null) + primaryClassName = getName(refObject); + else if (this.base.getSimpleType(refTypeName) != null) { + Inheritance inheritance = new Inheritance(""); + this.base.getAtomicTypeInheritance(refTypeName, inheritance); + if (inheritance.atomicType != null) { + createPrimitiveIndicator(parent, refName, inheritance.atomicType, refTypeName); + return; + } + else { + throw new RuntimeException("No supported atomic type found for simple type " + refTypeName.toString()); + } + } + else { + throw new RuntimeException("Type that is neither complex nor simple??"); + } - if (refComplexType != null) { - secondaryClassName = getName(refComplexType); - } else { - secondaryClassName = getName(refElement); + if (refObject != null) { + secondaryClassName = getName(refObject); } - boolean useElementList = this.base.useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refType); - boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refType); + boolean useElementList = this.base.useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName); + boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName); createReferenceIndicator(parent, referenceType, refName, objectName, primaryClassName, secondaryClassName, useElementList, useOriginalList); } else { - createPrimitiveIndicator(parent, refName, binding); + createPrimitiveIndicator(parent, refName, typeEntry, refTypeName); } } else { Element attrs= element.getElement();