]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax/src/org/simantics/xml/sax/OntologyGenerator.java
Handling ComplexTypes inheriting AtomicType
[simantics/interop.git] / org.simantics.xml.sax / src / org / simantics / xml / sax / OntologyGenerator.java
index e64a59bf3f296fb0fae84e84e3341502b406d522..741e197f0e2ff50bf9bb6b41c619fe94fd78471e 100644 (file)
@@ -11,6 +11,7 @@ import java.util.Set;
 import javax.xml.namespace.QName;\r
 \r
 import org.simantics.utils.datastructures.BijectionMap;\r
+import org.simantics.xml.sax.SchemaObject.ObjectType;\r
 import org.simantics.xml.sax.configuration.AttributeComposition;\r
 import org.simantics.xml.sax.configuration.Configuration;\r
 import org.simantics.xml.sax.configuration.IDReference;\r
@@ -140,11 +141,11 @@ public class OntologyGenerator extends SchemaConversionBase {
        }\r
        \r
        \r
-       public static String getComplexTypePrefix() {\r
+       public String getComplexTypePrefix() {\r
                return "ComplexTypes.";\r
        }\r
        \r
-       public static String getAttributeGroupPrefix() {\r
+       public String getAttributeGroupPrefix() {\r
                return "AttributeGroups.";\r
        }\r
        \r
@@ -163,7 +164,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                                        break;\r
                                }\r
                        }\r
-                       String relationName = ontRoot+getName(parent)+".has"+name;\r
+                       String relationName = getName(parent)+".has"+name;\r
                        writer.print(relationName);\r
                        \r
                        List<String> types = new ArrayList<String>();\r
@@ -181,7 +182,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                                }\r
                                if (type == null) {\r
                                        SchemaObject obj = getWithName(parent, refType.getLocalPart());\r
-                                       types.add(ontRoot+getName(obj,"has"));\r
+                                       types.add(getName(obj,"has"));\r
                                } \r
                        }\r
                        if (types.size() > 0) {\r
@@ -248,21 +249,21 @@ public class OntologyGenerator extends SchemaConversionBase {
                        if (type == null) {\r
                                obj = getWithName(parent, referenceType.getLocalPart());\r
                                \r
-                               writer.println(ontRoot+getName(parent)+".has"+refName + " <R " +  ontRoot+ getName(obj,"has"));\r
-                               writer.println("   --> " + ontRoot+getName(obj));\r
+                               writer.println(getName(parent)+".has"+refName + " <R " +  getName(obj,"has"));\r
+                               writer.println("   --> " + getName(obj));\r
                        } else {\r
-                               writer.println(ontRoot+getName(parent)+".has"+refName + " <R XML.hasElement");\r
+                               writer.println(getName(parent)+".has"+refName + " <R XML.hasElement");\r
                                writer.println("   --> " + getType(referenceType));\r
                        }\r
                        \r
                        if (useElementList(parent, indicator,element, refType == RefType.Reference, refName, referenceType)) {\r
                                \r
                                if (type == null) {\r
-                                       writer.println(ontRoot+getName(parent)+"."+refName + "List <T XML.ElementList");\r
-                                       writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " +  ontRoot+getName(obj,"has")+"List : L0.FunctionalRelation");\r
+                                       writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
+                                       writer.println(getName(parent)+".has"+refName + "List <R " +  getName(obj,"has")+"List : L0.FunctionalRelation");\r
                                } else {\r
-                                       writer.println(ontRoot+getName(parent)+"."+refName + "List <T XML.ElementList");\r
-                                       writer.println(ontRoot+getName(parent)+".has"+refName + "List <R XML.hasElementList : L0.FunctionalRelation");  \r
+                                       writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
+                                       writer.println(getName(parent)+".has"+refName + "List <R XML.hasElementList : L0.FunctionalRelation");  \r
                                }\r
                        }\r
                } else {\r
@@ -271,11 +272,11 @@ public class OntologyGenerator extends SchemaConversionBase {
                        if (refName == null)\r
                                refName = obj.getName();\r
                        \r
-                       writer.println(ontRoot+getName(parent)+".has"+refName + " <R " +  ontRoot+ getName(obj,"has"));\r
-                       writer.println("   --> " + ontRoot+getName(obj));\r
+                       writer.println(getName(parent)+".has"+refName + " <R " + getName(obj,"has"));\r
+                       writer.println("   --> " + getName(obj));\r
                        if (useElementList(parent, indicator,element, false, refName, new QName(obj.getName()))) {\r
-                               writer.println(ontRoot+getName(parent)+"."+refName + "List <T XML.ElementList");\r
-                               writer.println(ontRoot+getName(parent)+".has"+refName + "List <R " +  ontRoot+getName(obj,"has")+"List : L0.FunctionalRelation");\r
+                               writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
+                               writer.println(getName(parent)+".has"+refName + "List <R " +  getName(obj,"has")+"List : L0.FunctionalRelation");\r
                        }\r
                }\r
                \r
@@ -298,11 +299,11 @@ public class OntologyGenerator extends SchemaConversionBase {
                if (name != null) {\r
                        relationName = ontRoot+"has"+name;\r
                        if (parent != null)\r
-                               relationName = ontRoot+getName(parent)+".has"+name;\r
+                               relationName = getName(parent)+".has"+name;\r
                        relationType = "XML.hasAttribute";\r
                }\r
                else if (ref != null && parent != null) {\r
-                       relationName = ontRoot+getName(parent)+".has"+ref.getLocalPart();\r
+                       relationName = getName(parent)+".has"+ref.getLocalPart();\r
                        relationType = ontRoot+"has"+ref.getLocalPart();\r
                } else {\r
                        throw new RuntimeException();\r
@@ -370,7 +371,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                                }\r
                        }\r
                } else {\r
-                       writer.println(ontRoot+getName(parent) +" L0.Inherits " + ontRoot + getAttributeGroupPrefix() + attributeGroup.getRef().getLocalPart());\r
+                       writer.println(getName(parent) +" L0.Inherits " + ontRoot + getAttributeGroupPrefix() + attributeGroup.getRef().getLocalPart());\r
                }\r
                \r
        }\r
@@ -394,7 +395,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                        // TODO : process restriction in lists\r
                        String relationName = ontRoot+"has"+name;\r
                        if (parent != null)\r
-                               relationName = ontRoot+getName(parent)+".has"+name;\r
+                               relationName = getName(parent)+".has"+name;\r
                        writer.println(relationName+ " <R XML.hasAttribute : L0.FunctionalRelation");\r
                        \r
                        String ontType = getL0Type(new QName(SCHEMA_NS, "string"));\r
@@ -407,7 +408,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                        \r
                        String relationName = ontRoot+"has"+name;\r
                        if (parent != null)\r
-                               relationName = ontRoot+getName(parent)+".has"+name;\r
+                               relationName = getName(parent)+".has"+name;\r
                        \r
                        writer.println(relationName+ " <R XML.hasAttribute : L0.FunctionalRelation");\r
                        \r
@@ -422,25 +423,34 @@ public class OntologyGenerator extends SchemaConversionBase {
 //             if (topLevelComplexType.getName().equals("Reference"))\r
 //                     System.out.println();\r
                \r
-               String relationName = ontRoot+getName(topLevelComplexType,"has");//ontRoot+"has"+name;\r
+               String relationName = getName(topLevelComplexType,"has");//ontRoot+"has"+name;\r
                \r
                writer.println(relationName+ " <R XML.hasComplexType");\r
                writer.println(relationName+ "List <R XML.hasElementList");\r
                //writer.println("   --> " + ontRoot+getComplexTypePrefix()+name);\r
-               writer.println("   --> " + ontRoot+name);\r
+               writer.println("   --> " + name);\r
                writer.println();\r
-               String baseType = "XML.ComplexType";\r
-\r
-               QName base = getComplexTypeBase(topLevelComplexType.getComplexType());\r
-               if (base != null) {\r
-                       baseType = getType(base);\r
-               }\r
-               base = getSimpleTypeBase(topLevelComplexType.getSimpleType());\r
-               if (base != null) {\r
-                       baseType = getType(base);\r
+//             String baseType = "XML.ComplexType";\r
+//\r
+//             QName base = getComplexTypeBase(topLevelComplexType.getComplexType());\r
+//             if (base != null) {\r
+//                     baseType = getType(base);\r
+//             }\r
+//             base = getSimpleTypeBase(topLevelComplexType.getSimpleType());\r
+//             if (base != null) {\r
+//                     baseType = getType(base);\r
+//             }\r
+               Inheritance inheritance = getInheritance(topLevelComplexType);\r
+               \r
+//             writer.println(name+ " <T "+baseType);\r
+               \r
+               if(inheritance.type == InheritanceType.AtomicType) {\r
+                       writer.println(name+ " <T "+inheritance.baseClass + " <T "+inheritance.atomicType.l0Type);\r
+               } else {\r
+                       writer.println(name+ " <T "+inheritance.baseClass);\r
                }\r
-               //writer.println(ontRoot+getComplexTypePrefix()+name+ " <T "+baseType);\r
-               writer.println(ontRoot+name+ " <T "+baseType);\r
+//             if (!baseType.equals(inheritance.baseClass))\r
+//                     System.out.println();\r
                super.handleComplexType(topLevelComplexType);\r
                writer.println();\r
        }\r
@@ -481,7 +491,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                        type += " <T " + t;\r
                }\r
 \r
-               String relationName =  ontRoot+getName(elementObj,"has");//ontRoot+"has"+name;\r
+               String relationName =  getName(elementObj,"has");//ontRoot+"has"+name;\r
 //             if (elementObj.getParent() != null) {\r
 //                     //relationName = ontRoot+getComplexTypePrefix()+"has"+name.substring(getComplexTypePrefix().length());\r
 //                     relationName = ontRoot+getName(elementObj.getParent()) + "has"+element.getName();\r
@@ -489,7 +499,7 @@ public class OntologyGenerator extends SchemaConversionBase {
                writer.println(relationName+ " <R XML.hasElement");\r
                writer.println(relationName+ "List <R XML.hasElementList");\r
                \r
-               writer.println(ontRoot+name+ " <T "+type);\r
+               writer.println(name+ " <T "+type);\r
                \r
                LocalComplexType complexType = element.getComplexType();\r
                LocalSimpleType simpleType = element.getSimpleType();\r
@@ -506,23 +516,32 @@ public class OntologyGenerator extends SchemaConversionBase {
                List<IDReference> references = getIDReferences(element);\r
        \r
                for (IDReference ref : references) {\r
-                       writer.println(ontRoot+name+"."+ref.getReference().getName()+ " <R XML.hasReference");\r
+                       writer.println(name+"."+ref.getReference().getName()+ " <R XML.hasReference");\r
                }\r
                \r
                writer.println();\r
        }\r
        \r
-       public static String getName(SchemaObject obj) {\r
+       @Override\r
+       protected String getBaseClass(ObjectType type) {\r
+               if (type == ObjectType.ELEMENT)\r
+                       return "XML.Element";\r
+               if (type == ObjectType.COMPLEX_TYPE)\r
+                       return "XML.ComplexType";\r
+               throw new RuntimeException("ObjectType " + type + " has no base class");\r
+       }\r
+       \r
+       public String getName(SchemaObject obj) {\r
                if (obj.getParent() == null) {\r
                        switch (obj.getType()) {\r
                        case COMPLEX_TYPE:\r
-                               return getComplexTypePrefix()+obj.getName();\r
+                               return ontRoot+getComplexTypePrefix()+obj.getName();\r
                        case ELEMENT:\r
-                               return obj.getName();\r
+                               return ontRoot+obj.getName();\r
                        case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+obj.getName();\r
+                               return ontRoot+getAttributeGroupPrefix()+obj.getName();\r
                        case SIMPLE_TYPE:\r
-                               return obj.getName();\r
+                               return ontRoot+obj.getName();\r
                        }\r
                } else {\r
                        SchemaObject o = obj;\r
@@ -537,30 +556,30 @@ public class OntologyGenerator extends SchemaConversionBase {
                        name = name.substring(0, name.length()-1);\r
                        switch (prev.getType()) {\r
                        case COMPLEX_TYPE:\r
-                               return getComplexTypePrefix()+name;\r
+                               return ontRoot+getComplexTypePrefix()+name;\r
                        case ELEMENT:\r
-                               return name;\r
+                               return ontRoot+name;\r
                        case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+name;\r
+                               return ontRoot+getAttributeGroupPrefix()+name;\r
                        case SIMPLE_TYPE:\r
-                               return name;\r
+                               return ontRoot+name;\r
                        }\r
                }\r
                throw new RuntimeException();\r
                \r
        }\r
        \r
-       public static String getName(SchemaObject obj, String rel) {\r
+       public String getName(SchemaObject obj, String rel) {\r
                if (obj.getParent() == null) {\r
                        switch (obj.getType()) {\r
                        case COMPLEX_TYPE:\r
-                               return getComplexTypePrefix()+rel+obj.getName();\r
+                               return ontRoot+getComplexTypePrefix()+rel+obj.getName();\r
                        case ELEMENT:\r
-                               return rel+obj.getName();\r
+                               return ontRoot+rel+obj.getName();\r
                        case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+rel+obj.getName();\r
+                               return ontRoot+getAttributeGroupPrefix()+rel+obj.getName();\r
                        case SIMPLE_TYPE:\r
-                               return rel+obj.getName();\r
+                               return ontRoot+rel+obj.getName();\r
                        }\r
                } else {\r
                        SchemaObject o = obj;\r
@@ -575,13 +594,13 @@ public class OntologyGenerator extends SchemaConversionBase {
                        name = name.substring(0, name.length()-1);\r
                        switch (prev.getType()) {\r
                        case COMPLEX_TYPE:\r
-                               return getComplexTypePrefix()+rel+name;\r
+                               return ontRoot+getComplexTypePrefix()+rel+name;\r
                        case ELEMENT:\r
-                               return rel+name;\r
+                               return ontRoot+rel+name;\r
                        case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+rel+name;\r
+                               return ontRoot+getAttributeGroupPrefix()+rel+name;\r
                        case SIMPLE_TYPE:\r
-                               return rel+name;\r
+                               return ontRoot+rel+name;\r
                        }\r
                }\r
                throw new RuntimeException();\r