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=9270c8f38db9f7d961e420692ca4379b0b831972;hb=refs%2Fchanges%2F77%2F2277%2F2;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..9270c8f 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 @@ -39,10 +39,9 @@ public class ImporterGenerator extends JavaGenerator{ public void createParser() throws IOException { - String parserPackagePostfix = "_elem"; String importerClassPostfix = "Importer"; String parserClassPostfix = "Parser"; - elementPackageName = name+parserPackagePostfix; + importParserDir= new File(converter.getParserDir().getAbsolutePath()+"/"+elementPackageName); if (!importParserDir.exists()) @@ -61,7 +60,7 @@ public class ImporterGenerator extends JavaGenerator{ mainWriter.println("public class " + name + importerClassPostfix+" extends AbstractImporter {"); mainWriter.println(); mainWriter.println(" public " + name + importerClassPostfix+"(Session session, File file) {"); - mainWriter.println(" super(session, file, new "+name + parserClassPostfix+"());"); + mainWriter.println(" super(session, file, new "+name + parserClassPostfix+"().resolveDependencies());"); mainWriter.println(" }"); mainWriter.println(); mainWriter.println("}"); @@ -85,7 +84,29 @@ public class ImporterGenerator extends JavaGenerator{ for (String s : ruleClassNames) { mainWriter.println(" add(new "+s+"());"); } + mainWriter.println(); + mainWriter.println(" }"); + mainWriter.println(); + if (converter.getSubConverters().size() > 0) { + mainWriter.println(" public void addDependencies(java.util.Map map) {"); + for (SchemaConverter sc : converter.getSubConverters()) { + String s = sc.className; + if (s.endsWith("Ontology")) + s = s.substring(0,s.length()-"Ontology".length()); + s +="Parser"; + mainWriter.println(" {"); + mainWriter.println(" XMLParser parser = new "+s+"();"); + mainWriter.println(" if (!map.containsKey(parser.getSchemaURI())) {"); + mainWriter.println(" map.put(parser.getSchemaURI(), parser);"); + mainWriter.println(" parser.addDependencies(map);"); + mainWriter.println(" } else {"); + mainWriter.println(" parser = map.get(parser.getSchemaURI());"); + mainWriter.println(" }"); + mainWriter.println(" add(parser);"); + mainWriter.println(" }"); + } mainWriter.println(" }"); + } mainWriter.println("}"); mainWriter.println(); @@ -93,6 +114,11 @@ public class ImporterGenerator extends JavaGenerator{ mainWriter.close(); } + @Override + protected String getPackagePostFix() { + return "_elem"; + } + @Override public void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) { } @@ -199,10 +225,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); @@ -230,6 +257,8 @@ public class ImporterGenerator extends JavaGenerator{ @Override public void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList) { +// if (refName == null) +// System.out.println(); FileWriter fw = getWriter(parent); if (referenceType == RefType.Type) { // create internal class for handling the element and child attachment @@ -251,26 +280,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,19 +310,37 @@ 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(" }"); } @Override protected void createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList) { +// if (refName == null) +// System.out.println(); FileWriter fw = getWriter(parent); //if (!reference) fw.writer.println(" addParser(\""+ refName +"\", "+className+".class);"); @@ -304,26 +353,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(" }"); } @@ -349,22 +400,18 @@ public class ImporterGenerator extends JavaGenerator{ public void handle(SchemaObject parent, Attribute attribute) { if (parent == null) return; - String name = attribute.getName(); + String attrName = attribute.getName(); QName primitiveType = attribute.getType(); SimpleType simpleType = attribute.getSimpleType(); QName ref = attribute.getRef(); String relationName; - String attrName; - if (name != null) { - attrName = name; - relationName = ontShort+"has"+name; - if (parent != null) - relationName = ontShort+getName(parent)+"_has"+name; + if (attrName != null) { + relationName = ontShort+getName(parent)+"_has"+base.getName(attribute); } else if (ref != null && parent != null) { attrName = ref.getLocalPart(); - relationName = ontShort+getName(parent)+"_has"+ref.getLocalPart(); + relationName = ontShort+getName(parent)+"_has"+base.getName(ref); Attribute referred = this.base.getRefAttribute(ref); if (referred != null) { @@ -386,7 +433,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 +446,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 +459,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(" }"); @@ -461,7 +511,7 @@ public class ImporterGenerator extends JavaGenerator{ FileWriter fw = getWriter(parent); NamedAttributeGroup group = this.base.getAttributeGroup(attribute.getRef()); fw.writer.println(commentTag+" AttributeGroup " + group.getName()); - SchemaObject obj = new SchemaObject(parent,attribute); + SchemaObject obj = new SchemaObject(base,parent,attribute); for (Annotated annotated : group.getAttributeOrAttributeGroup()) { if (annotated instanceof Attribute) { //handle("AttributeGroups_"+group.getName(),(Attribute)annotated); @@ -472,8 +522,6 @@ public class ImporterGenerator extends JavaGenerator{ } } //dd - if(true) - System.out.println(); fw.writer.println(commentTag+" End of AttributeGroup " + group.getName()); } @@ -526,12 +574,7 @@ public class ImporterGenerator extends JavaGenerator{ } - - - - - - + IDProvider provider; @Override public void handleElement(SchemaObject elementObj) { @@ -589,9 +632,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();