X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FExporterGenerator.java;h=74538ea1c7716cc9fca8d2f94aa94d9159b628f3;hb=90d821c64af7690fe7e108c3f5b89da8fa5395fc;hp=c767311b66be7a42a951e00d28fff9d4fee0c7aa;hpb=28cdb08c2dcc6b306d8a0cbea8c0bd791e42d583;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java b/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java index c767311..74538ea 100644 --- a/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java +++ b/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java @@ -12,6 +12,7 @@ import javax.xml.namespace.QName; import org.simantics.utils.datastructures.BijectionMap; 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; @@ -25,7 +26,6 @@ import org.w3._2001.xmlschema.Element; import org.w3._2001.xmlschema.LocalComplexType; import org.w3._2001.xmlschema.LocalSimpleType; import org.w3._2001.xmlschema.NamedAttributeGroup; -import org.w3._2001.xmlschema.OpenAttrs; import org.w3._2001.xmlschema.Restriction; import org.w3._2001.xmlschema.Schema; import org.w3._2001.xmlschema.SimpleType; @@ -39,7 +39,7 @@ public class ExporterGenerator extends JavaGenerator{ - public void createParser(Schema schema,String className, SchemaConverter converter) throws IOException { + public void createParser(Schema schema,String ontologyUri, String className, SchemaConverter converter) throws IOException { this.schema = schema; this.ontologyClassName = className; this.converter = converter; @@ -101,6 +101,7 @@ public class ExporterGenerator extends JavaGenerator{ mainWriter.println(" public " + name + parserClassPostfix+"(Session session) throws DatabaseException {"); if (schema.getTargetNamespace() != null) mainWriter.println(" setSchemaURI(\""+schema.getTargetNamespace()+"\");"); + mainWriter.println(" setOntologyURI(\""+ontologyUri+"\");"); mainWriter.println(" session.syncRequest(new ReadRequest() {"); mainWriter.println(" @Override"); mainWriter.println(" public void run(ReadGraph graph) throws DatabaseException {"); @@ -123,16 +124,19 @@ public class ExporterGenerator extends JavaGenerator{ } @Override - protected String getBaseClass() { + protected String getBaseClass(ObjectType type) { return "org.simantics.xml.sax.base.XMLElementNamedChildWriterBase"; } + @Override + protected void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) { + } @Override protected void handleComplexType(SchemaObject complexTypeObj) { ComplexType topLevelComplexType = complexTypeObj.getComplexType(); - String name = getName(complexTypeObj);//topLevelComplexType.getName(); + String name = getName(complexTypeObj); String className = name;//"_"+name; @@ -143,22 +147,26 @@ public class ExporterGenerator extends JavaGenerator{ throw new RuntimeException(e); } writers.put(complexTypeObj, fw); - - boolean isList = false; - String baseClass = "org.simantics.xml.sax.base.XMLElementNamedChildWriterBase"; - - boolean inherited = false; - - QName type = getComplexTypeBase(topLevelComplexType); - if (type != null && !type.getNamespaceURI().equals("http://www.w3.org/2001/XMLSchema")) { - baseClass = getName(complexTypeName.get(type.getLocalPart())); - inherited = true; - } +// String baseClass = getBaseClass(ObjectType.COMPLEX_TYPE); +// +// 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) +//// obj = simpleTypeName.get(type.getLocalPart()); +// if (obj != null) { +// baseClass = getName(obj); +// inherited = true; +// } +// } + Inheritance inheritance = getInheritance(complexTypeObj); provider = getIDProvider(topLevelComplexType); - List references = getIDReferences(topLevelComplexType); - UnrecognizedChildElement unknownChildElement = getUnknown(topLevelComplexType); +// List references = getIDReferences(topLevelComplexType); +// UnrecognizedChildElement unknownChildElement = getUnknown(topLevelComplexType); // List intrerfaces = new ArrayList(); // if (references.size() > 0) @@ -167,7 +175,7 @@ public class ExporterGenerator extends JavaGenerator{ // intrerfaces.add("org.simantics.xml.sax.base.UnrecognizedElementParser"); createClassHeader(fw.writer); - writeClass(fw.writer,false, null, className, baseClass, Collections.EMPTY_LIST); + writeClass(fw.writer,false, topLevelComplexType.getName(), className, inheritance.baseClass, Collections.EMPTY_LIST); // writeIDProvider(fw.writer); @@ -220,7 +228,8 @@ public class ExporterGenerator extends JavaGenerator{ if (stringWriter.getBuffer().length() > 0) { fw.writer.write(stringWriter.toString()); } - + if (inheritance.type == InheritanceType.ComplexType) + fw.writer.println(" super.children(graph,instance,result);"); fw.writer.println(" }"); fw.writer.println(); @@ -237,7 +246,7 @@ public class ExporterGenerator extends JavaGenerator{ fw.writer.println(" @Override"); fw.writer.println(" public void attributes(ReadGraph graph, WriterElement instance, Collection attributes, XMLStreamWriter writer) throws XMLStreamException, DatabaseException{"); - if (inherited) { + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" super.attributes(graph,instance,attributes,writer);"); } fw.writer.println(" "+getOntologyImport()); @@ -247,6 +256,14 @@ public class ExporterGenerator extends JavaGenerator{ fw.writer.println(" }"); fw.writer.println(" }"); + if (inheritance.type == InheritanceType.AtomicType) { + fw.writer.println(); + fw.writer.println(" @Override"); + fw.writer.println(" public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException, DatabaseException {"); + fw.writer.println(" writer.writeCharacters("+inheritance.atomicType.getToString("graph.getValue(instance.getResource(),"+inheritance.atomicType.binding+")")+");"); + fw.writer.println(" }"); + } + // writeIDReferences(fw.writer,name, references); // writeUnknownChild(fw.writer,name,unknownChildElement); @@ -259,137 +276,47 @@ public class ExporterGenerator extends JavaGenerator{ provider = null; } - - @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) { + protected void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, + String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList) { FileWriter fw = getWriter(parent); - if (referenceType != RefType.Element) { - QName refType; - if (referenceType == RefType.Type) { - refType = element.getElement().getType(); - if (refName == null) - refName = element.getElement().getName(); - } else { - refType = element.getElement().getRef(); - if (refName == null) - refName = refType.getLocalPart(); - } - - String binding = getBindingFromPrimitiveType(refType); - if (binding == null) { - SchemaObject refElement = elementName.get(refType.getLocalPart()); - SchemaObject refComplexType = complexTypeName.get(refType.getLocalPart()); - - String className = null; - String refClassName = null; - if (refElement != null) - className = getName(refElement); - else - className = getName(refComplexType); - - if (refComplexType != null) { - refClassName = getName(refComplexType); - } else { - refClassName = getName(refElement); - } - - if (referenceType != RefType.Reference) - fw.writer.println(" addTypeWriter("+ontShort+ className +", "+className+".class);"); - else - fw.writer.println(" addWriter("+className+".class);"); - if (!className.equals(refClassName)) - fw.writer.println(" addWriter("+refClassName+".class);"); - - // fw.delayedWriter.println(" if (child.getElementParser() instanceof "+refClassName+"){"); - // fw.delayedWriter.println(" graph.claim(element.getData(), "+ontShort+getName(parent)+"_has"+ref + ", child.getData());"); - if (useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refType)) { - - // element type specific list - fw.delayedWriter.println(" {"); - fw.delayedWriter.println(" org.simantics.db.Resource list = graph.getPossibleObject(instance.getResource(),"+ontShort+getName(parent)+"_has"+refName + "List);"); - fw.delayedWriter.println(" if (list != null) {"); - fw.delayedWriter.println(" java.util.List l = org.simantics.db.common.utils.ListUtils.toList(graph, list);"); - fw.delayedWriter.println(" result.addAll(l);"); - fw.delayedWriter.println(" } else {"); - fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); - fw.delayedWriter.println(" }"); - fw.delayedWriter.println(" }"); - } else { - fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); - } - // if (useOriginalList(parent, indicator,element, reference, ref, refType)) { - // // generic list - // fw.delayedWriter.println(" {"); - // fw.delayedWriter.println(" XMLResource XML = XMLResource.getInstance(graph);"); - // fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(), XML.hasOriginalElementList);"); - // fw.delayedWriter.println(" if (list == null) {"); - // fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); - // fw.delayedWriter.println(" graph.claim(element.getData(), XML.hasOriginalElementList,list);"); - // fw.delayedWriter.println(" } else {"); - // fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); - // fw.delayedWriter.println(" }"); - // fw.delayedWriter.println(" }"); - // } - - // fw.delayedWriter.println(" return true;"); - // fw.delayedWriter.println(" }"); - } else { - SchemaObject refElement = elementName.get(refType.getLocalPart()); - //writer.println(commentTag+ontShort+"."+parent+".has"+ref + " l = org.simantics.db.common.utils.ListUtils.toList(graph, list);"); - fw.delayedWriter.println(" result.addAll(l);"); - fw.delayedWriter.println(" } else {"); - fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); - fw.delayedWriter.println(" }"); - fw.delayedWriter.println(" }"); - } else { - fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); - } -// // element type specific list -// fw.delayedWriter.println(" {"); -// fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+ref + "List);"); -// fw.delayedWriter.println(" if (list == null) {"); -// fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); -// fw.delayedWriter.println(" graph.claim(element.getData(),"+ontShort+getName(parent)+"_has"+ref + "List,list);"); -// fw.delayedWriter.println(" } else {"); -// fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); -// fw.delayedWriter.println(" }"); -// fw.delayedWriter.println(" }"); -// } -// if (useOriginalList(parent, indicator,element, reference, ref, new QName(obj.getName()))) { + if (useElementList) { + + // element type specific list + fw.delayedWriter.println(" {"); + fw.delayedWriter.println(" org.simantics.db.Resource list = graph.getPossibleObject(instance.getResource(),"+ontShort+getName(parent)+"_has"+refName + "List);"); + fw.delayedWriter.println(" if (list != null) {"); + fw.delayedWriter.println(" java.util.List l = org.simantics.db.common.utils.ListUtils.toList(graph, list);"); + fw.delayedWriter.println(" result.addAll(l);"); + fw.delayedWriter.println(" } else {"); + fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); + fw.delayedWriter.println(" }"); + fw.delayedWriter.println(" }"); + } else { + fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); + } +// if (useOriginalList(parent, indicator,element, reference, ref, refType)) { // // generic list // fw.delayedWriter.println(" {"); // fw.delayedWriter.println(" XMLResource XML = XMLResource.getInstance(graph);"); @@ -402,13 +329,82 @@ public class ExporterGenerator extends JavaGenerator{ // fw.delayedWriter.println(" }"); // fw.delayedWriter.println(" }"); // } -// + // fw.delayedWriter.println(" return true;"); // fw.delayedWriter.println(" }"); - } + } + @Override + protected void createPrimitiveIndicator(SchemaObject parent, String refName, String binding) { + FileWriter fw = getWriter(parent); + //SchemaObject refElement = elementName.get(refType.getLocalPart()); + //writer.println(commentTag+ontShort+"."+parent+".has"+ref + " l = org.simantics.db.common.utils.ListUtils.toList(graph, list);"); + fw.delayedWriter.println(" result.addAll(l);"); + fw.delayedWriter.println(" } else {"); + fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); + fw.delayedWriter.println(" }"); + fw.delayedWriter.println(" }"); + } else { + fw.delayedWriter.println(" result.addAll(graph.getObjects(instance.getResource(), "+ontShort+getName(parent)+"_has"+refName + "));"); + } +// // element type specific list +// fw.delayedWriter.println(" {"); +// fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+ref + "List);"); +// fw.delayedWriter.println(" if (list == null) {"); +// fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); +// fw.delayedWriter.println(" graph.claim(element.getData(),"+ontShort+getName(parent)+"_has"+ref + "List,list);"); +// fw.delayedWriter.println(" } else {"); +// fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); +// fw.delayedWriter.println(" }"); +// fw.delayedWriter.println(" }"); +// } +// if (useOriginalList(parent, indicator,element, reference, ref, new QName(obj.getName()))) { +// // generic list +// fw.delayedWriter.println(" {"); +// fw.delayedWriter.println(" XMLResource XML = XMLResource.getInstance(graph);"); +// fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(), XML.hasOriginalElementList);"); +// fw.delayedWriter.println(" if (list == null) {"); +// fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); +// fw.delayedWriter.println(" graph.claim(element.getData(), XML.hasOriginalElementList,list);"); +// fw.delayedWriter.println(" } else {"); +// fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); +// fw.delayedWriter.println(" }"); +// fw.delayedWriter.println(" }"); +// } +// +// fw.delayedWriter.println(" return true;"); +// fw.delayedWriter.println(" }"); + + } @Override protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) { @@ -617,10 +613,7 @@ public class ExporterGenerator extends JavaGenerator{ } - @Override - protected void handleSimpleType(SchemaObject parent, SchemaObject simpleType) { - - } + @@ -641,7 +634,7 @@ public class ExporterGenerator extends JavaGenerator{ writers.put(elementObj, fw); boolean isList = false; - Inheritance inhertiance = getElementInheritance(elementObj); + Inheritance inheritance = getInheritance(elementObj); provider = getIDProvider(element); List references = getIDReferences(element); @@ -654,7 +647,7 @@ public class ExporterGenerator extends JavaGenerator{ // intrerfaces.add("org.simantics.xml.sax.base.UnrecognizedElementParser"); createClassHeader(fw.writer); - writeClass(fw.writer,false, element.getName(), className, inhertiance.baseClass, Collections.EMPTY_LIST); + writeClass(fw.writer,false, element.getName(), className, inheritance.baseClass, Collections.EMPTY_LIST); // writeIDProvider(fw.writer); fw.writer.println(" @Override"); fw.writer.println(" public Resource getType(ReadGraph graph) throws DatabaseException {"); @@ -682,7 +675,7 @@ public class ExporterGenerator extends JavaGenerator{ fw.writer.println(" @Override"); fw.writer.println(" public void attributes(ReadGraph graph, WriterElement instance, Collection attributes, XMLStreamWriter writer) throws XMLStreamException, DatabaseException{"); - if (inhertiance.type == InheritanceType.ComplexType) { + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" super.attributes(graph,instance,attributes,writer);"); } fw.writer.println(" "+getOntologyImport()); @@ -711,7 +704,7 @@ public class ExporterGenerator 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 {"); @@ -719,7 +712,7 @@ public class ExporterGenerator extends JavaGenerator{ // fw.writer.println(" }"); fw.writer.println(" @Override"); fw.writer.println(" public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException, DatabaseException {"); - fw.writer.println(" writer.writeCharacters("+inhertiance.atomicType.getToString("graph.getValue(instance.getResource(),"+inhertiance.atomicType.binding+")")+");"); + fw.writer.println(" writer.writeCharacters("+inheritance.atomicType.getToString("graph.getValue(instance.getResource(),"+inheritance.atomicType.binding+")")+");"); // fw.writer.println(" graph.claimValue(element.getData(),"+getValueGetter(binding)+", "+binding.binding +");"); fw.writer.println(" }"); } @@ -754,7 +747,7 @@ public class ExporterGenerator extends JavaGenerator{ fw.writer.write(stringWriter.toString()); } - if (inhertiance.type == InheritanceType.ComplexType) { + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" super.children(graph,instance,result);"); }