]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax/src/org/simantics/xml/sax/JavaGenerator.java
XML data based schema and ontology generation
[simantics/interop.git] / org.simantics.xml.sax / src / org / simantics / xml / sax / JavaGenerator.java
index 4869e0711e073297f01c390aac96849dcf9d6be3..af97d82162959571c84e6edb7a5e0409095bf0c9 100644 (file)
-package org.simantics.xml.sax;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.PrintWriter;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\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
-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 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(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
-       protected PrintWriter createFile(File file) throws IOException {\r
-               if (!file.exists())\r
-                       file.createNewFile();\r
-               PrintWriter writer = new PrintWriter(file);\r
-               for (String s : converter.getHeader()) {\r
-                       writer.println(commentTag + " " + s);   \r
-               }\r
-               writer.println();\r
-               return writer;\r
-       }\r
-       \r
-       protected String getValueGetterMethod(TypeEntry binding,String name) {\r
-               if (binding == null)\r
-                       return name+".getValue()";\r
-               return binding.getValueGetterMethod(name);\r
-       }\r
-       \r
-       protected String getValueGetter(TypeEntry binding,String name) {\r
-               if (binding == null)\r
-                       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 getSimpleTypePrefix() {\r
-               return "SimpleTypes_";\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
-       @Override\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
-               return this.ontologyClassName+" " +ontShort.substring(0, 3)+" = "+this.ontologyClassName+".getInstance(graph);";\r
-       }\r
-       \r
-       protected static class FileWriter {\r
-               public PrintWriter writer;\r
-               \r
-               public PrintWriter delayedWriter;\r
-               public PrintWriter delayedWriter2;\r
-       }\r
-       \r
-       protected  FileWriter getWriter(SchemaObject obj) {\r
-               SchemaObject s = obj;\r
-               while (s != null) {\r
-                       FileWriter fw = writers.get(s);\r
-                       if (fw != null)\r
-                               return fw;\r
-                       s = s.getParent();\r
-               }\r
-               return null;\r
-       }\r
-       \r
-       @Override\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
-                       case ELEMENT:\r
-                               return obj.getName();\r
-                       case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+obj.getName();\r
-                       case SIMPLE_TYPE:\r
-                               return getSimpleTypePrefix()+obj.getName();\r
-                       }\r
-               } else {\r
-                       SchemaObject o = obj;\r
-                       SchemaObject prev = null;\r
-                       String name = "";\r
-                       while (o != null){\r
-                               if (o.getName() != null)\r
-                                       name = o.getName()+"_"+name;\r
-                               prev = o;\r
-                               o = o.getParent();\r
-                               if (prev.getObj() instanceof AttributeGroupRef)\r
-                                       o = null;\r
-                       }\r
-                       name = name.substring(0, name.length()-1);\r
-                       switch (prev.getType()) {\r
-                       case COMPLEX_TYPE:\r
-                               return getComplexTypePrefix()+name;\r
-                       case ELEMENT:\r
-                               return name;\r
-                       case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+name;\r
-                       case SIMPLE_TYPE:\r
-                               return getSimpleTypePrefix()+name;\r
-                       }\r
-               }\r
-               throw new RuntimeException();\r
-               \r
-       }\r
-       \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
-                       case ELEMENT:\r
-                               return rel+obj.getName();\r
-                       case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+rel+obj.getName();\r
-                       case SIMPLE_TYPE:\r
-                               return getSimpleTypePrefix()+rel+obj.getName();\r
-                       }\r
-               } else {\r
-                       SchemaObject o = obj;\r
-                       SchemaObject prev = null;\r
-                       String name = "";\r
-                       while (o != null){\r
-                               if (o.getName() != null)\r
-                                       name = o.getName()+"_"+name;\r
-                               prev = o;\r
-                               o = o.getParent();\r
-                       }\r
-                       name = name.substring(0, name.length()-1);\r
-                       switch (prev.getType()) {\r
-                       case COMPLEX_TYPE:\r
-                               return getComplexTypePrefix()+rel+name;\r
-                       case ELEMENT:\r
-                               return rel+name;\r
-                       case ATTRIBUTE_GROUP:\r
-                               return getAttributeGroupPrefix()+rel+name;\r
-                       case SIMPLE_TYPE:\r
-                               return getSimpleTypePrefix()+rel+name;\r
-                       }\r
-               }\r
-               throw new RuntimeException();\r
-       }\r
-       \r
-       \r
-       \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
-                       writer.print(" implements ");\r
-                       for (int i = 0; i < interfaces.size(); i++) {\r
-                               writer.print(interfaces.get(i));\r
-                               if (i < interfaces.size() -1 )\r
-                                       writer.print(",");\r
-                       }\r
-               }\r
-               writer.println("{");\r
-               writer.println();\r
-               writer.println("   @Override");\r
-               writer.println("   public java.lang.String getElementId() {");\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
-       \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, 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, String baseRelationName) {\r
-               String objectName;\r
-               if (referenceType != RefType.Element) {\r
-                       QName refTypeName;\r
-                       SchemaObject refObject = null;\r
-                       if (referenceType == RefType.Type) {\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
-                               refTypeName = element.getElement().getRef();\r
-                               if (refName == null)\r
-                                       refName = refTypeName.getLocalPart();\r
-                               objectName = refTypeName.getLocalPart();\r
-                               refObject = this.base.getElement(refTypeName);\r
-                       }\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 (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 (refObject != null) {\r
-                                       secondaryClassName = getName(refObject);\r
-                               }\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, typeEntry, refTypeName);\r
-                       }\r
-               } else {\r
-                       Element attrs= element.getElement();\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 = 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
-\r
-}\r
+package org.simantics.xml.sax;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.simantics.xml.sax.SchemaConversionBase.Inheritance;
+import org.simantics.xml.sax.SchemaConversionBase.RefType;
+import org.simantics.xml.sax.SchemaConversionBase.TypeEntry;
+import org.w3._2001.xmlschema.AttributeGroupRef;
+import org.w3._2001.xmlschema.Element;
+import org.w3._2001.xmlschema.Schema;
+
+//public abstract class JavaGenerator extends SchemaConversionBase{
+public abstract class JavaGenerator implements SchemaConversionComponent {
+
+       String commentTag = "//";
+       
+       Schema schema;
+       String ontologyClassName;
+       String ontologyUri;
+       SchemaConverter converter;
+       SchemaConversionBase base;
+       
+       List<String> ruleClassNames = new ArrayList<String>();
+       
+       String ontShort = "ONT"; 
+       String name;
+       
+       File importParserDir;
+       String elementPackageName;
+       
+       Map<SchemaObject, FileWriter> writers = new HashMap<SchemaObject, ImporterGenerator.FileWriter>();
+       
+       public JavaGenerator(SchemaConverter converter, SchemaConversionBase base) {
+               this.converter = converter;
+               this.base = base;
+               
+               this.schema = base.schema;
+               this.ontologyClassName = base.className;
+               this.ontologyUri = base.ontologyURI;
+               this.converter = converter;
+               this.name = converter.name;
+               ontShort = converter.shortName;
+               ontShort +=".";
+               elementPackageName = name+getPackagePostFix();
+       }
+       
+       public String getElementPackageName() {
+               return elementPackageName;
+       }
+       
+       
+       protected PrintWriter createFile(File file) throws IOException {
+               if (!file.exists())
+                       file.createNewFile();
+               PrintWriter writer = new PrintWriter(file);
+               for (String s : converter.getHeader()) {
+                       writer.println(commentTag + " " + s);   
+               }
+               writer.println();
+               return writer;
+       }
+       
+       protected String getValueGetterMethod(TypeEntry binding,String name) {
+               if (binding == null)
+                       return name+".getValue()";
+               return binding.getValueGetterMethod(name);
+       }
+       
+       protected String getValueGetter(TypeEntry binding,String name) {
+               if (binding == null)
+                       return name;
+               return binding.getValueGetter(name);
+       }
+       
+       protected String getValueGetter(TypeEntry binding) {
+               if (binding == null)
+                       return "value";
+               return binding.getValueGetter();
+       }
+       
+       @Override
+       public String getSimpleTypePrefix() {
+               return "SimpleTypes_";
+       }       
+       
+       @Override
+       public String getComplexTypePrefix() {
+               return "ComplexTypes_";
+       }       
+       
+       @Override
+       public String getAttributeGroupPrefix() {
+               return "AttributeGroups_";
+       }
+       
+       @Override
+       public String handleChoice(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements, String name) {
+               String baseRelationName = getName(parent) + ".has" + name;
+               
+//             for (SchemaElement e : elements) {
+//                     Element localElement = e.getElement();
+//                     if (localElement.getName() != null) {
+//                             QName refType = localElement.getType();
+//                             if (refType != null)
+//                                     //handleIndicator(parent, indicator, e, false, name, refType);
+//                                     handleIndicator(parent, indicator, e, name, RefType.Type, baseRelationName);
+//                     } else if (localElement.getRef() != null) {
+//                             //QName refType = localElement.getRef();
+//                             //handleIndicator(parent, indicator, e, true, name, refType);
+//                             handleIndicator(parent, indicator, e, name, RefType.Reference, baseRelationName);
+//                     }
+//             }
+               
+               return baseRelationName;
+       }
+       
+       protected String getOntologyImport() {
+               return this.ontologyClassName+" " +ontShort.substring(0,ontShort.length()-1)+" = "+this.ontologyClassName+".getInstance(graph);";
+       }
+       
+       protected static class FileWriter {
+               public PrintWriter writer;
+               
+               public PrintWriter delayedWriter;
+               public PrintWriter delayedWriter2;
+       }
+       
+       protected  FileWriter getWriter(SchemaObject obj) {
+               SchemaObject s = obj;
+               while (s != null) {
+                       FileWriter fw = writers.get(s);
+                       if (fw != null)
+                               return fw;
+                       s = s.getParent();
+               }
+               return null;
+       }
+       
+       @Override
+       public String getName(SchemaObject obj) {
+               if (obj.getParent() == null) {
+                       switch (obj.getType()) {
+                       case COMPLEX_TYPE:
+                               return getComplexTypePrefix()+obj.getName();
+                       case ELEMENT:
+                               return obj.getName();
+                       case ATTRIBUTE_GROUP:
+                               return getAttributeGroupPrefix()+obj.getName();
+                       case SIMPLE_TYPE:
+                               return getSimpleTypePrefix()+obj.getName();
+                       }
+               } else {
+                       SchemaObject o = obj;
+                       SchemaObject prev = null;
+                       String name = "";
+                       while (o != null){
+                               if (o.getName() != null)
+                                       name = o.getName()+"_"+name;
+                               prev = o;
+                               o = o.getParent();
+                               if (prev.getObj() instanceof AttributeGroupRef)
+                                       o = null;
+                       }
+                       name = name.substring(0, name.length()-1);
+                       switch (prev.getType()) {
+                       case COMPLEX_TYPE:
+                               return getComplexTypePrefix()+name;
+                       case ELEMENT:
+                               return name;
+                       case ATTRIBUTE_GROUP:
+                               return getAttributeGroupPrefix()+name;
+                       case SIMPLE_TYPE:
+                               return getSimpleTypePrefix()+name;
+                       }
+               }
+               throw new RuntimeException();
+       }
+       
+       public String getName(SchemaObject obj, String rel) {
+               if (obj.getParent() == null) {
+                       switch (obj.getType()) {
+                       case COMPLEX_TYPE:
+                               return getComplexTypePrefix()+rel+obj.getName();
+                       case ELEMENT:
+                               return rel+obj.getName();
+                       case ATTRIBUTE_GROUP:
+                               return getAttributeGroupPrefix()+rel+obj.getName();
+                       case SIMPLE_TYPE:
+                               return getSimpleTypePrefix()+rel+obj.getName();
+                       }
+               } else {
+                       SchemaObject o = obj;
+                       SchemaObject prev = null;
+                       String name = "";
+                       while (o != null){
+                               if (o.getName() != null)
+                                       name = o.getName()+"_"+name;
+                               prev = o;
+                               o = o.getParent();
+                       }
+                       name = name.substring(0, name.length()-1);
+                       switch (prev.getType()) {
+                       case COMPLEX_TYPE:
+                               return getComplexTypePrefix()+rel+name;
+                       case ELEMENT:
+                               return rel+name;
+                       case ATTRIBUTE_GROUP:
+                               return getAttributeGroupPrefix()+rel+name;
+                       case SIMPLE_TYPE:
+                               return getSimpleTypePrefix()+rel+name;
+                       }
+               }
+               throw new RuntimeException();
+       }
+       
+       
+       
+       protected void writeClass(PrintWriter writer,boolean abst, String elementId, String className, String baseClass, List<String> interfaces) {
+               writer.println("@SuppressWarnings(\"unused\")");
+               writer.print("public " +(abst ? "abstract " : "") + "class " + className + " extends "+baseClass);
+               if (interfaces.size() > 0) {
+                       writer.print(" implements ");
+                       for (int i = 0; i < interfaces.size(); i++) {
+                               writer.print(interfaces.get(i));
+                               if (i < interfaces.size() -1 )
+                                       writer.print(",");
+                       }
+               }
+               writer.println("{");
+               writer.println();
+               writer.println("   @Override");
+               writer.println("   public java.lang.String getElementId() {");
+               if (elementId != null)
+               writer.println("      return \""+elementId+"\";");
+               else // complex types cannot be parsed directly with name/id reference.
+               writer.println("      return null;");
+               writer.println("   }");
+               writer.println();
+       }
+       
+       
+       protected abstract void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList);
+       protected abstract void createPrimitiveIndicator(SchemaObject parent, String refName, TypeEntry typeEntry, QName typeName);
+       protected abstract void createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList);
+       
+       protected abstract String getPackagePostFix();
+       @Override
+       public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType referenceType, String baseRelationName) {
+               String objectName;
+               if (referenceType != RefType.Element) {
+                       QName refTypeName;
+                       SchemaObject refObject = null;
+                       if (referenceType == RefType.Type) {
+                               refTypeName = element.getElement().getType();
+                               if (refName == null)
+                                       refName = base.getName(element.getElement());
+                               objectName = base.getName(element.getElement());
+                               refObject = this.base.getComplexType(refTypeName);
+                               if (refObject == null) this.base.getSimpleType(refTypeName);
+                       } else {
+                               refTypeName = element.getElement().getRef();
+                               if (refName == null)
+                                       refName = base.getName(refTypeName);
+                               objectName = refTypeName.getLocalPart();
+                               refObject = this.base.getElement(refTypeName);
+                       }
+                       
+                       TypeEntry typeEntry = this.base.getTypeEntry(refTypeName);
+                       if (typeEntry == null) {
+                               // prefer element reference over complex type reference
+                               String primaryClassName = null;
+                               String secondaryClassName = null;
+                               if (refObject != null) {
+                                       primaryClassName = getName(refObject);
+                                       if (refObject.getSc() != base) {
+                                               SchemaConverter con = refObject.getSc().converter;
+                                               primaryClassName = con.getPluginName() + "." + con.name +getPackagePostFix() + "." + primaryClassName;
+                                       }
+                               }
+                               else if (this.base.getSimpleType(refTypeName) != null) {
+                                       Inheritance inheritance = new Inheritance("");
+                                       this.base.getAtomicTypeInheritance(refTypeName, inheritance);
+                                       if (inheritance.atomicType != null) {
+                                               createPrimitiveIndicator(parent, refName, inheritance.atomicType, refTypeName);
+                                               return;
+                                       }
+                                       else {
+                                               throw new RuntimeException("No supported atomic type found for simple type " + refTypeName.toString());
+                                       }
+                               }
+                               else {
+                                       throw new RuntimeException("Type that is neither complex nor simple??");
+                               }
+                               
+                               secondaryClassName = primaryClassName;
+                               boolean useElementList = this.base.useElementList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName);
+                               boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, referenceType == RefType.Reference, refName, refTypeName);
+                               createReferenceIndicator(parent, referenceType, refName, objectName, primaryClassName, secondaryClassName, useElementList, useOriginalList);
+                       } else {
+                               createPrimitiveIndicator(parent, refName, typeEntry, refTypeName);
+                       }
+               } else {
+                       Element attrs= element.getElement();
+                       SchemaObject obj = this.base.getWithObj(parent, attrs);
+                       
+                       String className = getName(obj);
+                       if (refName == null)
+                                refName = base.getName(attrs);
+                       
+                       boolean useElementList = this.base.useElementList(parent, indicator,element, false, refName, new QName(obj.getName()));
+                       boolean useOriginalList = this.base.useOriginalList(parent, indicator,element, false, refName, new QName(obj.getName()));
+                       createElementIndicator(parent, useElementList, refName, className, useOriginalList);
+               }
+       }
+
+}