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=3e02434e797481d721e9e1f5ac0a0290f5a8e322;hb=refs%2Fheads%2Frelease%2F1.32.1;hp=f1076b80bda639560696b04eff3a3db08c896466;hpb=7f59891d2747280b09e77bc833bc70e05eece706;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 f1076b8..3e02434 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 @@ -199,10 +199,11 @@ public class ImporterGenerator extends JavaGenerator{ fw.writer.println(" @Override"); fw.writer.println(" public void configure(WriteGraph graph, Deque parents, ParserElement element) throws DatabaseException {"); if (inheritance.type == InheritanceType.ComplexType) { - fw.writer.println(" super.configure(graph,parents,element);"); + fw.writer.println(" super.configure(graph,parents,element);"); } - fw.writer.println(" "+getOntologyImport()); - + fw.writer.println(" "+getOntologyImport()); + fw.writer.println(" Layer0 L0 = Layer0.getInstance(graph);"); + fw.writer.println(" XMLResource XML = XMLResource.getInstance(graph);"); this.base.handleComplexTypeAttributes(complexTypeObj); this.base.handleExtensionAttributes(complexTypeObj); @@ -251,26 +252,28 @@ public class ImporterGenerator extends JavaGenerator{ // element type specific list fw.delayedWriter.println(" {"); - fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+refName + "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"+refName + "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(" element.registerListChild("+ontShort+getName(parent)+"_has"+refName + "_List, child);"); +// fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+refName + "_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"+refName + "_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) { // 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(" element.registerListChild(XML.hasOriginalElementList, child);"); +// 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(" }"); } @@ -279,14 +282,30 @@ public class ImporterGenerator extends JavaGenerator{ } @Override - protected void createPrimitiveIndicator(SchemaObject parent, String refName, String binding) { + protected void createPrimitiveIndicator(SchemaObject parent, String refName, TypeEntry typeEntry, QName typeName) { FileWriter fw = getWriter(parent); - fw.writer.println(" addParser(\""+ refName +"\", "+getName(parent) +"_" +refName+".class);"); + String className = getName(parent) +"_" +refName; + fw.writer.println(" addParser(\"" + refName + "\", " + className + ".class);"); + fw.delayedWriter2.println(" public static class " + className + " extends org.simantics.xml.sax.base.ValueElementParser {"); + fw.delayedWriter2.println(" public "+ className +"(){"); + fw.delayedWriter2.println(" super(\""+refName+"\"," +this.ontologyClassName+".URIs."+getName(parent) + "_has"+refName+", "+typeEntry.binding+");"); + fw.delayedWriter2.println(" }\n"); + fw.delayedWriter2.println(" @Override"); + fw.delayedWriter2.println(" public void configure(WriteGraph graph, ParserElement element, java.lang.String value) throws DatabaseException {"); + fw.delayedWriter2.println(" Layer0 L0 = Layer0.getInstance(graph);"); + + SchemaObject simpleType = base.getSimpleType(typeName); + String ontologyClassName = converter.getOntologyClassName(typeName.getNamespaceURI()); + if (ontologyClassName != null && simpleType != null) + fw.delayedWriter2.println(" graph.claim(element.getData(), L0.InstanceOf, " + ontologyClassName + ".getInstance(graph)." + getName(simpleType, "") + ");"); + else { + if (typeEntry.l0Type.startsWith("XML")) + fw.delayedWriter2.println(" XMLResource XML = XMLResource.getInstance(graph);"); + fw.delayedWriter2.println(" graph.claim(element.getData(), L0.InstanceOf, " + typeEntry.l0Type + ");"); + } - fw.delayedWriter2.println(" public static class " + getName(parent) +"_" +refName+" extends org.simantics.xml.sax.base.ValueElementParser {"); - fw.delayedWriter2.println(" public "+ getName(parent) +"_" +refName +"(){"); - fw.delayedWriter2.println(" super(\""+refName+"\"," +this.ontologyClassName+".URIs."+getName(parent) + "_has"+refName+", "+binding+");"); - fw.delayedWriter2.println(" }"); + fw.delayedWriter2.println(" graph.claimValue(element.getData(), " +getValueGetter(typeEntry) + ", " + typeEntry.binding + ");"); + fw.delayedWriter2.println(" }"); fw.delayedWriter2.println(" }"); } @@ -304,26 +323,28 @@ public class ImporterGenerator extends JavaGenerator{ // element type specific list fw.delayedWriter.println(" {"); - fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+refName + "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"+refName + "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(" element.registerListChild(" + ontShort+getName(parent)+"_has"+refName + "_List, child);"); +// fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+refName + "_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"+refName + "_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) { // 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(" element.registerListChild(XML.hasOriginalElementList, child);"); +// 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(" }"); } @@ -386,7 +407,7 @@ public class ImporterGenerator extends JavaGenerator{ TypeEntry binding = this.base.getTypeEntry(primitiveType); if (binding != null) { - writeAttribute(fw, attrName, relationName, binding, isReference); + writeAttribute(fw, attrName, relationName, binding, isReference, primitiveType); return; } else { if (simpleType == null) { @@ -399,8 +420,9 @@ public class ImporterGenerator extends JavaGenerator{ if (simpleType != null) { org.w3._2001.xmlschema.List list = simpleType.getList(); if (list != null) { - TypeEntry binding = this.base.getTypeEntry(new QName(SchemaConversionBase.SCHEMA_NS, "string")); - writeAttribute(fw, attrName, relationName, binding, isReference); + QName typeName = new QName(SchemaConversionBase.SCHEMA_NS, "string"); + TypeEntry binding = this.base.getTypeEntry(typeName); + writeAttribute(fw, attrName, relationName, binding, isReference, typeName); } else { // Restriction restriction = simpleType.getRestriction(); // if (restriction == null) @@ -411,22 +433,24 @@ public class ImporterGenerator extends JavaGenerator{ //String binding = getBindingFromPrimitiveType(base); TypeEntry binding = this.base.getTypeEntry(base); - writeAttribute(fw, attrName, relationName, binding, isReference); + writeAttribute(fw, attrName, relationName, binding, isReference, base); } } else { // TODO : using default String attribute should be configured with rules. //throw new RuntimeException("Cannot resolve type for Attribute " + attrName + " -> " + primitiveType.getLocalPart()); fw.writer.println(" //FIXME: Cannot resolve type for Attribute " + attrName + " Using default type String"); //writeAttribute(fw, attrName, relationName, "STRING", isReference); - writeAttribute(fw, attrName, relationName, this.base.getTypeEntry("string"), isReference); + writeAttribute(fw, attrName, relationName, this.base.getTypeEntry("string"), isReference, new QName(SchemaConversionBase.SCHEMA_NS, "string")); } } - private void writeAttribute(FileWriter fw, String attrName, String relationName, TypeEntry binding, boolean isReference) { + private void writeAttribute(FileWriter fw, String attrName, String relationName, TypeEntry binding, boolean isReference, QName typeName) { + String ontologyClassName = converter.getOntologyClassName(typeName.getNamespaceURI()); + String ontologyType = ontologyClassName != null ? ontologyClassName + ".getInstance(graph)." + getName(base.getSimpleType(typeName)) : binding.l0Type; fw.writer.println(" {"); fw.writer.println(" Attribute a = element.getAttribute(\"" +attrName+"\");"); fw.writer.println(" if (a != null) {"); - fw.writer.println(" graph.claimLiteral(element.getData(),"+relationName+","+getValueGetterMethod(binding,"a")+", "+binding.binding+");"); + fw.writer.println(" graph.claimLiteral(element.getData(), " + relationName + ", " + ontologyType + ", " + getValueGetterMethod(binding,"a") + ", " + binding.binding + ");"); if (isReference) fw.writer.println(" idProviderValue = a.getValue();"); fw.writer.println(" }"); @@ -589,9 +613,11 @@ public class ImporterGenerator extends JavaGenerator{ fw.writer.println(" @Override"); fw.writer.println(" public void configure(WriteGraph graph, Deque parents, ParserElement element) throws DatabaseException {"); if (inheritance.type == InheritanceType.ComplexType) { - fw.writer.println(" super.configure(graph,parents,element);"); + fw.writer.println(" super.configure(graph,parents,element);"); } - fw.writer.println(" "+getOntologyImport()); + fw.writer.println(" Layer0 L0 = Layer0.getInstance(graph);"); + fw.writer.println(" XMLResource XML = XMLResource.getInstance(graph);"); + fw.writer.println(" "+getOntologyImport()); LocalComplexType complexType = element.getComplexType(); LocalSimpleType simpleType = element.getSimpleType();