]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java
Export XML Namespaces
[simantics/interop.git] / org.simantics.xml.sax / src / org / simantics / xml / sax / JavaGenerator.java
index 646773472100b2467267be71a2d2ea3ae47d540a..dfcdfd3d7b78e1afbe903dc7e06cb1b969058db8 100644 (file)
@@ -65,33 +65,14 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                return binding.getValueGetter();\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
-       @Override\r
-       protected void handle(SchemaObject parent, SchemaElement indicator, SchemaElement element) {\r
-               Element localElement = element.getElement();\r
-               if (localElement.getName() != null) {\r
-                       SchemaObject eObj = elements.get(localElement);\r
-                       String refName = localElement.getName();\r
-                       QName refType = localElement.getType();\r
-                       if (refType != null)\r
-                               handleIndicator(parent, indicator, element, false, refName, refType);\r
-                       else {\r
-                               handleElement(eObj);\r
-                               handleIndicator(parent, indicator, element, false, refName, localElement);\r
-                       }\r
-               } else if (localElement.getRef() != null) {\r
-                       QName refType = localElement.getRef();\r
-                       handleIndicator(parent, indicator,element, true, refType.getLocalPart(), refType);\r
-               }\r
-       }\r
-       \r
+               \r
        @Override\r
        protected void handle(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements) {\r
                if (indicator.getType() == SchemaElement.ElementType.SEQUENCE || (indicator.getType() == SchemaElement.ElementType.CHOICE && indicator.getRestriction().many())) {\r
@@ -106,10 +87,12 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                                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, 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
+                                       //QName refType = localElement.getRef();\r
+                                       //handleIndicator(parent, indicator, e, true, name, refType);\r
+                                       handleIndicator(parent, indicator, e, name, RefType.Reference);\r
                                }\r
                        }\r
                }\r
@@ -139,7 +122,7 @@ public abstract class JavaGenerator extends SchemaConversionBase{
        }\r
        \r
        \r
-       public static String getName(SchemaObject obj) {\r
+       public String getName(SchemaObject obj) {\r
                if (obj.getParent() == null) {\r
                        switch (obj.getType()) {\r
                        case COMPLEX_TYPE:\r
@@ -179,7 +162,7 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                \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
@@ -216,20 +199,9 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                throw new RuntimeException();\r
        }\r
        \r
-       protected enum InheritanceType{ComplexType,AtomicType,None};\r
        \r
-       protected class Inheritance {\r
-               public String baseClass;\r
-               public InheritanceType type;\r
-               public TypeEntry atomicType;\r
-               \r
-               public Inheritance(String baseClass) {\r
-                       this.baseClass = baseClass;\r
-                       this.type = InheritanceType.None;\r
-               }\r
-       }\r
        \r
-       protected void writeClass(PrintWriter writer,boolean abst, String name, String className, String baseClass, List<String> interfaces) {\r
+       protected void writeClass(PrintWriter writer,boolean abst, String elementId, String className, String baseClass, List<String> interfaces) {\r
                writer.println("@SuppressWarnings(\"unused\")");\r
                writer.print("public " +(abst ? "abstract " : "") + "class " + className + " extends "+baseClass);\r
                if (interfaces.size() > 0) {\r
@@ -244,71 +216,71 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                writer.println();\r
                writer.println("   @Override");\r
                writer.println("   public java.lang.String getElementId() {");\r
-               if (name != null)\r
-               writer.println("      return \""+name+"\";");\r
+               if (elementId != null)\r
+               writer.println("      return \""+elementId+"\";");\r
                else // complex types cannot be parsed directly with name/id reference.\r
                writer.println("      return null;");\r
                writer.println("   }");\r
                writer.println();\r
        }\r
        \r
-       protected abstract String getBaseClass();\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 createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList);\r
        \r
-       protected Inheritance getElementInheritance(SchemaObject topLevelElementObj) {\r
-               Element topLevelElement = topLevelElementObj.getElement();\r
-               Inheritance inheritance = new Inheritance(getBaseClass());\r
-               if (topLevelElement.getType() != null) {\r
-                       QName type = topLevelElement.getType();\r
-                       if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
-                               SchemaObject obj = complexTypeName.get(type.getLocalPart());\r
-//                             if (obj == null)\r
-//                                     obj = simpleTypeName.get(type.getLocalPart());\r
-                               if (obj != null) {\r
-                                       inheritance.baseClass = getName(obj);\r
-                                       inheritance.type = InheritanceType.ComplexType;\r
-                               }\r
+       @Override\r
+       protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType) {\r
+               String objectName;\r
+               if (referenceType != RefType.Element) {\r
+                       QName refType;\r
+                       if (referenceType == RefType.Type) {\r
+                               refType = element.getElement().getType();\r
+                               if (refName == null)\r
+                                       refName = element.getElement().getName();\r
+                               objectName = element.getElement().getName();\r
                        } else {\r
-                               TypeEntry entry = getTypeEntry(type);\r
-                               if (entry != null) {\r
-                                       inheritance.type = InheritanceType.AtomicType;\r
-                                       inheritance.atomicType = entry;\r
-                               }\r
-                       }\r
-               }\r
-               if (inheritance.type == InheritanceType.None) {\r
-                       QName type = getElementBase(topLevelElement);\r
-                       if (type != null) {\r
-                               if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
-                                       SchemaObject obj = getWithName(topLevelElementObj, type.getLocalPart());\r
-                                       inheritance.baseClass = getName(obj);\r
-                                       inheritance.type = InheritanceType.ComplexType;\r
-                               } else {\r
-                                       TypeEntry entry = getTypeEntry(type);\r
-                                       if (entry != null) {\r
-                                               inheritance.type = InheritanceType.AtomicType;\r
-                                               inheritance.atomicType = entry;\r
-                                       }\r
-                               }\r
+                               refType = element.getElement().getRef();\r
+                               if (refName == null)\r
+                                       refName = refType.getLocalPart();\r
+                               objectName = refType.getLocalPart();\r
                        }\r
-               }\r
-               if (inheritance.type == InheritanceType.None) {\r
-                       QName type = topLevelElement.getSubstitutionGroup();\r
-                       if (type != null) {\r
-                               if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
-                                       SchemaObject obj = getWithName(topLevelElementObj, type.getLocalPart());\r
-                                       inheritance.baseClass = getName(obj);\r
-                                       inheritance.type = InheritanceType.ComplexType;\r
+                       \r
+                       String binding = getBindingFromPrimitiveType(refType);\r
+                       if (binding == null) {\r
+                               SchemaObject refElement = elementName.get(refType.getLocalPart());\r
+                               SchemaObject refComplexType = complexTypeName.get(refType.getLocalPart());\r
+       \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
+                               \r
+                               if (refComplexType != null) {\r
+                                       secondaryClassName = getName(refComplexType);\r
                                } else {\r
-                                       TypeEntry entry = getTypeEntry(type);\r
-                                       if (entry != null) {\r
-                                               inheritance.type = InheritanceType.AtomicType;\r
-                                               inheritance.atomicType = entry;\r
-                                       }\r
+                                       secondaryClassName = getName(refElement);\r
                                }\r
+                               boolean useElementList = useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refType);\r
+                               boolean useOriginalList = useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refType);\r
+                               createReferenceIndicator(parent, referenceType, refName, objectName, primaryClassName, secondaryClassName, useElementList, useOriginalList);\r
+                       } else {\r
+                               createPrimitiveIndicator(parent, refName, binding);\r
                        }\r
+               } else {\r
+                       Element attrs= element.getElement();\r
+                       SchemaObject obj = getWithObj(parent, attrs);\r
+                       \r
+                       String className = getName(obj);\r
+                       if (refName == null)\r
+                               refName = attrs.getName();\r
+                       \r
+                       boolean useElementList = useElementList(parent, indicator,element, false, refName, new QName(obj.getName()));\r
+                       boolean useOriginalList = useOriginalList(parent, indicator,element, false, refName, new QName(obj.getName()));\r
+                       createElementIndicator(parent, useElementList, refName, className, useOriginalList);\r
                }\r
-               \r
-               return inheritance;\r
-       }       \r
+       }\r
 \r
 }\r