X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FImporterGenerator.java;h=55ff5ef7e52f32ab0b830e9efa5a8b6ad689d2c1;hb=09fb8eafbc9046ead17f0529eebad0b0caf55e2b;hp=f55f9cfeb0ad7a5816cc584f84cf5cba32216ff8;hpb=404be73748777cdd2d09b2f29308ae6f4a3d730c;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java b/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java index f55f9cf..55ff5ef 100644 --- a/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java +++ b/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java @@ -11,6 +11,9 @@ import java.util.Map; import javax.xml.namespace.QName; import org.simantics.utils.datastructures.BijectionMap; +import org.simantics.xml.sax.SchemaConversionBase.InheritanceType; +import org.simantics.xml.sax.SchemaConversionBase.RefType; +import org.simantics.xml.sax.SchemaObject.ObjectType; import org.simantics.xml.sax.configuration.AttributeComposition; import org.simantics.xml.sax.configuration.Configuration; import org.simantics.xml.sax.configuration.IDProvider; @@ -114,7 +117,9 @@ public class ImporterGenerator extends JavaGenerator{ String name = getName(complexTypeObj); -// if (topLevelComplexType.getName().equals("Reference")) + //if (topLevelComplexType.getName().equals("LocalizedText")) + //if (topLevelComplexType.getName().equals("Reference")) +// if (topLevelComplexType.getName().equals("NodeIdAlias")) // System.out.println(); String className = name;//"_"+name; @@ -126,19 +131,8 @@ public class ImporterGenerator extends JavaGenerator{ throw new RuntimeException(e); } writers.put(complexTypeObj, fw); - - String baseClass = getBaseClass(); - - boolean inherited = false; - QName type = getComplexTypeBase(topLevelComplexType); - if (type != null && !type.getNamespaceURI().equals("http://www.w3.org/2001/XMLSchema")) { - SchemaObject obj = complexTypeName.get(type.getLocalPart()); - if (obj != null) { - baseClass = getName(obj); - inherited = true; - } - } + Inheritance inheritance = getInheritance(complexTypeObj); provider = getIDProvider(topLevelComplexType); List references = getIDReferences(topLevelComplexType); @@ -151,7 +145,7 @@ public class ImporterGenerator extends JavaGenerator{ intrerfaces.add("org.simantics.xml.sax.base.UnrecognizedElementParser"); createClassHeader(fw.writer, false); - writeClass(fw.writer,false, null, className, baseClass, intrerfaces); + writeClass(fw.writer,false, null, className, inheritance.baseClass, intrerfaces); writeIDProvider(fw.writer); @@ -192,9 +186,11 @@ public class ImporterGenerator extends JavaGenerator{ if (stringWriter.getBuffer().length() > 0) { fw.writer.write(stringWriter.toString()); } - - + if (inheritance.type == InheritanceType.ComplexType) { + fw.writer.println(" return super.connectChild(graph,element,child);"); + }else{ fw.writer.println(" return false;"); + } fw.writer.println(" }"); fw.writer.println(); @@ -211,7 +207,7 @@ public class ImporterGenerator extends JavaGenerator{ fw.writer.println(" @Override"); fw.writer.println(" public void configure(WriteGraph graph, Deque parents, ParserElement element) throws DatabaseException {"); - if (inherited) { + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" super.configure(graph,parents,element);"); } fw.writer.println(" "+getOntologyImport()); @@ -221,6 +217,14 @@ public class ImporterGenerator extends JavaGenerator{ fw.writer.println(" }"); + if (inheritance.type == InheritanceType.AtomicType) { + fw.writer.println(); + fw.writer.println(" @Override"); + fw.writer.println(" public void configure(WriteGraph graph, ParserElement element, java.lang.String string) throws DatabaseException {"); + fw.writer.println(" graph.claimValue(element.getData(), "+getValueGetter(inheritance.atomicType,"string")+", "+inheritance.atomicType.binding+");"); + fw.writer.println(" }"); + } + writeIDReferences(fw.writer,name, references); writeUnknownChild(fw.writer,name,unknownChildElement); @@ -234,19 +238,21 @@ public class ImporterGenerator extends JavaGenerator{ } @Override - //protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, boolean reference, String ref, QName refType) { protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType) { FileWriter fw = getWriter(parent); + 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); @@ -254,27 +260,35 @@ public class ImporterGenerator extends JavaGenerator{ SchemaObject refElement = elementName.get(refType.getLocalPart()); SchemaObject refComplexType = complexTypeName.get(refType.getLocalPart()); - String className = null; - String refClassName = null; + // prefer element reference over complex type reference + String primaryClassName = null; + String secondaryClassName = null; if (refElement != null) - className = getName(refElement); + primaryClassName = getName(refElement); else - className = getName(refComplexType); + primaryClassName = getName(refComplexType); if (refComplexType != null) { - refClassName = getName(refComplexType); + secondaryClassName = getName(refComplexType); } else { - refClassName = getName(refElement); + secondaryClassName = getName(refElement); } - if (referenceType != RefType.Reference) - fw.writer.println(" addParser(\""+ refName +"\", "+className+".class);"); - else - fw.writer.println(" addParser("+className+".class);"); - if (!className.equals(refClassName)) - fw.writer.println(" addParser("+refClassName+".class);"); + if (referenceType == RefType.Type) { + // create internal class for handling the element and child attachment + secondaryClassName = getName(parent) +"_" +objectName; + fw.writer.println(" addParser(\""+ objectName +"\", "+secondaryClassName+".class);"); + fw.delayedWriter2.println(" public static class " + secondaryClassName +" extends " + primaryClassName +"{"); + fw.delayedWriter2.println(" public "+ secondaryClassName +"(){"); + fw.delayedWriter2.println(" }"); + fw.delayedWriter2.println(" }"); + } else { // referenceType == RefType.Reference + fw.writer.println(" addParser("+primaryClassName+".class);"); + if (!primaryClassName.equals(secondaryClassName)) + fw.writer.println(" addParser("+secondaryClassName+".class);"); + } - fw.delayedWriter.println(" if (child.getElementParser() instanceof "+refClassName+"){"); + fw.delayedWriter.println(" if (child.getElementParser() instanceof "+secondaryClassName+"){"); fw.delayedWriter.println(" graph.claim(element.getData(), "+ontShort+getName(parent)+"_has"+refName + ", child.getData());"); if (useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refType)) { @@ -584,7 +598,7 @@ public class ImporterGenerator extends JavaGenerator{ writers.put(elementObj, fw); boolean isList = false; - Inheritance inhertiance = getElementInheritance(elementObj); + Inheritance inheritance = getInheritance(elementObj); provider = getIDProvider(element); List references = getIDReferences(element); @@ -597,7 +611,7 @@ public class ImporterGenerator extends JavaGenerator{ intrerfaces.add("org.simantics.xml.sax.base.UnrecognizedElementParser"); createClassHeader(fw.writer, isList); - writeClass(fw.writer,false, element.getName(), className, inhertiance.baseClass, intrerfaces); + writeClass(fw.writer,false, element.getName(), className, inheritance.baseClass, intrerfaces); writeIDProvider(fw.writer); fw.writer.println(" @Override"); fw.writer.println(" public Resource create(WriteGraph graph, ParserElement element) throws DatabaseException{"); @@ -623,7 +637,7 @@ public class ImporterGenerator extends JavaGenerator{ fw.writer.println(" @Override"); fw.writer.println(" public void configure(WriteGraph graph, Deque parents, ParserElement element) throws DatabaseException {"); - if (inhertiance.type == InheritanceType.ComplexType) { + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" super.configure(graph,parents,element);"); } fw.writer.println(" "+getOntologyImport()); @@ -637,11 +651,11 @@ public class ImporterGenerator extends JavaGenerator{ } fw.writer.println(" }"); - if (inhertiance.type == InheritanceType.AtomicType) { + if (inheritance.type == InheritanceType.AtomicType) { fw.writer.println(); fw.writer.println(" @Override"); fw.writer.println(" public void configure(WriteGraph graph, ParserElement element, java.lang.String string) throws DatabaseException {"); - fw.writer.println(" graph.claimValue(element.getData(), "+getValueGetter(inhertiance.atomicType,"string")+", "+inhertiance.atomicType.binding+");"); + fw.writer.println(" graph.claimValue(element.getData(), "+getValueGetter(inheritance.atomicType,"string")+", "+inheritance.atomicType.binding+");"); fw.writer.println(" }"); } // if (simpleType != null) { @@ -674,7 +688,7 @@ public class ImporterGenerator extends JavaGenerator{ if (stringWriter.getBuffer().length() > 0) { fw.writer.write(stringWriter.toString()); } - if (inhertiance.type == InheritanceType.ComplexType) { + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" return super.connectChild(graph,element,child);"); } else { fw.writer.println(" return false;"); @@ -767,7 +781,7 @@ public class ImporterGenerator extends JavaGenerator{ } @Override - protected String getBaseClass() { + protected String getBaseClass(ObjectType type) { return "org.simantics.xml.sax.base.XMLElementNamedChildParserBase"; }