]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java
Several updates to interoperability.
[simantics/interop.git] / org.simantics.xml.sax / src / org / simantics / xml / sax / ImporterGenerator.java
index f1076b80bda639560696b04eff3a3db08c896466..ba1eff9cc261e62331fb1b865c25783785aec6c2 100644 (file)
@@ -199,10 +199,10 @@ public class ImporterGenerator extends JavaGenerator{
                fw.writer.println("   @Override");
                fw.writer.println("   public void configure(WriteGraph graph, Deque<ParserElement> 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);");
                this.base.handleComplexTypeAttributes(complexTypeObj);
                this.base.handleExtensionAttributes(complexTypeObj);
                
@@ -279,14 +279,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, 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("   }");
        }
        
@@ -386,7 +402,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 +415,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 +428,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 +608,11 @@ public class ImporterGenerator extends JavaGenerator{
                fw.writer.println("   @Override");
                fw.writer.println("   public void configure(WriteGraph graph, Deque<ParserElement> 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();