X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FImporterGenerator.java;h=80359ba895c6ea25269785a1907c6f96996141bd;hb=fb01c21839aea801224aeb82b64bd261120619d5;hp=f3279e25ad4ffea031c61057cd38be0b10c00d1e;hpb=81ede25bbf4e80f6363c16fc13ecb1add3720acb;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java b/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java index f3279e2..80359ba 100644 --- a/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java +++ b/org.simantics.xml.sax/src/org/simantics/xml/sax/ImporterGenerator.java @@ -5,14 +5,15 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.namespace.QName; import org.simantics.utils.datastructures.BijectionMap; -import org.simantics.utils.datastructures.Pair; +import org.simantics.xml.sax.SchemaConversionBase.InheritanceType; +import org.simantics.xml.sax.SchemaConversionBase.RefType; +import org.simantics.xml.sax.SchemaObject.ObjectType; import org.simantics.xml.sax.configuration.AttributeComposition; import org.simantics.xml.sax.configuration.Configuration; import org.simantics.xml.sax.configuration.IDProvider; @@ -21,38 +22,23 @@ import org.simantics.xml.sax.configuration.UnrecognizedChildElement; import org.w3._2001.xmlschema.Annotated; import org.w3._2001.xmlschema.Attribute; import org.w3._2001.xmlschema.AttributeGroup; -import org.w3._2001.xmlschema.AttributeGroupRef; import org.w3._2001.xmlschema.ComplexType; import org.w3._2001.xmlschema.Element; import org.w3._2001.xmlschema.LocalComplexType; import org.w3._2001.xmlschema.LocalSimpleType; import org.w3._2001.xmlschema.NamedAttributeGroup; -import org.w3._2001.xmlschema.OpenAttrs; import org.w3._2001.xmlschema.Restriction; import org.w3._2001.xmlschema.Schema; import org.w3._2001.xmlschema.SimpleType; import org.w3._2001.xmlschema.TopLevelAttribute; -public class ImporterGenerator extends SchemaConversionBase{ +public class ImporterGenerator extends JavaGenerator{ public ImporterGenerator(Configuration configuration) { super(configuration); } - - String commentTag = "//"; - - Schema schema; - String ontologyClassName; - SchemaConverter converter; - - List ruleClassNames = new ArrayList(); - String ontShort = "ONT"; - - File importParserDir; - String elementPackageName; - - public void createParser(Schema schema,String className, SchemaConverter converter) throws IOException { + public void createParser(Schema schema,String ontologyUri, String className, SchemaConverter converter) throws IOException { this.schema = schema; this.ontologyClassName = className; this.converter = converter; @@ -66,6 +52,7 @@ public class ImporterGenerator extends SchemaConversionBase{ ontShort +="."; String parserPackagePostfix = "_elem"; String importerClassPostfix = "Importer"; + String parserClassPostfix = "Parser"; elementPackageName = name+parserPackagePostfix; importParserDir= new File(converter.getParserDir().getAbsolutePath()+"/"+elementPackageName); @@ -73,26 +60,41 @@ public class ImporterGenerator extends SchemaConversionBase{ importParserDir.mkdirs(); handle(schema); - - File importParserFile = new File(converter.getParserDir().getAbsolutePath()+"/"+name+importerClassPostfix+".java"); - PrintWriter mainWriter = createFile(importParserFile); + // Create Importer class + File importerFile = new File(converter.getParserDir().getAbsolutePath()+"/"+name+importerClassPostfix+".java"); + PrintWriter mainWriter = createFile(importerFile); mainWriter.println("package " + converter.getPluginName() +";"); mainWriter.println(); mainWriter.println("import java.io.File;"); mainWriter.println("import org.simantics.db.Session;"); mainWriter.println("import org.simantics.xml.sax.base.AbstractImporter;"); - mainWriter.println("import org.simantics.xml.sax.base.XMLParser;"); mainWriter.println(); mainWriter.println("public class " + name + importerClassPostfix+" extends AbstractImporter {"); mainWriter.println(); mainWriter.println(" public " + name + importerClassPostfix+"(Session session, File file) {"); - mainWriter.println(" super(session,file);"); + mainWriter.println(" super(session, file, new "+name + parserClassPostfix+"());"); mainWriter.println(" }"); mainWriter.println(); - mainWriter.println(" @Override"); - mainWriter.println(" public void configure(XMLParser parser) {"); + mainWriter.println("}"); + + mainWriter.println(); + mainWriter.flush(); + mainWriter.close(); + + // Create Parser class + File parserFile = new File(converter.getParserDir().getAbsolutePath()+"/"+name+parserClassPostfix+".java"); + mainWriter = createFile(parserFile); + mainWriter.println("package " + converter.getPluginName() +";"); + mainWriter.println(); + mainWriter.println("import org.simantics.xml.sax.base.XMLParser;"); + mainWriter.println(); + mainWriter.println("public class " + name + parserClassPostfix+" extends XMLParser {"); + mainWriter.println(); + mainWriter.println(" public " + name + parserClassPostfix+"() {"); + if (schema.getTargetNamespace() != null) + mainWriter.println(" setSchemaURI(\""+schema.getTargetNamespace()+"\");"); for (String s : ruleClassNames) { - mainWriter.println(" parser.add(new "+s+"());"); + mainWriter.println(" add(new "+s+"());"); } mainWriter.println(" }"); mainWriter.println("}"); @@ -101,79 +103,24 @@ public class ImporterGenerator extends SchemaConversionBase{ mainWriter.flush(); mainWriter.close(); } - - 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 getValueGetter(String binding,String name) { -// if (binding == null) -// return name+".getValue()"; -// if ("STRING".equals(binding)) -// return name+".getValue()"; -// if ("BOOLEAN".equals(binding)) -// return "Boolean.parseBoolean("+name+".getValue())"; -// if ("INTEGER".equals(binding)) -// return "Integer.parseInt("+name+".getValue())"; -// if ("DOUBLE".equals(binding)) -// return "Double.parseDouble("+name+".getValue())"; -// if ("FLOAT".equals(binding)) -// return "Float.parseFloat("+name+".getValue())"; -// return name+".getValue()"; -// } -// protected String getValueGetter(String binding) { -// if (binding == null) -// return "value"; -// if ("STRING".equals(binding)) -// return "value"; -// if ("BOOLEAN".equals(binding)) -// return "Boolean.parseBoolean(value)"; -// if ("INTEGER".equals(binding)) -// return "Integer.parseInt(value)"; -// if ("DOUBLE".equals(binding)) -// return "Double.parseDouble(value)"; -// if ("FLOAT".equals(binding)) -// return "Float.parseFloat(value)"; -// return "value"; -// } - protected String getValueGetter(TypeEntry binding,String name) { - if (binding == null) - return name+".getValue()"; - return binding.getValueGetter(name); - } - protected String getValueGetter(TypeEntry binding) { - if (binding == null) - return "value"; - return binding.getValueGetter(); - } - - protected void handle(TopLevelAttribute topLevelAttribute) { + protected void handle(TopLevelAttribute topLevelAttribute) { } - - - public static String getComplexTypePrefix() { - return "ComplexTypes_"; - } - - public static String getAttributeGroupPrefix() { - return "AttributeGroups_"; + @Override + protected void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) { } - private Map writers = new HashMap(); @Override protected void handleComplexType(SchemaObject complexTypeObj) { ComplexType topLevelComplexType = complexTypeObj.getComplexType(); - String name = getName(complexTypeObj);//topLevelComplexType.getName(); + String name = getName(complexTypeObj); + + //if (topLevelComplexType.getName().equals("LocalizedText")) + //if (topLevelComplexType.getName().equals("Reference")) +// if (topLevelComplexType.getName().equals("NodeIdAlias")) +// System.out.println(); String className = name;//"_"+name; @@ -185,17 +132,7 @@ public class ImporterGenerator extends SchemaConversionBase{ } writers.put(complexTypeObj, fw); - boolean isList = false; - - String baseClass = "org.simantics.xml.sax.base.XMLElementNamedChildParserBase"; - - boolean inherited = false; - - QName type = getComplexTypeBase(topLevelComplexType); - if (type != null && !type.getNamespaceURI().equals("http://www.w3.org/2001/XMLSchema")) { - baseClass = getName(complexTypeName.get(type.getLocalPart())); - inherited = true; - } + Inheritance inheritance = getInheritance(complexTypeObj); provider = getIDProvider(topLevelComplexType); List references = getIDReferences(topLevelComplexType); @@ -207,27 +144,23 @@ public class ImporterGenerator extends SchemaConversionBase{ if (unknownChildElement != null) intrerfaces.add("org.simantics.xml.sax.base.UnrecognizedElementParser"); - createClassHeader(fw.writer, isList); - writeClass(fw.writer,true, null, className, baseClass, intrerfaces); + createClassHeader(fw.writer, false); + writeClass(fw.writer,false, null, className, inheritance.baseClass, intrerfaces); writeIDProvider(fw.writer); fw.writer.println(" @Override"); - fw.writer.println(" public Resource create(WriteGraph graph, Element element) throws DatabaseException{"); + fw.writer.println(" public Resource create(WriteGraph graph, ParserElement element) throws DatabaseException{"); fw.writer.println(" Layer0 L0 = Layer0.getInstance(graph);"); fw.writer.println(" "+getOntologyImport()); - if (!isList) { fw.writer.println(" Resource res = graph.newResource();"); fw.writer.println(" graph.claim(res, L0.InstanceOf, "+ontShort+name+");"); - } else { - fw.writer.println(" Resource res = ListUtils.create(graph, "+ontShort+name+", Collections.EMPTY_LIST);"); - } fw.writer.println(" return res;"); fw.writer.println(" }"); fw.writer.println(); fw.writer.println(" @Override"); - fw.writer.println(" public boolean connectParent(WriteGraph graph, Element parent, Element element) throws DatabaseException{"); + fw.writer.println(" public boolean connectParent(WriteGraph graph, ParserElement parent, ParserElement element) throws DatabaseException{"); fw.writer.println(" "+getOntologyImport()); fw.writer.println(" graph.claim(parent.getData(), "+this.ontShort+getName(complexTypeObj,"has")+", element.getData());"); fw.writer.println(" return true;"); @@ -247,15 +180,17 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.writer.println(" }"); fw.writer.println(" @Override"); - fw.writer.println(" public boolean connectChild(WriteGraph graph, Element element, Element child) throws DatabaseException{"); + fw.writer.println(" public boolean connectChild(WriteGraph graph, ParserElement element, ParserElement child) throws DatabaseException{"); fw.writer.println(" "+getOntologyImport()); if (stringWriter.getBuffer().length() > 0) { fw.writer.write(stringWriter.toString()); } - - + if (inheritance.type == InheritanceType.ComplexType) { + fw.writer.println(" return super.connectChild(graph,element,child);"); + }else{ fw.writer.println(" return false;"); + } fw.writer.println(" }"); fw.writer.println(); @@ -271,8 +206,8 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.delayedWriter2 = null; fw.writer.println(" @Override"); - fw.writer.println(" public void configure(WriteGraph graph, Deque parents, Element element) throws DatabaseException {"); - if (inherited) { + fw.writer.println(" public void configure(WriteGraph graph, Deque parents, ParserElement element) throws DatabaseException {"); + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" super.configure(graph,parents,element);"); } fw.writer.println(" "+getOntologyImport()); @@ -282,6 +217,14 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.writer.println(" }"); + if (inheritance.type == InheritanceType.AtomicType) { + fw.writer.println(); + fw.writer.println(" @Override"); + fw.writer.println(" public void configure(WriteGraph graph, ParserElement element, java.lang.String string) throws DatabaseException {"); + fw.writer.println(" graph.claimValue(element.getData(), "+getValueGetter(inheritance.atomicType,"string")+", "+inheritance.atomicType.binding+");"); + fw.writer.println(" }"); + } + writeIDReferences(fw.writer,name, references); writeUnknownChild(fw.writer,name,unknownChildElement); @@ -295,156 +238,95 @@ public class ImporterGenerator extends SchemaConversionBase{ } @Override - protected void handle(SchemaObject parent, SchemaElement indicator, List elements) { - if (indicator.getType() == SchemaElement.ElementType.SEQUENCE || (indicator.getType() == SchemaElement.ElementType.CHOICE && indicator.getRestriction().many())) { - for (SchemaElement e : elements) { - handle(parent, indicator, e); - } - } else if (indicator.getType() == SchemaElement.ElementType.CHOICE) { - String name = getChoiceName(elements); + protected void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList) { + FileWriter fw = getWriter(parent); + if (referenceType == RefType.Type) { + // create internal class for handling the element and child attachment + secondaryClassName = getName(parent) +"_" +objectName; + fw.writer.println(" addParser(\""+ objectName +"\", "+secondaryClassName+".class);"); + fw.delayedWriter2.println(" public static class " + secondaryClassName +" extends " + primaryClassName +"{"); + fw.delayedWriter2.println(" public "+ secondaryClassName +"(){"); + fw.delayedWriter2.println(" }"); + fw.delayedWriter2.println(" }"); + } else { // referenceType == RefType.Reference + fw.writer.println(" addParser("+primaryClassName+".class);"); + if (!primaryClassName.equals(secondaryClassName)) + fw.writer.println(" addParser("+secondaryClassName+".class);"); + } + + fw.delayedWriter.println(" if (child.getElementParser() instanceof "+secondaryClassName+"){"); + fw.delayedWriter.println(" graph.claim(element.getData(), "+ontShort+getName(parent)+"_has"+refName + ", child.getData());"); + if (useElementList) { - 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); - } else if (localElement.getRef() != null) { - QName refType = localElement.getRef(); - handleIndicator(parent, indicator, e, true, name, refType); - } - } + // element type specific list + fw.delayedWriter.println(" {"); + fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+refName + "List);"); + fw.delayedWriter.println(" if (list == null) {"); + fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); + fw.delayedWriter.println(" graph.claim(element.getData(),"+ontShort+getName(parent)+"_has"+refName + "List,list);"); + fw.delayedWriter.println(" } else {"); + fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); + fw.delayedWriter.println(" }"); + fw.delayedWriter.println(" }"); + } + if (useOriginalList) { + // generic list + fw.delayedWriter.println(" {"); + fw.delayedWriter.println(" XMLResource XML = XMLResource.getInstance(graph);"); + fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(), XML.hasOriginalElementList);"); + fw.delayedWriter.println(" if (list == null) {"); + fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); + fw.delayedWriter.println(" graph.claim(element.getData(), XML.hasOriginalElementList,list);"); + fw.delayedWriter.println(" } else {"); + fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); + fw.delayedWriter.println(" }"); + fw.delayedWriter.println(" }"); } + fw.delayedWriter.println(" return true;"); + fw.delayedWriter.println(" }"); } - @Override - protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, boolean reference, String ref, QName refType) { + protected void createPrimitiveIndicator(SchemaObject parent, String refName, String binding) { FileWriter fw = getWriter(parent); - String binding = getBindingFromPrimitiveType(refType); - if (binding == null) { - SchemaObject refElement = elementName.get(refType.getLocalPart()); - SchemaObject refComplexType = complexTypeName.get(refType.getLocalPart()); -// String className = refType.getLocalPart(); -// if (!isElementRef(refType.getLocalPart())) { -// className = "_"+className; -// } -// -// String refClassName = refType.getLocalPart(); -// if (isComplexTypeRef(refClassName)) { -// refClassName = "_"+refClassName; -// } - String className = null; - String refClassName = null; - if (refElement != null) - className = getName(refElement); - else - className = getName(refComplexType); - - if (refComplexType != null) { - refClassName = getName(refComplexType); - } else { - refClassName = getName(refElement); - } - - if (!reference) - fw.writer.println(" addParser(\""+ ref +"\", "+className+".class);"); - else - fw.writer.println(" addParser("+className+".class);"); - if (!className.equals(refClassName)) - fw.writer.println(" addParser("+refClassName+".class);"); - - fw.delayedWriter.println(" if (child.getParser() instanceof "+refClassName+"){"); - fw.delayedWriter.println(" graph.claim(element.getData(), "+ontShort+getName(parent)+"_has"+ref + ", child.getData());"); - if (useElementList(parent, indicator,element, reference, ref, refType)) { - - // element type specific list - fw.delayedWriter.println(" {"); - fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+getName(parent)+"_has"+ref + "List);"); - fw.delayedWriter.println(" if (list == null) {"); - fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); - fw.delayedWriter.println(" graph.claim(element.getData(),"+ontShort+getName(parent)+"_has"+ref + "List,list);"); - fw.delayedWriter.println(" } else {"); - fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); - fw.delayedWriter.println(" }"); - fw.delayedWriter.println(" }"); - } - if (useOriginalList(parent, indicator,element, reference, ref, refType)) { - // generic list - fw.delayedWriter.println(" {"); - //fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(),"+ontShort+"XML_hasOriginalElementList);"); - fw.delayedWriter.println(" XMLResource XML = XMLResource.getInstance(graph);"); - fw.delayedWriter.println(" Resource list = graph.getPossibleObject(element.getData(), XML.hasOriginalElementList);"); - fw.delayedWriter.println(" if (list == null) {"); - fw.delayedWriter.println(" list = org.simantics.db.common.utils.ListUtils.create(graph, java.util.Collections.singletonList(child.getData()));"); - //fw.delayedWriter.println(" graph.claim(element.getData(),"+ontShort+"XML_hasOriginalElementList,list);"); - fw.delayedWriter.println(" graph.claim(element.getData(), XML.hasOriginalElementList,list);"); - fw.delayedWriter.println(" } else {"); - fw.delayedWriter.println(" org.simantics.db.common.utils.ListUtils.insertBack(graph, list, java.util.Collections.singletonList(child.getData()));"); - fw.delayedWriter.println(" }"); - fw.delayedWriter.println(" }"); - } - - fw.delayedWriter.println(" return true;"); - fw.delayedWriter.println(" }"); - } else { - //writer.println(commentTag+ontShort+"."+parent+".has"+ref + " getParser(java.util.Map parsers, Element element, Element child) {"); + fw.delayedWriter2.println(" public Class getParser(java.util.Map parsers, ParserElement element, ParserElement child) {"); fw.delayedWriter2.println(" Class parserClass = super.getParser(parsers, element, child);"); fw.delayedWriter2.println(" if (parserClass != null) return parserClass;"); fw.delayedWriter2.println(" org.simantics.xml.sax.base.XMLElementParser parser = parsers.get(child.getQName());"); @@ -469,19 +351,7 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.delayedWriter2.println(" return null;"); fw.delayedWriter2.println(" }"); } - - private 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 protected void handle(SchemaObject parent, Attribute attribute) { String name = attribute.getName(); @@ -532,15 +402,21 @@ public class ImporterGenerator extends SchemaConversionBase{ } } if (simpleType != null) { - Restriction restriction = simpleType.getRestriction(); - if (restriction == null) - throw new RuntimeException("Cannot resolve type for Attribute " + attrName + " -> " + primitiveType.getLocalPart()+ ", SimpleType restriction is unset"); - QName base = restriction.getBase(); - - - //String binding = getBindingFromPrimitiveType(base); - TypeEntry binding = getTypeEntry(base); - writeAttribute(fw, attrName, relationName, binding, isReference); + org.w3._2001.xmlschema.List list = simpleType.getList(); + if (list != null) { + TypeEntry binding = getTypeEntry(new QName(SCHEMA_NS, "string")); + writeAttribute(fw, attrName, relationName, binding, isReference); + } else { + Restriction restriction = simpleType.getRestriction(); + if (restriction == null) + throw new RuntimeException("Cannot resolve type for Attribute " + attrName + " -> " + primitiveType.getLocalPart()+ ", SimpleType restriction is unset"); + QName base = restriction.getBase(); + + + //String binding = getBindingFromPrimitiveType(base); + TypeEntry binding = getTypeEntry(base); + writeAttribute(fw, attrName, relationName, binding, isReference); + } } else { // TODO : using default String attribute should be configured with rules. //throw new RuntimeException("Cannot resolve type for Attribute " + attrName + " -> " + primitiveType.getLocalPart()); @@ -555,7 +431,7 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.writer.println(" {"); fw.writer.println(" Attribute a = element.getAttribute(\"" +attrName+"\");"); fw.writer.println(" if (a != null) {"); - fw.writer.println(" graph.claimLiteral(element.getData(),"+relationName+","+getValueGetter(binding,"a")+", "+binding.binding+");"); + fw.writer.println(" graph.claimLiteral(element.getData(),"+relationName+","+getValueGetterMethod(binding,"a")+", "+binding.binding+");"); if (isReference) fw.writer.println(" idProviderValue = a.getValue();"); fw.writer.println(" }"); @@ -577,7 +453,7 @@ public class ImporterGenerator extends SchemaConversionBase{ //String binding = getBindingFromPrimitiveType(base); TypeEntry binding = getTypeEntry(base); fw.writer.println(" @Override"); - fw.writer.println(" public void configure(WriteGraph graph, Element element, java.lang.String value) throws DatabaseException {"); + fw.writer.println(" public void configure(WriteGraph graph, ParserElement element, java.lang.String value) throws DatabaseException {"); //fw.writer.println(" graph.claimValue(element.getData(),"+getValueGetter(binding)+", Bindings."+binding+");"); fw.writer.println(" graph.claimValue(element.getData(),"+getValueGetter(binding)+", "+binding.binding +");"); fw.writer.println(" }"); @@ -642,9 +518,9 @@ public class ImporterGenerator extends SchemaConversionBase{ if (i > 0) fw.writer.print(","); if (defaultValue != null) - fw.writer.print("a"+(i)+"!= null ? "+ getValueGetter(binding,"a"+(i++)) + " : " +defaultValue); + fw.writer.print("a"+(i)+"!= null ? "+ getValueGetterMethod(binding,"a"+(i++)) + " : " +defaultValue); else - fw.writer.print(getValueGetter(binding,"a"+(i++))); + fw.writer.print(getValueGetterMethod(binding,"a"+(i++))); } fw.writer.println("};"); fw.writer.println(" graph.claimLiteral(element.getData(),"+relationName+", value, "+arrayBinding+");"); @@ -663,12 +539,8 @@ public class ImporterGenerator extends SchemaConversionBase{ } - @Override - protected void handleSimpleType(SchemaObject parent, SchemaObject simpleType) { - - } - + IDProvider provider; @Override @@ -687,10 +559,7 @@ public class ImporterGenerator extends SchemaConversionBase{ writers.put(elementObj, fw); boolean isList = false; - Pair inhertiance = getElementInheritance(elementObj); - boolean inherited = inhertiance.second; - String baseClass = inhertiance.first;//"org.simantics.xml.sax.base.XMLElementParserBase"; - + Inheritance inheritance = getInheritance(elementObj); provider = getIDProvider(element); List references = getIDReferences(element); @@ -703,10 +572,10 @@ public class ImporterGenerator extends SchemaConversionBase{ intrerfaces.add("org.simantics.xml.sax.base.UnrecognizedElementParser"); createClassHeader(fw.writer, isList); - writeClass(fw.writer,false, element.getName(), className, baseClass, intrerfaces); + writeClass(fw.writer,false, element.getName(), className, inheritance.baseClass, intrerfaces); writeIDProvider(fw.writer); fw.writer.println(" @Override"); - fw.writer.println(" public Resource create(WriteGraph graph, Element element) throws DatabaseException{"); + fw.writer.println(" public Resource create(WriteGraph graph, ParserElement element) throws DatabaseException{"); fw.writer.println(" Layer0 L0 = Layer0.getInstance(graph);"); fw.writer.println(" "+getOntologyImport()); if (!isList) { @@ -720,7 +589,7 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.writer.println(); fw.writer.println(" @Override"); - fw.writer.println(" public boolean connectParent(WriteGraph graph, Element parent, Element element) throws DatabaseException{"); + fw.writer.println(" public boolean connectParent(WriteGraph graph, ParserElement parent, ParserElement element) throws DatabaseException{"); fw.writer.println(" "+getOntologyImport()); fw.writer.println(" graph.claim(parent.getData(), "+this.ontShort+getName(elementObj,"has")+", element.getData());"); fw.writer.println(" return true;"); @@ -728,8 +597,8 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.writer.println(); fw.writer.println(" @Override"); - fw.writer.println(" public void configure(WriteGraph graph, Deque parents, Element element) throws DatabaseException {"); - if (inherited) { + fw.writer.println(" public void configure(WriteGraph graph, Deque parents, ParserElement element) throws DatabaseException {"); + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" super.configure(graph,parents,element);"); } fw.writer.println(" "+getOntologyImport()); @@ -743,10 +612,17 @@ public class ImporterGenerator extends SchemaConversionBase{ } fw.writer.println(" }"); - if (simpleType != null) { - SchemaObject obj = simpleTypes.get(simpleType); - handleElementSimpleTypeAttributes(obj); + if (inheritance.type == InheritanceType.AtomicType) { + fw.writer.println(); + fw.writer.println(" @Override"); + fw.writer.println(" public void configure(WriteGraph graph, ParserElement element, java.lang.String string) throws DatabaseException {"); + fw.writer.println(" graph.claimValue(element.getData(), "+getValueGetter(inheritance.atomicType,"string")+", "+inheritance.atomicType.binding+");"); + fw.writer.println(" }"); } +// if (simpleType != null) { +// SchemaObject obj = simpleTypes.get(simpleType); +// handleElementSimpleTypeAttributes(obj); +// } StringWriter stringWriter = new StringWriter(); @@ -767,13 +643,13 @@ public class ImporterGenerator extends SchemaConversionBase{ fw.writer.println(" }"); fw.writer.println(" @Override"); - fw.writer.println(" public boolean connectChild(WriteGraph graph, Element element, Element child) throws DatabaseException{"); + fw.writer.println(" public boolean connectChild(WriteGraph graph, ParserElement element, ParserElement child) throws DatabaseException{"); fw.writer.println(" "+getOntologyImport()); if (stringWriter.getBuffer().length() > 0) { fw.writer.write(stringWriter.toString()); } - if (inherited) { + if (inheritance.type == InheritanceType.ComplexType) { fw.writer.println(" return super.connectChild(graph,element,child);"); } else { fw.writer.println(" return false;"); @@ -805,65 +681,7 @@ public class ImporterGenerator extends SchemaConversionBase{ ruleClassNames.add(converter.getPluginName()+"."+elementPackageName+"."+name); } - - private Pair getElementInheritance(SchemaObject topLevelElementObj) { - Element topLevelElement = topLevelElementObj.getElement(); - String baseClass = "org.simantics.xml.sax.base.XMLElementNamedChildParserBase"; - boolean inherited = false; - if (topLevelElement.getType() != null) { - QName type = topLevelElement.getType(); - if (!type.getNamespaceURI().equals(SCHEMA_NS)) { - SchemaObject obj = complexTypeName.get(type.getLocalPart()); - baseClass = getName(obj); - inherited = true; - } - } - if (!inherited) { - QName type = getElementBase(topLevelElement); - if (type != null) { - if (!type.getNamespaceURI().equals(SCHEMA_NS)) { - SchemaObject obj = getWithName(topLevelElementObj, type.getLocalPart()); - baseClass = getName(obj); - inherited = true; - } - } - } - if (!inherited) { - QName type = topLevelElement.getSubstitutionGroup(); - if (type != null) { - if (!type.getNamespaceURI().equals(SCHEMA_NS)) { - SchemaObject obj = getWithName(topLevelElementObj, type.getLocalPart()); - baseClass = getName(obj); - inherited = true; - } - } - } - - return new Pair(baseClass, inherited); - } - - private void writeClass(PrintWriter writer,boolean abst, String name, String className, String baseClass, List 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 (name != null) - writer.println(" return \""+name+"\";"); - else // complex types cannot be parsed directly with name/id reference. - writer.println(" return null;"); - writer.println(" }"); - writer.println(); - } + private void writeIDProvider(PrintWriter writer) { if (provider != null) { @@ -888,14 +706,14 @@ public class ImporterGenerator extends SchemaConversionBase{ private void writeIDReferences(PrintWriter writer,String name, List references) { if (references.size() > 0) { writer.println(" @Override"); - writer.println(" public boolean connectReferences(WriteGraph graph, Element element, java.util.Map map) throws DatabaseException {"); + writer.println(" public boolean connectReferences(WriteGraph graph, ParserElement element, java.util.Map map) throws DatabaseException {"); writer.println(" "+getOntologyImport()); writer.println(" boolean result = true;"); for (IDReference ref : references) { writer.println(" {"); writer.println(" Attribute a = element.getAttribute(\"" + ref.getIDSource().getName() +"\");"); writer.println(" if (a != null) {"); - writer.println(" Element refEle = map.get(a.value);"); + writer.println(" ParserElement refEle = map.get(a.value);"); writer.println(" if (refEle != null) {"); writer.println(" Resource ref = refEle.getData();"); writer.println(" graph.claim(element.getData(), "+ontShort+name+"_"+ref.getReference().getName()+", ref);"); @@ -916,13 +734,18 @@ public class ImporterGenerator extends SchemaConversionBase{ return; writer.println(" @Override"); - writer.println(" public void configureChild(WriteGraph graph, Deque parents, Element element, Element child) throws DatabaseException {"); + writer.println(" public void configureChild(WriteGraph graph, Deque parents, ParserElement element, ParserElement child) throws DatabaseException {"); writer.println(" " + unknownChildElement.getJavaMethod()); writer.println(" }"); writer.println(); } + @Override + protected String getBaseClass(ObjectType type) { + return "org.simantics.xml.sax.base.XMLElementNamedChildParserBase"; + } + protected void createClassHeader(PrintWriter writer, boolean isList) { writer.println("package " + converter.getPluginName() +"."+elementPackageName+";"); writer.println(); @@ -932,7 +755,7 @@ public class ImporterGenerator extends SchemaConversionBase{ writer.println("import org.simantics.db.WriteGraph;"); writer.println("import org.simantics.db.exception.DatabaseException;"); writer.println("import org.simantics.xml.sax.base.Attribute;"); - writer.println("import org.simantics.xml.sax.base.Element;"); + writer.println("import org.simantics.xml.sax.base.ParserElement;"); writer.println("import org.simantics.xml.sax.ontology.XMLResource;"); if (!isList) { writer.println("import org.simantics.layer0.Layer0;"); @@ -943,93 +766,4 @@ public class ImporterGenerator extends SchemaConversionBase{ writer.println(); } - private String getOntologyImport() { - return this.ontologyClassName+" " +ontShort.substring(0, 3)+" = "+this.ontologyClassName+".getInstance(graph);"; - } - - - private static class FileWriter { - public PrintWriter writer; - - public PrintWriter delayedWriter; - public PrintWriter delayedWriter2; - } - - public static 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 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 name; - } - } - throw new RuntimeException(); - - } - - public static 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 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 rel+name; - } - } - throw new RuntimeException(); - - } }