]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java
Refactoring and preparing the conversion code to handle references between XML schemas.
[simantics/interop.git] / org.simantics.xml.sax / src / org / simantics / xml / sax / JavaGenerator.java
index dfcdfd3d7b78e1afbe903dc7e06cb1b969058db8..126dcf45691cb3110cf5d66c3ae422479082a126 100644 (file)
@@ -10,30 +10,44 @@ import java.util.Map;
 \r
 import javax.xml.namespace.QName;\r
 \r
-import org.simantics.xml.sax.configuration.Configuration;\r
+import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
+import org.simantics.xml.sax.SchemaConversionBase.TypeEntry;\r
 import org.w3._2001.xmlschema.AttributeGroupRef;\r
 import org.w3._2001.xmlschema.Element;\r
 import org.w3._2001.xmlschema.Schema;\r
 \r
-public abstract class JavaGenerator extends SchemaConversionBase{\r
+//public abstract class JavaGenerator extends SchemaConversionBase{\r
+public abstract class JavaGenerator implements SchemaConversionComponent {\r
 \r
        String commentTag = "//";\r
        \r
        Schema schema;\r
        String ontologyClassName;\r
+       String ontologyUri;\r
        SchemaConverter converter;\r
+       SchemaConversionBase base;\r
        \r
        List<String> ruleClassNames = new ArrayList<String>();\r
        \r
        String ontShort = "ONT"; \r
+       String name;\r
        \r
        File importParserDir;\r
        String elementPackageName;\r
        \r
        Map<SchemaObject, FileWriter> writers = new HashMap<SchemaObject, ImporterGenerator.FileWriter>();\r
        \r
-       public JavaGenerator(Configuration configuration) {\r
-               super(configuration);\r
+       public JavaGenerator(SchemaConverter converter, SchemaConversionBase base) {\r
+               this.converter = converter;\r
+               this.base = base;\r
+               \r
+               this.schema = base.schema;\r
+               this.ontologyClassName = base.className;\r
+               this.ontologyUri = base.ontologyURI;\r
+               this.converter = converter;\r
+               this.name = converter.name;\r
+               ontShort = converter.shortName;\r
+               ontShort +=".";\r
        }\r
        \r
        \r
@@ -59,41 +73,37 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                        return name;\r
                return binding.getValueGetter(name);\r
        }\r
+       \r
        protected String getValueGetter(TypeEntry binding) {\r
                if (binding == null)\r
                        return "value";\r
                return binding.getValueGetter();\r
        }\r
        \r
+       @Override\r
        public String getComplexTypePrefix() {\r
                return "ComplexTypes_";\r
        }       \r
        \r
+       @Override\r
        public String getAttributeGroupPrefix() {\r
                return "AttributeGroups_";\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
-                       for (SchemaElement e : elements) {\r
-                               handle(parent, indicator, e);\r
-                       }\r
-               } else if (indicator.getType() == SchemaElement.ElementType.CHOICE) {\r
-                       String name = getChoiceName(elements);\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
+               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
                \r
@@ -121,7 +131,7 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                return null;\r
        }\r
        \r
-       \r
+       @Override\r
        public String getName(SchemaObject obj) {\r
                if (obj.getParent() == null) {\r
                        switch (obj.getType()) {\r
@@ -224,12 +234,13 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                writer.println();\r
        }\r
        \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 createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList);\r
        \r
        @Override\r
-       protected 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) {\r
                String objectName;\r
                if (referenceType != RefType.Element) {\r
                        QName refType;\r
@@ -245,10 +256,10 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                                objectName = refType.getLocalPart();\r
                        }\r
                        \r
-                       String binding = getBindingFromPrimitiveType(refType);\r
+                       String binding = this.base.getBindingFromPrimitiveType(refType);\r
                        if (binding == null) {\r
-                               SchemaObject refElement = elementName.get(refType.getLocalPart());\r
-                               SchemaObject refComplexType = complexTypeName.get(refType.getLocalPart());\r
+                               SchemaObject refElement = this.base.elementName.get(refType.getLocalPart());\r
+                               SchemaObject refComplexType = this.base.complexTypeName.get(refType.getLocalPart());\r
        \r
                                // prefer element reference over complex type reference\r
                                String primaryClassName = null;\r
@@ -263,22 +274,22 @@ public abstract class JavaGenerator extends SchemaConversionBase{
                                } else {\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
+                               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
                                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
+                       SchemaObject obj = this.base.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
+                       boolean useElementList = this.base.useElementList(parent, indicator,element, false, refName, new QName(obj.getName()));\r
+                       boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, false, refName, new QName(obj.getName()));\r
                        createElementIndicator(parent, useElementList, refName, className, useOriginalList);\r
                }\r
        }\r