]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java
Several updates to interoperability.
[simantics/interop.git] / org.simantics.xml.sax / src / org / simantics / xml / sax / JavaGenerator.java
index 72b2956a7016073ee910d04d700bccf5a19892f1..4869e0711e073297f01c390aac96849dcf9d6be3 100644 (file)
@@ -10,6 +10,7 @@ import java.util.Map;
 \r
 import javax.xml.namespace.QName;\r
 \r
+import org.simantics.xml.sax.SchemaConversionBase.Inheritance;\r
 import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
 import org.simantics.xml.sax.SchemaConversionBase.TypeEntry;\r
 import org.w3._2001.xmlschema.AttributeGroupRef;\r
@@ -80,6 +81,11 @@ public abstract class JavaGenerator implements SchemaConversionComponent {
                return binding.getValueGetter();\r
        }\r
        \r
+       @Override\r
+       public String getSimpleTypePrefix() {\r
+               return "SimpleTypes_";\r
+       }       \r
+       \r
        @Override\r
        public String getComplexTypePrefix() {\r
                return "ComplexTypes_";\r
@@ -91,22 +97,24 @@ public abstract class JavaGenerator implements SchemaConversionComponent {
        }\r
        \r
        @Override\r
-       public void handleChoice(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements, String name) {\r
-\r
-               for (SchemaElement e : elements) {\r
-                       Element localElement = e.getElement();\r
-                       if (localElement.getName() != null) {\r
-                               QName refType = localElement.getType();\r
-                               if (refType != null)\r
-                                       //handleIndicator(parent, indicator, e, false, name, refType);\r
-                                       handleIndicator(parent, indicator, e, name, RefType.Type);\r
-                       } else if (localElement.getRef() != null) {\r
-                               //QName refType = localElement.getRef();\r
-                               //handleIndicator(parent, indicator, e, true, name, refType);\r
-                               handleIndicator(parent, indicator, e, name, RefType.Reference);\r
-                       }\r
-               }\r
+       public String handleChoice(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements, String name) {\r
+               String baseRelationName = getName(parent) + ".has" + name;\r
+               \r
+//             for (SchemaElement e : elements) {\r
+//                     Element localElement = e.getElement();\r
+//                     if (localElement.getName() != null) {\r
+//                             QName refType = localElement.getType();\r
+//                             if (refType != null)\r
+//                                     //handleIndicator(parent, indicator, e, false, name, refType);\r
+//                                     handleIndicator(parent, indicator, e, name, RefType.Type, baseRelationName);\r
+//                     } else if (localElement.getRef() != null) {\r
+//                             //QName refType = localElement.getRef();\r
+//                             //handleIndicator(parent, indicator, e, true, name, refType);\r
+//                             handleIndicator(parent, indicator, e, name, RefType.Reference, baseRelationName);\r
+//                     }\r
+//             }\r
                \r
+               return baseRelationName;\r
        }\r
        \r
        protected String getOntologyImport() {\r
@@ -142,7 +150,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent {
                        case ATTRIBUTE_GROUP:\r
                                return getAttributeGroupPrefix()+obj.getName();\r
                        case SIMPLE_TYPE:\r
-                               return obj.getName();\r
+                               return getSimpleTypePrefix()+obj.getName();\r
                        }\r
                } else {\r
                        SchemaObject o = obj;\r
@@ -165,7 +173,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent {
                        case ATTRIBUTE_GROUP:\r
                                return getAttributeGroupPrefix()+name;\r
                        case SIMPLE_TYPE:\r
-                               return name;\r
+                               return getSimpleTypePrefix()+name;\r
                        }\r
                }\r
                throw new RuntimeException();\r
@@ -182,7 +190,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent {
                        case ATTRIBUTE_GROUP:\r
                                return getAttributeGroupPrefix()+rel+obj.getName();\r
                        case SIMPLE_TYPE:\r
-                               return rel+obj.getName();\r
+                               return getSimpleTypePrefix()+rel+obj.getName();\r
                        }\r
                } else {\r
                        SchemaObject o = obj;\r
@@ -203,7 +211,7 @@ public abstract class JavaGenerator implements SchemaConversionComponent {
                        case ATTRIBUTE_GROUP:\r
                                return getAttributeGroupPrefix()+rel+name;\r
                        case SIMPLE_TYPE:\r
-                               return rel+name;\r
+                               return getSimpleTypePrefix()+rel+name;\r
                        }\r
                }\r
                throw new RuntimeException();\r
@@ -236,49 +244,60 @@ public abstract class JavaGenerator implements SchemaConversionComponent {
        \r
        \r
        protected abstract void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList);\r
-       protected abstract void createPrimitiveIndicator(SchemaObject parent, String refName, String binding);\r
+       protected abstract void createPrimitiveIndicator(SchemaObject parent, String refName, TypeEntry typeEntry, QName typeName);\r
        protected abstract void createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList);\r
        \r
        @Override\r
-       public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType) {\r
+       public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType, String baseRelationName) {\r
                String objectName;\r
                if (referenceType != RefType.Element) {\r
-                       QName refType;\r
+                       QName refTypeName;\r
+                       SchemaObject refObject = null;\r
                        if (referenceType == RefType.Type) {\r
-                               refType = element.getElement().getType();\r
+                               refTypeName = element.getElement().getType();\r
                                if (refName == null)\r
                                        refName = element.getElement().getName();\r
                                objectName = element.getElement().getName();\r
+                               refObject = this.base.getComplexType(refTypeName);\r
+                               if (refObject == null) this.base.getSimpleType(refTypeName);\r
                        } else {\r
-                               refType = element.getElement().getRef();\r
+                               refTypeName = element.getElement().getRef();\r
                                if (refName == null)\r
-                                       refName = refType.getLocalPart();\r
-                               objectName = refType.getLocalPart();\r
+                                       refName = refTypeName.getLocalPart();\r
+                               objectName = refTypeName.getLocalPart();\r
+                               refObject = this.base.getElement(refTypeName);\r
                        }\r
                        \r
-                       String binding = this.base.getBindingFromPrimitiveType(refType);\r
-                       if (binding == null) {\r
-                               SchemaObject refElement = this.base.getElement(refType);\r
-                               SchemaObject refComplexType = this.base.getComplexType(refType);\r
-       \r
+                       TypeEntry typeEntry = this.base.getTypeEntry(refTypeName);\r
+                       if (typeEntry == null) {\r
                                // prefer element reference over complex type reference\r
                                String primaryClassName = null;\r
                                String secondaryClassName = null;\r
-                               if (refElement != null)\r
-                                       primaryClassName = getName(refElement);\r
-                               else\r
-                                       primaryClassName = getName(refComplexType);\r
+                               if (refObject != null)\r
+                                       primaryClassName = getName(refObject);\r
+                               else if (this.base.getSimpleType(refTypeName) != null) {\r
+                                       Inheritance inheritance = new Inheritance("");\r
+                                       this.base.getAtomicTypeInheritance(refTypeName, inheritance);\r
+                                       if (inheritance.atomicType != null) {\r
+                                               createPrimitiveIndicator(parent, refName, inheritance.atomicType, refTypeName);\r
+                                               return;\r
+                                       }\r
+                                       else {\r
+                                               throw new RuntimeException("No supported atomic type found for simple type " + refTypeName.toString());\r
+                                       }\r
+                               }\r
+                               else {\r
+                                       throw new RuntimeException("Type that is neither complex nor simple??");\r
+                               }\r
                                \r
-                               if (refComplexType != null) {\r
-                                       secondaryClassName = getName(refComplexType);\r
-                               } else {\r
-                                       secondaryClassName = getName(refElement);\r
+                               if (refObject != null) {\r
+                                       secondaryClassName = getName(refObject);\r
                                }\r
-                               boolean useElementList = this.base.useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refType);\r
-                               boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refType);\r
+                               boolean useElementList = this.base.useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName);\r
+                               boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName);\r
                                createReferenceIndicator(parent, referenceType, refName, objectName, primaryClassName, secondaryClassName, useElementList, useOriginalList);\r
                        } else {\r
-                               createPrimitiveIndicator(parent, refName, binding);\r
+                               createPrimitiveIndicator(parent, refName, typeEntry, refTypeName);\r
                        }\r
                } else {\r
                        Element attrs= element.getElement();\r