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=dfcdfd3d7b78e1afbe903dc7e06cb1b969058db8;hb=fb01c21839aea801224aeb82b64bd261120619d5;hp=bf52b9bac6889e608746176e9e14edbb316f92d7;hpb=09fb8eafbc9046ead17f0529eebad0b0caf55e2b;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 bf52b9b..dfcdfd3 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 @@ -224,8 +224,63 @@ public abstract class JavaGenerator extends SchemaConversionBase{ writer.println(); } + 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 createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList); + @Override + protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType) { + String objectName; + if (referenceType != RefType.Element) { + QName refType; + if (referenceType == RefType.Type) { + refType = element.getElement().getType(); + if (refName == null) + refName = element.getElement().getName(); + objectName = element.getElement().getName(); + } else { + refType = element.getElement().getRef(); + if (refName == null) + refName = refType.getLocalPart(); + objectName = refType.getLocalPart(); + } + + String binding = getBindingFromPrimitiveType(refType); + if (binding == null) { + SchemaObject refElement = elementName.get(refType.getLocalPart()); + SchemaObject refComplexType = complexTypeName.get(refType.getLocalPart()); - + // prefer element reference over complex type reference + String primaryClassName = null; + String secondaryClassName = null; + if (refElement != null) + primaryClassName = getName(refElement); + else + primaryClassName = getName(refComplexType); + + if (refComplexType != null) { + secondaryClassName = getName(refComplexType); + } else { + secondaryClassName = getName(refElement); + } + boolean useElementList = useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refType); + boolean useOriginalList = useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refType); + createReferenceIndicator(parent, referenceType, refName, objectName, primaryClassName, secondaryClassName, useElementList, useOriginalList); + } else { + createPrimitiveIndicator(parent, refName, binding); + } + } else { + Element attrs= element.getElement(); + SchemaObject obj = getWithObj(parent, attrs); + + String className = getName(obj); + if (refName == null) + refName = attrs.getName(); + + boolean useElementList = useElementList(parent, indicator,element, false, refName, new QName(obj.getName())); + boolean useOriginalList = useOriginalList(parent, indicator,element, false, refName, new QName(obj.getName())); + createElementIndicator(parent, useElementList, refName, className, useOriginalList); + } + } }