package org.simantics.xml.sax.ui.wizard;\r
\r
import java.io.File;\r
+import java.io.IOException;\r
\r
import org.eclipse.jface.viewers.IStructuredSelection;\r
import org.eclipse.jface.wizard.Wizard;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.FileDialog;\r
import org.eclipse.ui.IImportWizard;\r
import org.eclipse.ui.IWorkbench;\r
+import org.simantics.xml.sax.ManualSchemaFileImport;\r
import org.simantics.xml.sax.SchemaConverter;\r
\r
public class SchemaConversionWizard extends Wizard implements IImportWizard {\r
}\r
\r
public void doConversion() throws Exception {\r
- SchemaConverter converter = new SchemaConverter();\r
- converter.setCreateExporter(inputSelectionPage.createExporter);\r
- converter.setCreateImporter(inputSelectionPage.createImporter);\r
- converter.setCreatePGraph(inputSelectionPage.createPGraph);\r
-\r
+ \r
+ \r
File inputFile = new File(inputSelectionPage.getSchemaFilename());\r
File configurationFile = null;\r
if (inputSelectionPage.getConfigurationFilename() != null)\r
configurationFile = new File(inputSelectionPage.getConfigurationFilename());\r
File outputPlugin = new File(inputSelectionPage.getPluginFilename());\r
+\r
+ SchemaConverter converter = new SchemaConverter(inputFile,configurationFile,outputPlugin);\r
+ converter.setCreateExporter(inputSelectionPage.createExporter);\r
+ converter.setCreateImporter(inputSelectionPage.createImporter);\r
+ converter.setCreatePGraph(inputSelectionPage.createPGraph);\r
+ converter.setFileImport(new ManualSchemaFileImport() {\r
+ \r
+ String filename;\r
+ @Override\r
+ public File getFileForLocation(final String location) throws IOException {\r
+ if (Display.getCurrent() == null)\r
+ Display.getDefault().syncExec(new Runnable() {\r
+ @Override\r
+ public void run() {\r
+ showDialog(location);\r
+ }\r
+ });\r
+ else {\r
+ showDialog(location);\r
+ }\r
+ if (filename == null)\r
+ return null;\r
+ return new File(filename);\r
+ }\r
+ \r
+ protected void showDialog(String location) {\r
+ FileDialog dialog = new FileDialog(SchemaConversionWizard.this.getShell(), SWT.OPEN);\r
+ dialog.setText("Open schema file for " + location);\r
+ filename = dialog.open();\r
+ }\r
+ });\r
\r
- converter.convertSchema(inputFile,configurationFile,outputPlugin);\r
+ converter.convert();\r
\r
schemaCombinationPage.setOutputPlugin(outputPlugin);\r
}\r
import javax.xml.namespace.QName;\r
\r
import org.simantics.utils.datastructures.BijectionMap;\r
+import org.simantics.xml.sax.SchemaConversionBase.Inheritance;\r
+import org.simantics.xml.sax.SchemaConversionBase.InheritanceType;\r
+import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
+import org.simantics.xml.sax.SchemaConversionBase.TypeEntry;\r
import org.simantics.xml.sax.SchemaObject.ObjectType;\r
import org.simantics.xml.sax.configuration.AttributeComposition;\r
-import org.simantics.xml.sax.configuration.Configuration;\r
import org.simantics.xml.sax.configuration.IDProvider;\r
import org.simantics.xml.sax.configuration.IDReference;\r
import org.simantics.xml.sax.configuration.UnrecognizedChildElement;\r
import org.w3._2001.xmlschema.LocalComplexType;\r
import org.w3._2001.xmlschema.LocalSimpleType;\r
import org.w3._2001.xmlschema.NamedAttributeGroup;\r
+import org.w3._2001.xmlschema.NamedGroup;\r
import org.w3._2001.xmlschema.Restriction;\r
-import org.w3._2001.xmlschema.Schema;\r
import org.w3._2001.xmlschema.SimpleType;\r
-import org.w3._2001.xmlschema.TopLevelAttribute;\r
\r
public class ExporterGenerator extends JavaGenerator{\r
\r
- public ExporterGenerator(Configuration configuration) {\r
- super(configuration);\r
+ public ExporterGenerator(SchemaConverter converter, SchemaConversionBase base) {\r
+ super(converter, base);\r
}\r
\r
- \r
- \r
- public void createParser(Schema schema,String ontologyUri, String className, SchemaConverter converter) throws IOException {\r
- this.schema = schema;\r
- this.ontologyClassName = className;\r
- this.converter = converter;\r
- \r
- \r
- String packageParts[] = className.split("\\.");\r
- String name = packageParts[packageParts.length-1];\r
- \r
+ public void createParser() throws IOException {\r
\r
- ontShort = name.substring(0, 3).toUpperCase();\r
- ontShort +=".";\r
String parserPackagePostfix = "_exp";\r
String importerClassPostfix = "Exporter";\r
String parserClassPostfix = "Writer";\r
if (!importParserDir.exists())\r
importParserDir.mkdirs();\r
\r
- handle(schema);\r
+ base.handle(this);\r
// Create Importer class\r
File importerFile = new File(converter.getParserDir().getAbsolutePath()+"/"+name+importerClassPostfix+".java");\r
PrintWriter mainWriter = createFile(importerFile);\r
mainWriter.close();\r
}\r
\r
- protected void handle(TopLevelAttribute topLevelAttribute) {\r
-\r
- }\r
+// @Override\r
+// protected void handle(TopLevelAttribute topLevelAttribute) {\r
+//\r
+// }\r
\r
@Override\r
- protected String getBaseClass(ObjectType type) {\r
+ public String getBaseClass(ObjectType type) {\r
return "org.simantics.xml.sax.base.XMLElementNamedChildWriterBase";\r
}\r
\r
@Override\r
- protected void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
+ public void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
+ }\r
+ \r
+ @Override\r
+ public void handle(SchemaObject parent, NamedGroup attribute) {\r
+ // TODO Auto-generated method stub\r
+ \r
}\r
\r
@Override\r
- protected void handleComplexType(SchemaObject complexTypeObj) {\r
+ public void handleComplexType(SchemaObject complexTypeObj) {\r
ComplexType topLevelComplexType = complexTypeObj.getComplexType();\r
\r
String name = getName(complexTypeObj);\r
// inherited = true;\r
// }\r
// }\r
- Inheritance inheritance = getInheritance(complexTypeObj);\r
+ Inheritance inheritance = base.getInheritance(complexTypeObj);\r
\r
- provider = getIDProvider(topLevelComplexType);\r
+ provider = base.getIDProvider(topLevelComplexType);\r
// List<IDReference> references = getIDReferences(topLevelComplexType);\r
// UnrecognizedChildElement unknownChildElement = getUnknown(topLevelComplexType);\r
\r
fw.writer.println(" super(graph);");\r
fw.writer.println(" "+getOntologyImport());\r
\r
- handleComplexTypeExtension(complexTypeObj);\r
+ base.handleComplexTypeExtension(complexTypeObj);\r
\r
fw.writer.println(" }");\r
\r
}\r
fw.writer.println(" "+getOntologyImport());\r
fw.writer.println(" for (Statement attribute : attributes) {");\r
- handleComplexTypeAttributes(complexTypeObj);\r
- handleExtensionAttributes(complexTypeObj);\r
+ base.handleComplexTypeAttributes(complexTypeObj);\r
+ base.handleExtensionAttributes(complexTypeObj);\r
fw.writer.println(" }");\r
fw.writer.println(" }");\r
\r
}\r
\r
@Override\r
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) { \r
+ public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) { \r
// generates overriding method that allows writing any element\r
FileWriter fw = getWriter(parent);\r
fw.delayedWriter2.println(" @Override");\r
}\r
\r
@Override \r
- protected void handle(SchemaObject parent, Attribute attribute) {\r
+ public void handle(SchemaObject parent, Attribute attribute) {\r
+ if (parent == null)\r
+ return;\r
String name = attribute.getName();\r
QName primitiveType = attribute.getType();\r
SimpleType simpleType = attribute.getSimpleType();\r
attrName = ref.getLocalPart();\r
relationName = ontShort+getName(parent)+"_has"+ref.getLocalPart();\r
\r
- Attribute referred = getRefAttribute(ref);\r
+ Attribute referred = base.getRefAttribute(ref);\r
if (referred != null) {\r
primitiveType = referred.getType();\r
simpleType = referred.getSimpleType();\r
if (primitiveType != null) {\r
\r
//String binding = getBindingFromPrimitiveType(primitiveType);\r
- TypeEntry binding = getTypeEntry(primitiveType);\r
+ TypeEntry binding = base.getTypeEntry(primitiveType);\r
\r
if (binding != null) {\r
writeAttribute(fw, attrName, relationName, binding, isReference);\r
return;\r
} else {\r
if (simpleType == null) {\r
- SchemaObject simpleTypeObj = simpleTypeName.get(primitiveType.getLocalPart());\r
+ SchemaObject simpleTypeObj = base.simpleTypeName.get(primitiveType.getLocalPart());\r
if (simpleTypeObj != null)\r
simpleType = simpleTypeObj.getSimpleType();\r
} \r
if (simpleType != null) {\r
org.w3._2001.xmlschema.List list = simpleType.getList();\r
if (list != null) {\r
- TypeEntry binding = getTypeEntry(new QName(SCHEMA_NS, "string"));\r
+ TypeEntry binding = base.getTypeEntry(new QName(SchemaConversionBase.SCHEMA_NS, "string"));\r
writeAttribute(fw, attrName, relationName, binding, isReference);\r
} else {\r
Restriction restriction = simpleType.getRestriction();\r
\r
\r
//String binding = getBindingFromPrimitiveType(base);\r
- TypeEntry binding = getTypeEntry(base);\r
+ TypeEntry binding = this.base.getTypeEntry(base);\r
writeAttribute(fw, attrName, relationName, binding, isReference);\r
}\r
} else {\r
//throw new RuntimeException("Cannot resolve type for Attribute " + attrName + " -> " + primitiveType.getLocalPart());\r
fw.writer.println(" //FIXME: Cannot resolve type for Attribute " + attrName + " Using default type String");\r
//writeAttribute(fw, attrName, relationName, "STRING", isReference);\r
- writeAttribute(fw, attrName, relationName, getTypeEntry("string"), isReference);\r
+ writeAttribute(fw, attrName, relationName, base.getTypeEntry("string"), isReference);\r
}\r
}\r
\r
- //private void writeAttribute(FileWriter fw, String attrName, String relationName, String binding, boolean isReference) {\r
private void writeAttribute(FileWriter fw, String attrName, String relationName, TypeEntry binding, boolean isReference) {\r
fw.writer.println(" {");\r
fw.writer.println(" if (attribute.getPredicate().equals("+relationName+")) {"); \r
}\r
\r
@Override\r
- protected void handleAttributes(SchemaObject simpleTypeObj) {\r
+ public void handleAttributes(SchemaObject simpleTypeObj) {\r
SchemaObject parent = simpleTypeObj.getParent();\r
FileWriter fw = getWriter(parent);\r
\r
\r
\r
//String binding = getBindingFromPrimitiveType(base);\r
- TypeEntry binding = getTypeEntry(base);\r
+ TypeEntry binding = this.base.getTypeEntry(base);\r
\r
fw.writer.println(" @Override");\r
fw.writer.println(" public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException, DatabaseException {");\r
}\r
\r
@Override\r
- protected void handle(SchemaObject parent, AttributeGroup attribute) {\r
+ public void handle(SchemaObject parent, AttributeGroup attribute) {\r
if (parent != null) {\r
FileWriter fw = getWriter(parent);\r
- NamedAttributeGroup group = getAttributeGroup(attribute.getRef().getLocalPart());\r
+ NamedAttributeGroup group = this.base.getAttributeGroup(attribute.getRef().getLocalPart());\r
fw.writer.println(commentTag+" AttributeGroup " + group.getName());\r
SchemaObject obj = new SchemaObject(parent,attribute);\r
for (Annotated annotated : group.getAttributeOrAttributeGroup()) {\r
}\r
\r
@Override\r
- protected void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
+ public void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
FileWriter fw = getWriter(parent);\r
- QName type = new QName(CONVERSION_NS, composition.getType());\r
- TypeEntry typeEntry = getTypeEntry(type);\r
+ QName type = new QName(SchemaConversionBase.CONVERSION_NS, composition.getType());\r
+ TypeEntry typeEntry = this.base.getTypeEntry(type);\r
String arrayBinding = typeEntry.binding;//getBindingFromPrimitiveType(type);\r
String javaType = typeEntry.javaType;//getJavaTypeFromPrimitiveType(type);\r
String name = composition.getName();\r
}\r
\r
protected String getDefaultValue(QName atype) {\r
- Map<String,TypeEntry> types = typeMap.get(atype.getNamespaceURI());\r
+ Map<String,TypeEntry> types = this.base.typeMap.get(atype.getNamespaceURI());\r
if (types == null)\r
return null;\r
TypeEntry entry = types.get(atype.getLocalPart());\r
return entry.defaultValue;\r
}\r
\r
- \r
- \r
- \r
- \r
- \r
IDProvider provider;\r
@Override\r
- protected void handleElement(SchemaObject elementObj) {\r
+ public void handleElement(SchemaObject elementObj) {\r
Element element = elementObj.getElement();\r
\r
String name = getName(elementObj);//topLevelElement.getName();\r
writers.put(elementObj, fw);\r
boolean isList = false;\r
\r
- Inheritance inheritance = getInheritance(elementObj); \r
+ Inheritance inheritance = this.base.getInheritance(elementObj); \r
\r
- provider = getIDProvider(element);\r
- List<IDReference> references = getIDReferences(element);\r
- UnrecognizedChildElement unknownChildElement = getUnknown(element);\r
+ provider = this.base.getIDProvider(element);\r
+ List<IDReference> references = this.base.getIDReferences(element);\r
+ UnrecognizedChildElement unknownChildElement = this.base.getUnknown(element);\r
\r
// List<String> intrerfaces = new ArrayList<String>();\r
// if (references.size() > 0)\r
fw.writer.println(" "+getOntologyImport());\r
fw.writer.println(" for (Statement attribute : attributes) {");\r
if (complexType != null) {\r
- SchemaObject obj = complexTypes.get(complexType);\r
- handleElementComplexTypeAttributes(obj);\r
+ SchemaObject obj = this.base.complexTypes.get(complexType);\r
+ this.base.handleElementComplexTypeAttributes(obj);\r
} \r
fw.writer.println(" }");\r
fw.writer.println(" }");\r
fw.writer.println(" super(graph);");\r
fw.writer.println(" "+getOntologyImport());\r
if (complexType != null) {\r
- SchemaObject obj = complexTypes.get(complexType);\r
- handleComplexTypeExtension(obj);\r
+ SchemaObject obj = this.base.complexTypes.get(complexType);\r
+ this.base.handleComplexTypeExtension(obj);\r
} else if (simpleType != null) {\r
\r
}\r
import java.io.StringWriter;\r
import java.util.ArrayList;\r
import java.util.List;\r
-import java.util.Map;\r
\r
import javax.xml.namespace.QName;\r
\r
import org.simantics.utils.datastructures.BijectionMap;\r
+import org.simantics.xml.sax.SchemaConversionBase.Inheritance;\r
import org.simantics.xml.sax.SchemaConversionBase.InheritanceType;\r
import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
+import org.simantics.xml.sax.SchemaConversionBase.TypeEntry;\r
import org.simantics.xml.sax.SchemaObject.ObjectType;\r
import org.simantics.xml.sax.configuration.AttributeComposition;\r
-import org.simantics.xml.sax.configuration.Configuration;\r
import org.simantics.xml.sax.configuration.IDProvider;\r
import org.simantics.xml.sax.configuration.IDReference;\r
import org.simantics.xml.sax.configuration.UnrecognizedChildElement;\r
import org.w3._2001.xmlschema.LocalComplexType;\r
import org.w3._2001.xmlschema.LocalSimpleType;\r
import org.w3._2001.xmlschema.NamedAttributeGroup;\r
+import org.w3._2001.xmlschema.NamedGroup;\r
import org.w3._2001.xmlschema.Restriction;\r
-import org.w3._2001.xmlschema.Schema;\r
import org.w3._2001.xmlschema.SimpleType;\r
-import org.w3._2001.xmlschema.TopLevelAttribute;\r
\r
public class ImporterGenerator extends JavaGenerator{\r
\r
- public ImporterGenerator(Configuration configuration) {\r
- super(configuration);\r
+ public ImporterGenerator(SchemaConverter converter, SchemaConversionBase base) {\r
+ super(converter, base);\r
}\r
\r
- public void createParser(Schema schema,String ontologyUri, String className, SchemaConverter converter) throws IOException {\r
- this.schema = schema;\r
- this.ontologyClassName = className;\r
- this.converter = converter;\r
+ public void createParser() throws IOException {\r
\r
- \r
- String packageParts[] = className.split("\\.");\r
- String name = packageParts[packageParts.length-1];\r
- \r
- \r
- ontShort = name.substring(0, 3).toUpperCase();\r
- ontShort +=".";\r
String parserPackagePostfix = "_elem";\r
String importerClassPostfix = "Importer";\r
String parserClassPostfix = "Parser";\r
if (!importParserDir.exists())\r
importParserDir.mkdirs();\r
\r
- handle(schema);\r
+ base.handle(this);\r
// Create Importer class\r
File importerFile = new File(converter.getParserDir().getAbsolutePath()+"/"+name+importerClassPostfix+".java");\r
PrintWriter mainWriter = createFile(importerFile);\r
mainWriter.flush();\r
mainWriter.close();\r
}\r
-\r
- protected void handle(TopLevelAttribute topLevelAttribute) {\r
+ \r
+ @Override\r
+ public void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
}\r
\r
@Override\r
- protected void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
+ public void handle(SchemaObject parent, NamedGroup attribute) {\r
+ // TODO Auto-generated method stub\r
}\r
\r
@Override\r
- protected void handleComplexType(SchemaObject complexTypeObj) {\r
+ public void handleComplexType(SchemaObject complexTypeObj) {\r
ComplexType topLevelComplexType = complexTypeObj.getComplexType();\r
\r
String name = getName(complexTypeObj);\r
}\r
writers.put(complexTypeObj, fw);\r
\r
- Inheritance inheritance = getInheritance(complexTypeObj);\r
+ Inheritance inheritance = this.base.getInheritance(complexTypeObj);\r
\r
- provider = getIDProvider(topLevelComplexType);\r
- List<IDReference> references = getIDReferences(topLevelComplexType);\r
- UnrecognizedChildElement unknownChildElement = getUnknown(topLevelComplexType);\r
+ provider = this.base.getIDProvider(topLevelComplexType);\r
+ List<IDReference> references = this.base.getIDReferences(topLevelComplexType);\r
+ UnrecognizedChildElement unknownChildElement = this.base.getUnknown(topLevelComplexType);\r
\r
List<String> intrerfaces = new ArrayList<String>();\r
if (references.size() > 0)\r
fw.writer.println(" public " + className + "() {");\r
fw.writer.println(" super();");\r
\r
- handleComplexTypeExtension(complexTypeObj);\r
+ this.base.handleComplexTypeExtension(complexTypeObj);\r
\r
fw.writer.println(" }");\r
\r
}\r
fw.writer.println(" "+getOntologyImport());\r
\r
- handleComplexTypeAttributes(complexTypeObj);\r
- handleExtensionAttributes(complexTypeObj);\r
+ this.base.handleComplexTypeAttributes(complexTypeObj);\r
+ this.base.handleExtensionAttributes(complexTypeObj);\r
\r
fw.writer.println(" }");\r
\r
}\r
\r
@Override\r
- protected void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList) {\r
+ public void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList) {\r
FileWriter fw = getWriter(parent);\r
if (referenceType == RefType.Type) {\r
// create internal class for handling the element and child attachment\r
fw.delayedWriter.println(" }");\r
}\r
\r
+ @Override\r
protected void createPrimitiveIndicator(SchemaObject parent, String refName, String binding) {\r
FileWriter fw = getWriter(parent);\r
fw.writer.println(" addParser(\""+ refName +"\", "+getName(parent) +"_" +refName+".class);");\r
fw.delayedWriter2.println(" }");\r
}\r
\r
+ @Override\r
protected void createElementIndicator(SchemaObject parent, boolean useElementList, String refName, String className, boolean useOriginalList) {\r
FileWriter fw = getWriter(parent);\r
//if (!reference)\r
}\r
\r
@Override\r
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) { \r
+ public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) { \r
// generates overriding method that allows parsing any element\r
FileWriter fw = getWriter(parent);\r
fw.delayedWriter2.println(" @Override");\r
}\r
\r
@Override \r
- protected void handle(SchemaObject parent, Attribute attribute) {\r
+ public void handle(SchemaObject parent, Attribute attribute) {\r
+ if (parent == null)\r
+ return;\r
String name = attribute.getName();\r
QName primitiveType = attribute.getType();\r
SimpleType simpleType = attribute.getSimpleType();\r
attrName = ref.getLocalPart();\r
relationName = ontShort+getName(parent)+"_has"+ref.getLocalPart();\r
\r
- Attribute referred = getRefAttribute(ref);\r
+ Attribute referred = this.base.getRefAttribute(ref);\r
if (referred != null) {\r
primitiveType = referred.getType();\r
simpleType = referred.getSimpleType();\r
if (primitiveType != null) {\r
\r
//String binding = getBindingFromPrimitiveType(primitiveType);\r
- TypeEntry binding = getTypeEntry(primitiveType);\r
+ TypeEntry binding = this.base.getTypeEntry(primitiveType);\r
\r
if (binding != null) {\r
writeAttribute(fw, attrName, relationName, binding, isReference);\r
return;\r
} else {\r
if (simpleType == null) {\r
- SchemaObject simpleTypeObj = simpleTypeName.get(primitiveType.getLocalPart());\r
+ SchemaObject simpleTypeObj = this.base.simpleTypeName.get(primitiveType.getLocalPart());\r
if (simpleTypeObj != null)\r
simpleType = simpleTypeObj.getSimpleType();\r
} \r
if (simpleType != null) {\r
org.w3._2001.xmlschema.List list = simpleType.getList();\r
if (list != null) {\r
- TypeEntry binding = getTypeEntry(new QName(SCHEMA_NS, "string"));\r
+ TypeEntry binding = this.base.getTypeEntry(new QName(SchemaConversionBase.SCHEMA_NS, "string"));\r
writeAttribute(fw, attrName, relationName, binding, isReference);\r
} else {\r
Restriction restriction = simpleType.getRestriction();\r
\r
\r
//String binding = getBindingFromPrimitiveType(base);\r
- TypeEntry binding = getTypeEntry(base);\r
+ TypeEntry binding = this.base.getTypeEntry(base);\r
writeAttribute(fw, attrName, relationName, binding, isReference);\r
}\r
} else {\r
//throw new RuntimeException("Cannot resolve type for Attribute " + attrName + " -> " + primitiveType.getLocalPart());\r
fw.writer.println(" //FIXME: Cannot resolve type for Attribute " + attrName + " Using default type String");\r
//writeAttribute(fw, attrName, relationName, "STRING", isReference);\r
- writeAttribute(fw, attrName, relationName, getTypeEntry("string"), isReference);\r
+ writeAttribute(fw, attrName, relationName, this.base.getTypeEntry("string"), isReference);\r
}\r
}\r
\r
- //private void writeAttribute(FileWriter fw, String attrName, String relationName, String binding, boolean isReference) {\r
private void writeAttribute(FileWriter fw, String attrName, String relationName, TypeEntry binding, boolean isReference) {\r
fw.writer.println(" {");\r
fw.writer.println(" Attribute a = element.getAttribute(\"" +attrName+"\");");\r
}\r
\r
@Override\r
- protected void handleAttributes(SchemaObject simpleTypeObj) {\r
+ public void handleAttributes(SchemaObject simpleTypeObj) {\r
SchemaObject parent = simpleTypeObj.getParent();\r
FileWriter fw = getWriter(parent);\r
\r
\r
\r
//String binding = getBindingFromPrimitiveType(base);\r
- TypeEntry binding = getTypeEntry(base);\r
+ TypeEntry binding = this.base.getTypeEntry(base);\r
fw.writer.println(" @Override");\r
fw.writer.println(" public void configure(WriteGraph graph, ParserElement element, java.lang.String value) throws DatabaseException {");\r
//fw.writer.println(" graph.claimValue(element.getData(),"+getValueGetter(binding)+", Bindings."+binding+");");\r
}\r
\r
@Override\r
- protected void handle(SchemaObject parent, AttributeGroup attribute) {\r
+ public void handle(SchemaObject parent, AttributeGroup attribute) {\r
if (parent != null) {\r
FileWriter fw = getWriter(parent);\r
- NamedAttributeGroup group = getAttributeGroup(attribute.getRef().getLocalPart());\r
+ NamedAttributeGroup group = this.base.getAttributeGroup(attribute.getRef().getLocalPart());\r
fw.writer.println(commentTag+" AttributeGroup " + group.getName());\r
SchemaObject obj = new SchemaObject(parent,attribute);\r
for (Annotated annotated : group.getAttributeOrAttributeGroup()) {\r
}\r
\r
@Override\r
- protected void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
+ public void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
FileWriter fw = getWriter(parent);\r
- QName type = new QName(CONVERSION_NS, composition.getType());\r
- String arrayBinding = getBindingFromPrimitiveType(type);\r
- String javaType = getJavaTypeFromPrimitiveType(type);\r
+ QName type = new QName(SchemaConversionBase.CONVERSION_NS, composition.getType());\r
+ String arrayBinding = this.base.getBindingFromPrimitiveType(type);\r
+ String javaType = this.base.getJavaTypeFromPrimitiveType(type);\r
String name = composition.getName();\r
\r
String relationName;\r
for (org.simantics.xml.sax.configuration.Attribute a : composition.getAttribute()) {\r
Attribute attribute = ((Attribute)attributes.getRight(a));\r
//QName atype = getBaseType(attribute);\r
- QName atype = getPrimitiveType(attribute);\r
+ QName atype = this.base.getPrimitiveType(attribute);\r
String defaultValue = attribute.getDefault();\r
if (defaultValue == null)\r
- defaultValue = getDefaultValue(atype);\r
+ defaultValue = this.base.getDefaultValue(atype);\r
\r
//String binding = getBindingFromPrimitiveType(atype);\r
- TypeEntry binding = getTypeEntry(atype);\r
+ TypeEntry binding = this.base.getTypeEntry(atype);\r
if (i > 0)\r
fw.writer.print(",");\r
if (defaultValue != null)\r
\r
}\r
\r
- protected String getDefaultValue(QName atype) {\r
- Map<String,TypeEntry> types = typeMap.get(atype.getNamespaceURI());\r
- if (types == null)\r
- return null;\r
- TypeEntry entry = types.get(atype.getLocalPart());\r
- if (entry == null)\r
- return null;\r
- return entry.defaultValue;\r
- }\r
+ \r
\r
\r
\r
\r
IDProvider provider;\r
@Override\r
- protected void handleElement(SchemaObject elementObj) {\r
+ public void handleElement(SchemaObject elementObj) {\r
Element element = elementObj.getElement();\r
\r
String name = getName(elementObj);//topLevelElement.getName();\r
writers.put(elementObj, fw);\r
boolean isList = false;\r
\r
- Inheritance inheritance = getInheritance(elementObj); \r
+ Inheritance inheritance = this.base.getInheritance(elementObj); \r
\r
- provider = getIDProvider(element);\r
- List<IDReference> references = getIDReferences(element);\r
- UnrecognizedChildElement unknownChildElement = getUnknown(element);\r
+ provider = this.base.getIDProvider(element);\r
+ List<IDReference> references = this.base.getIDReferences(element);\r
+ UnrecognizedChildElement unknownChildElement = this.base.getUnknown(element);\r
\r
List<String> intrerfaces = new ArrayList<String>();\r
if (references.size() > 0)\r
LocalSimpleType simpleType = element.getSimpleType();\r
\r
if (complexType != null) {\r
- SchemaObject obj = complexTypes.get(complexType);\r
- handleElementComplexTypeAttributes(obj);\r
+ SchemaObject obj = this.base.complexTypes.get(complexType);\r
+ this.base.handleElementComplexTypeAttributes(obj);\r
} \r
fw.writer.println(" }");\r
\r
fw.writer.println(" super();");\r
\r
if (complexType != null) {\r
- SchemaObject obj = complexTypes.get(complexType);\r
- handleComplexTypeExtension(obj);\r
+ SchemaObject obj = this.base.complexTypes.get(complexType);\r
+ this.base.handleComplexTypeExtension(obj);\r
} else if (simpleType != null) {\r
\r
}\r
}\r
\r
@Override\r
- protected String getBaseClass(ObjectType type) {\r
+ public String getBaseClass(ObjectType type) {\r
return "org.simantics.xml.sax.base.XMLElementNamedChildParserBase";\r
}\r
\r
\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
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
return null;\r
}\r
\r
- \r
+ @Override\r
public String getName(SchemaObject obj) {\r
if (obj.getParent() == null) {\r
switch (obj.getType()) {\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, 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
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
} 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
--- /dev/null
+package org.simantics.xml.sax;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+\r
+public interface ManualSchemaFileImport {\r
+\r
+ \r
+ public File getFileForLocation(String location) throws IOException; \r
+}\r
import javax.xml.namespace.QName;\r
\r
import org.simantics.utils.datastructures.BijectionMap;\r
+import org.simantics.xml.sax.SchemaConversionBase.Inheritance;\r
+import org.simantics.xml.sax.SchemaConversionBase.InheritanceType;\r
+import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
import org.simantics.xml.sax.SchemaObject.ObjectType;\r
import org.simantics.xml.sax.configuration.AttributeComposition;\r
-import org.simantics.xml.sax.configuration.Configuration;\r
import org.simantics.xml.sax.configuration.IDReference;\r
import org.w3._2001.xmlschema.Annotated;\r
import org.w3._2001.xmlschema.Attribute;\r
import org.w3._2001.xmlschema.LocalComplexType;\r
import org.w3._2001.xmlschema.LocalSimpleType;\r
import org.w3._2001.xmlschema.NamedAttributeGroup;\r
+import org.w3._2001.xmlschema.NamedGroup;\r
import org.w3._2001.xmlschema.Restriction;\r
import org.w3._2001.xmlschema.Schema;\r
import org.w3._2001.xmlschema.SimpleType;\r
-import org.w3._2001.xmlschema.TopLevelAttribute;\r
\r
-public class OntologyGenerator extends SchemaConversionBase {\r
+//public class OntologyGenerator extends SchemaConversionBase {\r
+public class OntologyGenerator implements SchemaConversionComponent {\r
+ SchemaConversionBase base;\r
\r
- public OntologyGenerator(Configuration configuration) {\r
- super(configuration);\r
+ public OntologyGenerator(SchemaConverter converter, SchemaConversionBase base) {\r
+ this.base = base;\r
+ this.converter = converter;\r
+ this.schema = base.schema;\r
+ this.ontologyUri = base.ontologyURI;\r
+ this.className = base.className; \r
}\r
\r
String ontRoot = "ONT.";\r
\r
PrintWriter writer = null;\r
\r
- \r
- \r
- \r
- \r
- public void createOntology(Schema schema, String ontologyName, String className, SchemaConverter converter) throws FileNotFoundException {\r
- this.schema = schema;\r
- this.converter = converter;\r
- this.ontologyUri = ontologyName;\r
- this.className = className;\r
- \r
-// for (OpenAttrs attrs : schema.getIncludeOrImportOrRedefine()) {\r
-// if (attrs instanceof Annotation) {\r
-// Annotation ann = (Annotation)attrs;\r
-// for (Object o : ann.getAppinfoOrDocumentation()) {\r
-// if (o instanceof Documentation) {\r
-// Documentation doc = (Documentation)o;\r
-// } else if (o instanceof Appinfo) {\r
-// Appinfo info = (Appinfo)o;\r
-// }\r
-// }\r
-// }\r
-// }\r
- \r
- \r
+ public void createOntology() throws FileNotFoundException {\r
StringWriter stringWriter = null;\r
if (converter.getOntologyFile() == null) {\r
stringWriter = new StringWriter();\r
writer = new PrintWriter(converter.getOntologyFile());\r
}\r
\r
- handle(schema);\r
+ handle();\r
\r
writer.flush();\r
writer.close();\r
System.out.println(stringWriter.toString());\r
}\r
\r
- protected void handle(Schema schema) {\r
- String parts[] = ontologyUri.split("/");\r
- String name = parts[parts.length-1];\r
- ontRoot = name.substring(0, Math.min(3, name.length())).toUpperCase();\r
+ protected void handle() {\r
+ ontRoot = converter.shortName;\r
\r
for (String s : converter.getHeader()) {\r
writer.println(commentTag + " " + s); \r
writer.println(commentTag + " Interpreted from schema");\r
writer.println();\r
\r
- super.handle(schema);\r
+ base.handle(this);\r
}\r
\r
protected String getType(QName qtype) {\r
- String ontType = getL0TypeFromPrimitiveType(qtype);\r
+ String ontType = base.getL0TypeFromPrimitiveType(qtype);\r
if (ontType != null)\r
return ontType;\r
- else if (isComplexTypeRef(qtype.getLocalPart()))\r
+ else if (base.isComplexTypeRef(qtype.getLocalPart()))\r
return ontRoot+getComplexTypePrefix()+qtype.getLocalPart();\r
- else if (isSimpleTypeRef(qtype.getLocalPart()))\r
+ else if (base.isSimpleTypeRef(qtype.getLocalPart()))\r
return ontRoot+qtype.getLocalPart();\r
- else if (isElementRef(qtype.getLocalPart()))\r
+ else if (base.isElementRef(qtype.getLocalPart()))\r
return ontRoot+qtype.getLocalPart();\r
else if (qtype.getPrefix() != null && qtype.getPrefix().length() > 0) {\r
return ontRoot+qtype.getPrefix()+qtype.getLocalPart();\r
throw new RuntimeException("Reference to unknown type " + qtype.getLocalPart());\r
}\r
\r
- @Override\r
- protected void handle(TopLevelAttribute topLevelAttribute) {\r
- super.handle(topLevelAttribute);\r
- writer.println();\r
- }\r
- \r
- @Override\r
- protected void handleSimpleType(SchemaObject topLevelSimpleType) {\r
- super.handleSimpleType(topLevelSimpleType);\r
- writer.println();\r
- }\r
- \r
- \r
public String getComplexTypePrefix() {\r
return "ComplexTypes.";\r
}\r
return "AttributeGroups.";\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
- boolean single = true;\r
- for (SchemaElement e : elements) {\r
- if (e.getRestriction().many()) {\r
- single = false;\r
- break;\r
- }\r
+ public void handleChoice(SchemaObject parent, SchemaElement indicator, java.util.List<SchemaElement> elements, String name) {\r
+ boolean single = true;\r
+ for (SchemaElement e : elements) {\r
+ if (e.getRestriction().many()) {\r
+ single = false;\r
+ break;\r
}\r
- String relationName = getName(parent)+".has"+name;\r
- writer.print(relationName);\r
+ }\r
+ String relationName = getName(parent)+".has"+name;\r
+ writer.print(relationName);\r
+ \r
+ List<String> types = new ArrayList<String>();\r
+ for (SchemaElement e : elements) {\r
+ Element localElement = e.getElement();\r
+ QName refType = null;\r
+ String type = null;\r
\r
- List<String> types = new ArrayList<String>();\r
- for (SchemaElement e : elements) {\r
- Element localElement = e.getElement();\r
- QName refType = null;\r
- String type = null;\r
- \r
- if (localElement.getName() != null) {\r
- refType = localElement.getType();\r
- type = getL0TypeFromPrimitiveType(refType); \r
- } else if (localElement.getRef() != null) {\r
- refType = localElement.getRef();\r
- type = getL0TypeFromPrimitiveType(refType);\r
- }\r
- if (type == null) {\r
- SchemaObject obj = getWithName(parent, refType.getLocalPart());\r
- types.add(getName(obj,"has"));\r
- } \r
+ if (localElement.getName() != null) {\r
+ refType = localElement.getType();\r
+ type = base.getL0TypeFromPrimitiveType(refType); \r
+ } else if (localElement.getRef() != null) {\r
+ refType = localElement.getRef();\r
+ type = base.getL0TypeFromPrimitiveType(refType);\r
}\r
- if (types.size() > 0) {\r
- for (String type : types) {\r
- writer.print(" <R " + type);\r
- }\r
- } else {\r
- writer.print(" <R XML.hasElement");\r
+ if (type == null) {\r
+ SchemaObject obj = base.getWithName(parent, refType.getLocalPart());\r
+ types.add(getName(obj,"has"));\r
+ } \r
+ }\r
+ if (types.size() > 0) {\r
+ for (String type : types) {\r
+ writer.print(" <R " + type);\r
}\r
- \r
- writer.println();\r
- \r
- for (SchemaElement e : elements) {\r
- Element localElement = e.getElement();\r
- QName refType = null;\r
- String type = null;\r
- if (localElement.getName() != null) {\r
- refType = localElement.getType();\r
- type = getType(refType); \r
- } else if (localElement.getRef() != null) {\r
- refType = localElement.getRef();\r
- type = getType(refType);\r
- }\r
- if (type != null) {\r
- writer.println(" --> " + type);\r
- }\r
+ } else {\r
+ writer.print(" <R XML.hasElement");\r
+ }\r
+ \r
+ writer.println();\r
+ \r
+ for (SchemaElement e : elements) {\r
+ Element localElement = e.getElement();\r
+ QName refType = null;\r
+ String type = null;\r
+ if (localElement.getName() != null) {\r
+ refType = localElement.getType();\r
+ type = getType(refType); \r
+ } else if (localElement.getRef() != null) {\r
+ refType = localElement.getRef();\r
+ type = getType(refType);\r
}\r
- if (!single) {\r
- writer.println(ontRoot+name+ "List <T XML.ElementList");\r
- if (types.size() == 0) {\r
- writer.println(relationName+ "List <R XML.hasElementList : L0.FunctionalRelation");\r
- } else {\r
- writer.print(relationName+ "List");\r
- for (String type : types) {\r
- writer.print(" <R " + type+"List");\r
- }\r
- writer.println(" : L0.FunctionalRelation");\r
+ if (type != null) {\r
+ writer.println(" --> " + type);\r
+ }\r
+ }\r
+ if (!single) {\r
+ writer.println(ontRoot+name+ "List <T XML.ElementList");\r
+ if (types.size() == 0) {\r
+ writer.println(relationName+ "List <R XML.hasElementList : L0.FunctionalRelation");\r
+ } else {\r
+ writer.print(relationName+ "List");\r
+ for (String type : types) {\r
+ writer.print(" <R " + type+"List");\r
}\r
- writer.println(" --> " + ontRoot+name+"List");\r
+ writer.println(" : L0.FunctionalRelation");\r
}\r
+ writer.println(" --> " + ontRoot+name+"List");\r
}\r
- \r
- }\r
+ };\r
\r
\r
\r
@Override\r
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType) {\r
+ public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType) {\r
if (refType != refType.Element) {\r
QName referenceType = null;\r
if (refType == RefType.Type) {\r
referenceType = element.getElement().getType();\r
//refName = element.getElement().getName()\r
- SchemaObject eObj = elements.get(element.getElement());\r
+ SchemaObject eObj = base.elements.get(element.getElement());\r
if (refName == null)\r
refName = eObj.getName();\r
} else {\r
if (refName == null)\r
refName = referenceType.getLocalPart();\r
}\r
- String type = getL0TypeFromPrimitiveType(referenceType);\r
+ String type = base.getL0TypeFromPrimitiveType(referenceType);\r
SchemaObject obj = null;\r
if (type == null) {\r
- obj = getWithName(parent, referenceType.getLocalPart());\r
+ obj = base.getWithName(parent, referenceType.getLocalPart());\r
\r
writer.println(getName(parent)+".has"+refName + " <R " + getName(obj,"has"));\r
writer.println(" --> " + getName(obj));\r
writer.println(" --> " + getType(referenceType));\r
}\r
\r
- if (useElementList(parent, indicator,element, refType == RefType.Reference, refName, referenceType)) {\r
+ if (base.useElementList(parent, indicator,element, refType == RefType.Reference, refName, referenceType)) {\r
\r
if (type == null) {\r
writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
}\r
} else {\r
Element attrs = element.getElement();\r
- SchemaObject obj = getWithObj(parent, attrs);\r
+ SchemaObject obj = base.getWithObj(parent, attrs);\r
if (refName == null)\r
refName = obj.getName();\r
\r
writer.println(getName(parent)+".has"+refName + " <R " + getName(obj,"has"));\r
writer.println(" --> " + getName(obj));\r
- if (useElementList(parent, indicator,element, false, refName, new QName(obj.getName()))) {\r
+ if (base.useElementList(parent, indicator,element, false, refName, new QName(obj.getName()))) {\r
writer.println(getName(parent)+"."+refName + "List <T XML.ElementList");\r
writer.println(getName(parent)+".has"+refName + "List <R " + getName(obj,"has")+"List : L0.FunctionalRelation");\r
}\r
}\r
\r
@Override\r
- protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) {\r
+ public void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) {\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public void handle(SchemaObject parent, NamedGroup attribute) {\r
+ // TODO Auto-generated method stub\r
\r
}\r
\r
@Override\r
- protected void handle(SchemaObject parent, Attribute attribute) {\r
+ public void handle(SchemaObject parent, Attribute attribute) {\r
String name = attribute.getName();\r
QName primitiveType = attribute.getType();\r
LocalSimpleType simpleType = attribute.getSimpleType();\r
boolean id = false;\r
String ontType = null;\r
if (primitiveType != null) {\r
- ontType = getL0TypeFromPrimitiveType(primitiveType);\r
+ ontType = base.getL0TypeFromPrimitiveType(primitiveType);\r
if (ontType != null) {\r
- id = getTypeEntry(primitiveType).id;\r
+ id = base.getTypeEntry(primitiveType).id;\r
if (id)\r
relationType = "XML.hasID";\r
} else {\r
QName base = restriction.getBase();\r
\r
\r
- ontType = getL0TypeFromPrimitiveType(base);\r
+ ontType = this.base.getL0TypeFromPrimitiveType(base);\r
\r
// for (Object facetWrap : restriction.getFacets()) {\r
// JAXBElement<?> element = (JAXBElement<?>)facetWrap;\r
}\r
\r
@Override\r
- protected void handleAttributes(SchemaObject simpleTypeObj) {\r
+ public void handleAttributes(SchemaObject simpleTypeObj) {\r
// SchemaObject parent = simpleTypeObj.getParent();\r
// SimpleType simpleType = simpleTypeObj.getSimpleType();\r
// Restriction restriction = simpleType.getRestriction();\r
}\r
\r
@Override\r
- protected void handle(SchemaObject parent, AttributeGroup attributeGroup) {\r
+ public void handle(SchemaObject parent, AttributeGroup attributeGroup) {\r
if (parent == null) {\r
NamedAttributeGroup group = (NamedAttributeGroup)attributeGroup;\r
writer.println(ontRoot+getAttributeGroupPrefix()+group.getName()+ " <T XML.AttributeGroup");\r
//handle(getAttributeGroupPrefix()+group.getName(),(Attribute)annotated);\r
handle(obj,(Attribute)annotated);\r
} else if (annotated instanceof AttributeGroup) {\r
- throw new RuntimeException("Cannot handle nested attribute groups");\r
+ handle(obj,(AttributeGroup)annotated);\r
+ //throw new RuntimeException("Cannot handle nested attribute groups");\r
}\r
}\r
} else {\r
}\r
\r
@Override\r
- protected void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
+ public void handleAttributeComposition(SchemaObject parent, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
Attribute compositionAttribute = new Attribute();\r
compositionAttribute.setName(composition.getName());\r
- QName type = new QName(CONVERSION_NS, composition.getType());\r
+ QName type = new QName(SchemaConversionBase.CONVERSION_NS, composition.getType());\r
compositionAttribute.setType(type);\r
handle(parent, compositionAttribute);\r
}\r
\r
@Override\r
- protected void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
+ public void handleSimpleType(SchemaObject parent, SchemaObject simpleTypeObj) {\r
SimpleType simpleType = simpleTypeObj.getSimpleType();\r
String name = simpleType.getName();\r
\r
relationName = getName(parent)+".has"+name;\r
writer.println(relationName+ " <R XML.hasAttribute : L0.FunctionalRelation");\r
\r
- String ontType = getL0Type(new QName(SCHEMA_NS, "string"));\r
+ String ontType = base.getL0Type(new QName(SchemaConversionBase.SCHEMA_NS, "string"));\r
writer.println(" --> " + ontType);\r
} else {\r
- Restriction restriction = simpleType.getRestriction();\r
- if (restriction == null || simpleType.getUnion() != null || simpleType.getId() != null)\r
- throw new RuntimeException(simpleType.getName() + " restriction error");\r
- QName base = restriction.getBase();\r
- \r
String relationName = ontRoot+"has"+name;\r
if (parent != null)\r
relationName = getName(parent)+".has"+name;\r
\r
writer.println(relationName+ " <R XML.hasAttribute : L0.FunctionalRelation");\r
\r
- String ontType = getL0Type(base);\r
- writer.println(" --> " + ontType);\r
+ QName base = this.base.getSimpleTypeBase(simpleType);\r
+ Inheritance inheritance = new Inheritance("");\r
+ this.base.getAtomicTypeInheritance(base, inheritance);\r
+ if (inheritance.atomicType == null)\r
+ throw new RuntimeException("Could not locate atomic type for SimpleType " + simpleType.getName());\r
+ writer.println(" --> " + inheritance.atomicType.l0Type);\r
+ \r
+// Restriction restriction = simpleType.getRestriction();\r
+// if (restriction != null) {\r
+// \r
+// QName base = restriction.getBase();\r
+// String ontType = getL0Type(base);\r
+// writer.println(" --> " + ontType);\r
+// } else if (simpleType.getId() != null) {\r
+// throw new RuntimeException(simpleType.getName() + " restriction error");\r
+// } else if (simpleType.getUnion() != null) {\r
+// Union union = simpleType.getUnion();\r
+// String ontType = null;\r
+// if (union.getMemberTypes().size() > 0) {\r
+// for (QName type : union.getMemberTypes()) {\r
+// String sType = null;\r
+// TypeEntry entry = getTypeEntry(type);\r
+// if (entry == null) {\r
+// SchemaObject obj = simpleTypeName.get(type.getLocalPart());\r
+// Inheritance inheritance = new Inheritance("");\r
+// getAtomicTypeInheritance(type, obj, inheritance);\r
+// sType = inheritance.atomicType.l0Type;\r
+// } else {\r
+// sType = entry.l0Type;\r
+// }\r
+// if (ontType == null)\r
+// ontType = sType;\r
+// else if (!ontType.equals(sType))\r
+// throw new RuntimeException(simpleType.getName() + " union has incompatible member types");\r
+// }\r
+// } else {\r
+// if (union.getSimpleType().size() == 0)\r
+// throw new RuntimeException(simpleType.getName() + " union error");\r
+// for (SimpleType s : union.getSimpleType()) {\r
+// if (restriction == null)\r
+// restriction = s.getRestriction();\r
+// else {\r
+// Restriction r = s.getRestriction();\r
+// if (!r.getBase().equals(restriction.getBase()))\r
+// throw new RuntimeException(simpleType.getName() + " union has incompatible restriction bases");\r
+// }\r
+// }\r
+// QName base = restriction.getBase();\r
+// ontType = getL0Type(base);\r
+// }\r
+// writer.println(" --> " + ontType);\r
+// } else {\r
+// throw new RuntimeException(simpleType.getName() + " restriction error");\r
+// }\r
+ \r
}\r
}\r
\r
@Override\r
- protected void handleComplexType(SchemaObject topLevelComplexType) {\r
+ public void handleComplexType(SchemaObject topLevelComplexType) {\r
String name = getName(topLevelComplexType);\r
// if (topLevelComplexType.getName().equals("Reference"))\r
// System.out.println();\r
// if (base != null) {\r
// baseType = getType(base);\r
// }\r
- Inheritance inheritance = getInheritance(topLevelComplexType);\r
+ Inheritance inheritance = base.getInheritance(topLevelComplexType);\r
\r
// writer.println(name+ " <T "+baseType);\r
\r
}\r
// if (!baseType.equals(inheritance.baseClass))\r
// System.out.println();\r
- super.handleComplexType(topLevelComplexType);\r
+ //super.handleComplexType(topLevelComplexType);\r
+ base.handleComplexTypeAttributes(topLevelComplexType);\r
+ base.handleComplexTypeExtension(topLevelComplexType);\r
+ base.handleExtensionAttributes(topLevelComplexType);\r
writer.println();\r
}\r
\r
@Override\r
- protected void handleElement(SchemaObject elementObj) {\r
+ public void handleElement(SchemaObject elementObj) {\r
Element element = elementObj.getElement();\r
String name = getName(elementObj);//element.getName();\r
\r
if (element.getType() != null) {\r
types.add(getType(element.getType()));\r
}\r
- QName base = getElementBase(element);\r
+ QName base = this.base.getElementBase(element);\r
if (base != null) {\r
- if (base.getNamespaceURI().equals(SCHEMA_NS)) {\r
- String l0Type = getL0Type(base);\r
+ if (base.getNamespaceURI().equals(SchemaConversionBase.SCHEMA_NS)) {\r
+ String l0Type = this.base.getL0Type(base);\r
if (l0Type == null)\r
throw new RuntimeException("Cannot get L0 type for " + base.getLocalPart());\r
types.add(l0Type);\r
- } else if (isElementRef(base.getLocalPart()))\r
+ } else if (this.base.isElementRef(base.getLocalPart()))\r
types.add(ontRoot+base.getLocalPart());\r
else\r
types.add(ontRoot+getComplexTypePrefix()+base.getLocalPart());\r
}\r
QName substitution = element.getSubstitutionGroup();\r
if (substitution != null) {\r
- if (isElementRef(substitution.getLocalPart()))\r
+ if (this.base.isElementRef(substitution.getLocalPart()))\r
types.add(ontRoot+substitution.getLocalPart());\r
else\r
types.add( ontRoot+getComplexTypePrefix()+substitution.getLocalPart());\r
LocalSimpleType simpleType = element.getSimpleType();\r
\r
if (complexType != null) {\r
- SchemaObject complexTypeObj = complexTypes.get(complexType);\r
- handleElementComplexTypeAttributes(complexTypeObj);\r
- handleComplexTypeExtension(complexTypeObj);\r
+ SchemaObject complexTypeObj = this.base.complexTypes.get(complexType);\r
+ this.base.handleElementComplexTypeAttributes(complexTypeObj);\r
+ this.base.handleComplexTypeExtension(complexTypeObj);\r
} else if (simpleType != null) {\r
- SchemaObject simpleTypeObj = simpleTypes.get(simpleType);\r
- handleElementSimpleTypeAttributes(simpleTypeObj);\r
+ SchemaObject simpleTypeObj = this.base.simpleTypes.get(simpleType);\r
+ this.base.handleElementSimpleTypeAttributes(simpleTypeObj);\r
}\r
\r
- List<IDReference> references = getIDReferences(element);\r
+ List<IDReference> references = this.base.getIDReferences(element);\r
\r
for (IDReference ref : references) {\r
writer.println(name+"."+ref.getReference().getName()+ " <R XML.hasReference");\r
}\r
\r
@Override\r
- protected String getBaseClass(ObjectType type) {\r
+ public String getBaseClass(ObjectType type) {\r
if (type == ObjectType.ELEMENT)\r
return "XML.Element";\r
if (type == ObjectType.COMPLEX_TYPE)\r
throw new RuntimeException("ObjectType " + type + " has no base class");\r
}\r
\r
+ @Override\r
public String getName(SchemaObject obj) {\r
if (obj.getParent() == null) {\r
switch (obj.getType()) {\r
import org.w3._2001.xmlschema.Element;\r
import org.w3._2001.xmlschema.ExplicitGroup;\r
import org.w3._2001.xmlschema.ExtensionType;\r
-import org.w3._2001.xmlschema.LocalComplexType;\r
+import org.w3._2001.xmlschema.GroupRef;\r
import org.w3._2001.xmlschema.LocalElement;\r
import org.w3._2001.xmlschema.NamedAttributeGroup;\r
+import org.w3._2001.xmlschema.NamedGroup;\r
import org.w3._2001.xmlschema.OpenAttrs;\r
+import org.w3._2001.xmlschema.RealGroup;\r
import org.w3._2001.xmlschema.Restriction;\r
import org.w3._2001.xmlschema.Schema;\r
import org.w3._2001.xmlschema.SimpleContent;\r
import org.w3._2001.xmlschema.TopLevelComplexType;\r
import org.w3._2001.xmlschema.TopLevelElement;\r
import org.w3._2001.xmlschema.TopLevelSimpleType;\r
+import org.w3._2001.xmlschema.Union;\r
\r
-public abstract class SchemaConversionBase {\r
+public final class SchemaConversionBase {\r
\r
protected Schema schema;\r
+ protected SchemaConverter converter;\r
+ protected SchemaConversionComponent component;\r
protected Configuration configuration;\r
\r
- protected static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";\r
- protected static final String CONVERSION_NS = "http://www.simantics.org/Layer0";\r
+ public static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";\r
+ public static final String CONVERSION_NS = "http://www.simantics.org/Layer0";\r
\r
protected Map<String,Map<String,TypeEntry>> typeMap;\r
\r
- public SchemaConversionBase(Configuration configuration) {\r
- this.configuration = configuration;\r
- typeMap = new HashMap<String, Map<String,TypeEntry>>();\r
+ protected String ontologyURI;\r
+ protected String className;\r
+ \r
+ public SchemaConversionBase(SchemaConverter converter, String ontologyUri, String className) {\r
+ this.converter = converter;\r
+ this.configuration = converter.getConfiguration();\r
+ this.ontologyURI = ontologyUri;\r
+ this.className = className;\r
\r
+ initTypes();\r
+ }\r
+ \r
+ protected void initTypes() {\r
+ typeMap = new HashMap<String, Map<String,TypeEntry>>();\r
Map<String,TypeEntry> schemaTypes = new HashMap<String, SchemaConversionBase.TypeEntry>();\r
typeMap.put(SCHEMA_NS, schemaTypes);\r
Map<String,TypeEntry> l0Types = new HashMap<String, SchemaConversionBase.TypeEntry>();\r
schemaTypes.put("token", new TypeEntry("L0.String", "Bindings.STRING", "java.lang.String", "","","","",""));\r
schemaTypes.put("ID", new TypeEntry("L0.String", "Bindings.STRING", "java.lang.String", "","","","","",true));\r
schemaTypes.put("IDREF", new TypeEntry("L0.String", "Bindings.STRING", "java.lang.String", "","","","",""));\r
+ schemaTypes.put("Name", new TypeEntry("L0.String", "Bindings.STRING", "java.lang.String", "","","","",""));\r
+ schemaTypes.put("NCName", new TypeEntry("L0.String", "Bindings.STRING", "java.lang.String", "","","","",""));\r
schemaTypes.put("date", new TypeEntry("XML.Date", "org.simantics.xml.sax.base.datatypes.literal.Date.BINDING", "org.simantics.xml.sax.base.datatypes.literal.Date", "","org.simantics.xml.sax.base.datatypes.literal.Date.parseDate(",")","(",").toString()"));\r
schemaTypes.put("time", new TypeEntry("XML.Time", "org.simantics.xml.sax.base.datatypes.literal.Time.BINDING", "org.simantics.xml.sax.base.datatypes.literal.Time", "","org.simantics.xml.sax.base.datatypes.literal.Time.parseTime(",")","(",").toString()"));\r
schemaTypes.put("dateTime", new TypeEntry("XML.DateTime", "org.simantics.xml.sax.base.datatypes.literal.DateTime.BINDING", "org.simantics.xml.sax.base.datatypes.literal.DateTime", "","org.simantics.xml.sax.base.datatypes.literal.DateTime.parseDateTime(",")","(",").toString()"));\r
schemaTypes.put("unsignedLong", new TypeEntry("L0.Long", "Bindings.LONG", "long", "0","java.lang.Long.parseLong(",")","java.lang.Long.toString(",")"));\r
schemaTypes.put("base64Binary", new TypeEntry("L0.ByteArray", "Bindings.BYTE_ARRAY", "byte[]", "new byte[0]","",".getBytes(org.simantics.databoard.util.binary.UTF8.CHARSET)","new java.lang.String(",", org.simantics.databoard.util.binary.UTF8.CHARSET)"));\r
\r
- \r
- \r
l0Types.put("doubleArray", new TypeEntry("L0.DoubleArray", "Bindings.DOUBLE_ARRAY", "double[]", null,null,null,"java.lang.Double.toString(",")"));\r
l0Types.put("stringArray", new TypeEntry("L0.StringArray", "Bindings.STRING_ARRAY", "string[]", null,null,null,"",""));\r
}\r
\r
- \r
protected TypeEntry getTypeEntry(QName type) {\r
Map<String,TypeEntry> types = typeMap.get(type.getNamespaceURI());\r
if (types == null)\r
}\r
\r
\r
- protected void handle(Schema schema) { \r
+ public void init(Schema schema) { \r
this.schema = schema;\r
- preload();\r
\r
+ preload();\r
+ }\r
+ \r
+ public void handle(SchemaConversionComponent component) {\r
+ this.component = component;\r
for (OpenAttrs attrs : schema.getSimpleTypeOrComplexTypeOrGroup()) {\r
if (attrs instanceof TopLevelAttribute) {\r
handle((TopLevelAttribute)attrs);\r
handleSimpleType(simpleTypes.get(attrs));\r
} else if (attrs instanceof NamedAttributeGroup) {\r
handle((NamedAttributeGroup)attrs);\r
+ } else if (attrs instanceof NamedGroup) {\r
+ handle((NamedGroup)attrs);\r
} else {\r
System.out.println(attrs.getClass().getName());\r
}\r
}\r
}\r
\r
- protected Map<String,SchemaObject> elementName = new HashMap<String, SchemaObject>();\r
- protected Map<String,SchemaObject> complexTypeName = new HashMap<String, SchemaObject>();\r
- protected Map<String,SchemaObject> simpleTypeName = new HashMap<String, SchemaObject>();\r
- protected Map<Element,SchemaObject> elements = new HashMap<Element, SchemaObject>();\r
- protected Map<ComplexType,SchemaObject> complexTypes = new HashMap<ComplexType, SchemaObject>();\r
- protected Map<SimpleType,SchemaObject> simpleTypes = new HashMap<SimpleType, SchemaObject>();\r
+ protected Map<String,SchemaObject> elementName = new HashMap<>();\r
+ protected Map<String,SchemaObject> complexTypeName = new HashMap<>();\r
+ protected Map<String,SchemaObject> simpleTypeName = new HashMap<>();\r
+ protected Map<String,SchemaObject> modelGroupName = new HashMap<>();\r
+ protected Map<Element,SchemaObject> elements = new HashMap<>();\r
+ protected Map<ComplexType,SchemaObject> complexTypes = new HashMap<>();\r
+ protected Map<SimpleType,SchemaObject> simpleTypes = new HashMap<>();\r
+ protected Map<NamedGroup,SchemaObject> modelGroups = new HashMap<>();\r
\r
\r
protected SchemaObject getWithName(SchemaObject referrer, String name) {\r
return obj;\r
}\r
\r
+ protected SchemaObject getWithName(String name) {\r
+ SchemaObject obj = elementName.get(name);\r
+ if (obj == null)\r
+ obj = complexTypeName.get(name);\r
+ if (obj == null)\r
+ obj = simpleTypeName.get(name);\r
+ if (obj == null) {\r
+ throw new RuntimeException("Cannot locate referred type " + name);\r
+ }\r
+ return obj;\r
+ }\r
+ \r
protected SchemaObject getWithObj(SchemaObject referrer, OpenAttrs attrs) {\r
SchemaObject obj = null;\r
if (attrs instanceof Element)\r
SimpleType simpleType = (SimpleType)attrs;\r
SchemaObject obj = new SchemaObject(simpleType);\r
stack.push(obj);\r
+ } else if (attrs instanceof Attribute) {\r
+ // Attributes are not cached\r
+ } else if (attrs instanceof AttributeGroup) {\r
+ // Attribute groups are not cached\r
+ } else if (attrs instanceof NamedGroup) {\r
+ NamedGroup group = (NamedGroup)attrs;\r
+ SchemaObject obj = new SchemaObject(group);\r
+ stack.push(obj);\r
+ } else {\r
+ System.out.println(attrs.getClass().getName());\r
}\r
}\r
\r
while (!stack.isEmpty()) {\r
SchemaObject object = stack.pop();\r
- if (object.getType() == ObjectType.COMPLEX_TYPE) {\r
+ switch (object.getType()) {\r
+ case COMPLEX_TYPE:{\r
ComplexType ct = object.getComplexType();\r
if (ct.getName() != null && ct.getName().length() > 0 && ct instanceof TopLevelComplexType)\r
complexTypeName.put(ct.getName(), object);\r
throw new RuntimeException("Groups not supported");\r
}\r
}\r
- } else if (object.getType() == ObjectType.ELEMENT) {\r
+ break;\r
+ } \r
+ case ELEMENT:{\r
Element e = object.getElement();\r
if (e instanceof TopLevelElement)\r
elementName.put(e.getName(), object);\r
stack.push(new SchemaObject(object,e.getComplexType()));\r
if (e.getSimpleType() != null)\r
stack.push(new SchemaObject(object,e.getSimpleType()));\r
- } else if (object.getType() == ObjectType.SIMPLE_TYPE) {\r
+ break;\r
+ } \r
+ case SIMPLE_TYPE:{\r
SimpleType e = object.getSimpleType();\r
if (e instanceof TopLevelSimpleType)\r
simpleTypeName.put(e.getName(), object);\r
simpleTypes.put(e, object);\r
+ break;\r
+ } \r
+ case MODEL_GROUP:{\r
+ NamedGroup e = object.getModelGroup();\r
+ modelGroupName.put(e.getName(), object);\r
+ modelGroups.put(e, object);\r
+ break;\r
}\r
- }\r
+ }\r
+ } // while\r
}\r
\r
private void preload(SchemaObject parent,ExplicitGroup eg, Deque<SchemaObject> stack) {\r
SchemaObject obj = new SchemaObject(parent,(Element)elemValue);\r
obj.setRename(getRename((Element)elemValue));\r
stack.add(obj);\r
- } else if (elemValue instanceof All) {\r
- preload(parent,(All)elemValue, stack);\r
} else if (elemValue instanceof ExplicitGroup) {\r
preload(parent,(ExplicitGroup)elemValue, stack);\r
+ } else if (elemValue instanceof RealGroup) {\r
+ preload(parent,(RealGroup)elemValue, stack);\r
} else {\r
throw new RuntimeException("Unknown ExplicitGroup element " + elemValue.getClass().getName());\r
}\r
}\r
}\r
\r
+ private void preload(SchemaObject parent, RealGroup eg, Deque<SchemaObject> stack) {\r
+ System.out.println(eg); \r
+ if (eg instanceof NamedGroup) {\r
+ SchemaObject obj = new SchemaObject(parent,(NamedGroup)eg);\r
+ stack.add(obj);\r
+ }\r
+ }\r
+\r
+ \r
protected void handle(TopLevelAttribute topLevelAttribute) {\r
handle(null, topLevelAttribute);\r
}\r
handle(null, namedAttributeGroup);\r
}\r
\r
+ protected void handle(NamedGroup namedAttributeGroup){\r
+ handle(null, namedAttributeGroup);\r
+ }\r
+ \r
protected QName getComplexTypeBase(ComplexType complexType) {\r
if (complexType == null)\r
return null;\r
}\r
\r
protected QName getSimpleTypeBase(SimpleType simpleType) {\r
- if (simpleType == null)\r
- return null;\r
- return simpleType.getRestriction().getBase();\r
+// if (simpleType == null)\r
+// return null;\r
+// return simpleType.getRestriction().getBase();\r
+ \r
+ Restriction restriction = simpleType.getRestriction();\r
+ if (restriction != null) {\r
+ QName base = restriction.getBase();\r
+ return base;\r
+ } else if (simpleType.getId() != null) {\r
+ throw new RuntimeException(simpleType.getName() + " restriction error");\r
+ } else if (simpleType.getUnion() != null) {\r
+ Union union = simpleType.getUnion();\r
+ if (union.getMemberTypes().size() > 0) {\r
+ QName base = null;\r
+ for (QName type : union.getMemberTypes()) {\r
+ QName sType = null;\r
+ TypeEntry entry = getTypeEntry(type);\r
+ if (entry == null) {\r
+ SchemaObject obj = simpleTypeName.get(type.getLocalPart());\r
+ if (obj == null)\r
+ throw new RuntimeException(simpleType.getName() + " union has unresolved reference " + type.getLocalPart());\r
+ sType = getSimpleTypeBase(obj.getSimpleType());\r
+ } else {\r
+ sType = type;\r
+ }\r
+ if (base == null)\r
+ base = sType;\r
+ else if (!base.equals(sType)) {\r
+ //FIXME : throw new RuntimeException(simpleType.getName() + " union has incompatible member types");\r
+ // fall back to string. \r
+ base = new QName(SCHEMA_NS, "string");\r
+ \r
+ }\r
+ }\r
+ return base;\r
+ } else {\r
+ if (union.getSimpleType().size() == 0)\r
+ throw new RuntimeException(simpleType.getName() + " union error");\r
+ for (SimpleType s : union.getSimpleType()) {\r
+ if (restriction == null)\r
+ restriction = s.getRestriction();\r
+ else {\r
+ Restriction r = s.getRestriction();\r
+ if (!r.getBase().equals(restriction.getBase()))\r
+ throw new RuntimeException(simpleType.getName() + " union has incompatible restriction bases");\r
+ }\r
+ }\r
+ QName base = restriction.getBase();\r
+ return base;\r
+ }\r
+ } else if (simpleType.getList() != null) {\r
+ // FIXME: callers cannot get the information that we have a list.\r
+ org.w3._2001.xmlschema.List list = simpleType.getList();\r
+ return list.getItemType();\r
+ } else {\r
+ throw new RuntimeException(simpleType.getName() + " restriction error");\r
+ }\r
}\r
\r
protected QName getElementBase(Element element) {\r
}\r
}\r
\r
- protected abstract void handleAttributes(SchemaObject simpleTypeObj);\r
+ protected void handleAttributes(SchemaObject simpleTypeObj) {\r
+ component.handleAttributes(simpleTypeObj);\r
+ }\r
\r
protected void handleExtensionAttributes(SchemaObject complexType) {\r
ComplexContent complexContent = complexType.getComplexType().getComplexContent();\r
return null;\r
}\r
\r
- protected abstract void handleAttributeComposition(SchemaObject obj, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes);\r
+ //protected abstract void handleAttributeComposition(SchemaObject obj, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes);\r
+ protected void handleAttributeComposition(SchemaObject obj, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes) {\r
+ component.handleAttributeComposition(obj, composition, attributes);\r
+ }\r
\r
\r
\r
\r
protected void handleComplexType(SchemaObject complexType) {\r
- handleComplexTypeAttributes(complexType);\r
- handleComplexTypeExtension(complexType);\r
- handleExtensionAttributes(complexType);\r
+// handleComplexTypeAttributes(complexType);\r
+// handleComplexTypeExtension(complexType);\r
+// handleExtensionAttributes(complexType);\r
+ component.handleComplexType(complexType);\r
+ }\r
+ \r
+ protected void handleElement(SchemaObject topLevelElement) {\r
+// LocalComplexType complexType = topLevelElement.getElement().getComplexType();\r
+// \r
+// if (complexType != null) {\r
+// SchemaObject complextTypeObj = complexTypes.get(complexType);\r
+// handleElementComplexTypeAttributes(complextTypeObj);\r
+// handleComplexTypeExtension(complextTypeObj);\r
+// } \r
+ component.handleElement(topLevelElement);\r
}\r
\r
protected enum RefType{Element,Reference,Type};\r
\r
- protected abstract void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType);\r
- protected abstract void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any);\r
- protected abstract void handle(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements);\r
+ protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType) {\r
+ component.handleIndicator(parent, indicator, element, refName, refType);\r
+ }\r
+ protected void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any) {\r
+ component.handleIndicator(parent, indicator, any);\r
+ }\r
+ protected void handle(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements) {\r
+ //component.handle(parent, indicator, 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
+ component.handleChoice(parent, indicator, elements, name);\r
+ }\r
+ }\r
\r
protected void handle(SchemaObject parent, ExplicitGroup eg, SchemaElement.ElementType indicator) {\r
handle(parent, new SchemaElement(eg, indicator));\r
List<SchemaElement> sequences = new ArrayList<SchemaElement>();\r
List<SchemaElement> alls = new ArrayList<SchemaElement>();\r
List<SchemaElement> anys = new ArrayList<SchemaElement>();\r
+ List<SchemaElement> groups = new ArrayList<SchemaElement>();\r
\r
for (Object o : indicator.getGroup().getParticle()) {\r
if (o instanceof JAXBElement<?>) {\r
} else if ("sequence".equals(qname.getLocalPart())) {\r
sequences.add(new SchemaElement(indicator,(ExplicitGroup)elemValue, ElementType.SEQUENCE));\r
}\r
+ } else if (elemValue instanceof RealGroup) {\r
+ if (elemValue instanceof GroupRef) {\r
+ groups.add(new SchemaElement(indicator,(GroupRef)elemValue, ElementType.GROUP_REF));\r
+ } else if (elemValue instanceof NamedGroup) {\r
+ groups.add(new SchemaElement(indicator,(NamedGroup)elemValue, ElementType.NAMED_GROUP));\r
+ } else {\r
+ throw new RuntimeException("Unknown ExplicitGroup element " + elemValue.getClass().getName());\r
+ }\r
} else {\r
throw new RuntimeException("Unknown ExplicitGroup element " + elemValue.getClass().getName());\r
}\r
}\r
}\r
\r
- if (elements.size() == 0 && choices.size() == 0 && sequences.size() == 0 && alls.size() == 0 && anys.size() == 0) {\r
+ if (elements.size() == 0 && choices.size() == 0 && sequences.size() == 0 && alls.size() == 0 && anys.size() == 0 && groups.size() == 0) {\r
return;\r
}\r
\r
for (SchemaElement c : alls) {\r
handle(parent, c);\r
}\r
+ \r
+ for (SchemaElement c : groups) {\r
+ handle(parent, c);\r
+ }\r
handle(parent, indicator, elements);\r
for (SchemaElement a : anys) {\r
handleIndicator(parent, indicator, a);\r
for (SchemaElement a : anys) {\r
handleIndicator(parent, indicator, a);\r
}\r
+ for (SchemaElement c : groups) {\r
+ handle(parent, c);\r
+ }\r
}\r
} else {\r
- if (sequences.size() > 0 || choices.size() > 0 || alls.size() > 0) {\r
+ if (sequences.size() > 0 || choices.size() > 0 || alls.size() > 0 || groups.size() > 0) {\r
throw new RuntimeException("Cannot handle Sequence with inner ExplicitGroups");\r
}\r
handle(parent, indicator, elements);\r
\r
} else if (indicator.getType() == SchemaElement.ElementType.CHOICE){\r
if (indicator.getRestriction().single()) {\r
- if (sequences.size()> 0 || choices.size() > 0 || alls.size() > 0 || anys.size() > 0) {\r
+ if (sequences.size()> 0 || choices.size() > 0 || alls.size() > 0 || anys.size() > 0 || groups.size() > 0) {\r
throw new RuntimeException("Cannot handle Choice that contains something else than Elements");\r
}\r
handle(parent, indicator, elements);\r
\r
} else {\r
- if (sequences.size() > 0 || choices.size() > 0) {\r
+ if (sequences.size() > 0 || choices.size() > 0 || alls.size() > 0 || groups.size() > 0) {\r
throw new RuntimeException("Cannot handle Choice with inner ExplicitGroups");\r
}\r
handle(parent, indicator, elements);\r
}\r
}\r
} else if (indicator.getType() == ElementType.ALL) {\r
- if (sequences.size()> 0 || choices.size() > 0 || alls.size() > 0 || anys.size() > 0) {\r
+ if (sequences.size()> 0 || choices.size() > 0 || alls.size() > 0 || anys.size() > 0 || groups.size() > 0) {\r
throw new RuntimeException("Cannot handle All that contains something else than Elements");\r
}\r
if (!indicator.getRestriction().single()) {\r
}\r
return name;\r
}\r
+ \r
+ protected void handle(SchemaObject parent, Attribute attribute) {\r
+ component.handle(parent, attribute);\r
+ }\r
+ protected void handle(SchemaObject parent, AttributeGroup attribute) {\r
+ component.handle(parent, attribute);\r
+ }\r
+ protected void handle(SchemaObject parent, NamedGroup attribute){\r
+ component.handle(parent, attribute);\r
+ };\r
\r
- \r
- protected abstract void handle(SchemaObject parent, Attribute attribute) ;\r
- protected abstract void handle(SchemaObject parent, AttributeGroup attribute) ;\r
- \r
- protected abstract void handleSimpleType(SchemaObject parent, SchemaObject simpleType);\r
+ protected void handleSimpleType(SchemaObject parent, SchemaObject simpleType) {\r
+ component.handleSimpleType(parent, simpleType);\r
+ }\r
\r
\r
\r
}\r
}\r
\r
- protected void handleElement(SchemaObject topLevelElement) {\r
- LocalComplexType complexType = topLevelElement.getElement().getComplexType();\r
- \r
- if (complexType != null) {\r
- SchemaObject complextTypeObj = complexTypes.get(complexType);\r
- handleElementComplexTypeAttributes(complextTypeObj);\r
- handleComplexTypeExtension(complextTypeObj);\r
- }\r
- \r
- \r
- }\r
- \r
\r
- protected boolean isElementRef(String ref) {\r
+ public boolean isElementRef(String ref) {\r
return elementName.containsKey(ref);\r
}\r
\r
- protected boolean isComplexTypeRef(String ref) {\r
+ public boolean isComplexTypeRef(String ref) {\r
return complexTypeName.containsKey(ref);\r
}\r
\r
- protected boolean isSimpleTypeRef(String ref) {\r
+ public boolean isSimpleTypeRef(String ref) {\r
return simpleTypeName.containsKey(ref);\r
}\r
\r
- protected NamedAttributeGroup getAttributeGroup(String name) {\r
+ public NamedAttributeGroup getAttributeGroup(String name) {\r
for (OpenAttrs attrs : schema.getSimpleTypeOrComplexTypeOrGroup()) {\r
if (attrs instanceof NamedAttributeGroup) {\r
NamedAttributeGroup group = (NamedAttributeGroup)attrs;\r
return null;\r
}\r
\r
- protected IDProvider getIDProvider(Element element) {\r
+ public IDProvider getIDProvider(Element element) {\r
List<IDProvider> idProviders = new ArrayList<IDProvider>(2);\r
for (JAXBElement<?> e : configuration.getConversionRule()) {\r
if (e.getValue() instanceof IDProvider) {\r
return idProviders.get(0);\r
}\r
\r
- protected IDProvider getIDProvider(ComplexType complexType) {\r
+ public IDProvider getIDProvider(ComplexType complexType) {\r
List<IDProvider> idProviders = new ArrayList<IDProvider>(2);\r
for (JAXBElement<?> e : configuration.getConversionRule()) {\r
if (e.getValue() instanceof IDProvider) {\r
return idProviders.get(0);\r
}\r
\r
- protected List<IDReference> getIDReferences(Element element) {\r
+ public List<IDReference> getIDReferences(Element element) {\r
List<IDReference> idReferences = new ArrayList<IDReference>(2);\r
for (JAXBElement<?> e : configuration.getConversionRule()) {\r
if (e.getValue() instanceof IDReference) {\r
return idReferences;\r
}\r
\r
- protected List<IDReference> getIDReferences(ComplexType complexType) {\r
+ public List<IDReference> getIDReferences(ComplexType complexType) {\r
List<IDReference> idReferences = new ArrayList<IDReference>(2);\r
for (JAXBElement<?> e : configuration.getConversionRule()) {\r
if (e.getValue() instanceof IDReference) {\r
}\r
}\r
\r
- public abstract String getComplexTypePrefix(); \r
- \r
- public abstract String getAttributeGroupPrefix();\r
- \r
- public abstract String getName(SchemaObject obj);\r
- \r
- protected abstract String getBaseClass(ObjectType type);\r
+ public String getComplexTypePrefix() {\r
+ return component.getComplexTypePrefix();\r
+ }\r
+ public String getAttributeGroupPrefix() {\r
+ return component.getAttributeGroupPrefix();\r
+ }\r
+ public String getName(SchemaObject obj) {\r
+ return component.getName(obj);\r
+ }\r
+ public String getBaseClass(ObjectType type) {\r
+ return component.getBaseClass(type);\r
+ }\r
\r
\r
\r
- protected Inheritance getInheritance(SchemaObject topLevelObj) {\r
+ public Inheritance getInheritance(SchemaObject topLevelObj) {\r
Inheritance inheritance = null;\r
if (topLevelObj.getType() == ObjectType.ELEMENT) {\r
Element topLevelElement = topLevelObj.getElement();\r
ExtensionType extensionType = simpleContent.getExtension();\r
if (extensionType != null) {\r
type = extensionType.getBase();\r
- getAtomicTypeInheritance(type, topLevelObj, inheritance);\r
+ getAtomicTypeInheritance(type, inheritance);\r
}\r
}\r
}\r
* @param topLevelObj\r
* @param inheritance\r
*/\r
- protected void getAtomicTypeInheritance(QName type, SchemaObject topLevelObj, Inheritance inheritance) {\r
+ public void getAtomicTypeInheritance(QName type, Inheritance inheritance) {\r
if (!type.getNamespaceURI().equals(SCHEMA_NS)) {\r
- SchemaObject obj = getWithName(topLevelObj, type.getLocalPart());\r
+ SchemaObject obj = getWithName(type.getLocalPart());\r
if (obj.getType() != ObjectType.SIMPLE_TYPE)\r
throw new RuntimeException("SimpleContent does not use SimpleType definition");\r
SimpleType simpleType = obj.getSimpleType();\r
type = getSimpleTypeBase(simpleType);\r
- getAtomicTypeInheritance(type, topLevelObj, inheritance);\r
+ getAtomicTypeInheritance(type, inheritance);\r
} else {\r
TypeEntry entry = getTypeEntry(type);\r
if (entry != null) {\r
}\r
}\r
}\r
+ \r
+ public String getDefaultValue(QName atype) {\r
+ Map<String,TypeEntry> types = typeMap.get(atype.getNamespaceURI());\r
+ if (types == null)\r
+ return null;\r
+ TypeEntry entry = types.get(atype.getLocalPart());\r
+ if (entry == null)\r
+ return null;\r
+ return entry.defaultValue;\r
+ }\r
\r
}\r
--- /dev/null
+package org.simantics.xml.sax;\r
+\r
+import java.util.List;\r
+\r
+import org.simantics.utils.datastructures.BijectionMap;\r
+import org.simantics.xml.sax.SchemaConversionBase.RefType;\r
+import org.simantics.xml.sax.SchemaObject.ObjectType;\r
+import org.simantics.xml.sax.configuration.AttributeComposition;\r
+import org.w3._2001.xmlschema.Annotated;\r
+import org.w3._2001.xmlschema.Attribute;\r
+import org.w3._2001.xmlschema.AttributeGroup;\r
+import org.w3._2001.xmlschema.NamedGroup;\r
+\r
+\r
+public interface SchemaConversionComponent {\r
+\r
+ \r
+ void handleAttributes(SchemaObject simpleTypeObj);\r
+ void handleAttributeComposition(SchemaObject obj, AttributeComposition composition, BijectionMap<org.simantics.xml.sax.configuration.Attribute, Annotated> attributes);\r
+ void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement element, String refName, RefType refType);\r
+ void handleIndicator(SchemaObject parent, SchemaElement indicator, SchemaElement any);\r
+ //void handle(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements);\r
+ void handleChoice(SchemaObject parent, SchemaElement indicator, List<SchemaElement> elements, String name);\r
+ void handle(SchemaObject parent, Attribute attribute) ;\r
+ void handle(SchemaObject parent, AttributeGroup attribute) ;\r
+ void handle(SchemaObject parent, NamedGroup attribute);\r
+ void handleSimpleType(SchemaObject parent, SchemaObject simpleType);\r
+ void handleComplexType(SchemaObject complexTypeObj);\r
+ void handleElement(SchemaObject complexTypeObj);\r
+ String getComplexTypePrefix(); \r
+ String getAttributeGroupPrefix();\r
+ String getName(SchemaObject obj);\r
+ String getBaseClass(ObjectType type);\r
+}\r
\r
import java.io.File;\r
import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
import java.io.IOException;\r
import java.io.InputStream;\r
+import java.util.ArrayList;\r
import java.util.Date;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
\r
import javax.xml.bind.JAXBContext;\r
import javax.xml.bind.JAXBElement;\r
import javax.xml.bind.Unmarshaller;\r
\r
import org.simantics.xml.sax.configuration.Configuration;\r
+import org.w3._2001.xmlschema.Annotation;\r
+import org.w3._2001.xmlschema.Import;\r
+import org.w3._2001.xmlschema.Include;\r
+import org.w3._2001.xmlschema.OpenAttrs;\r
import org.w3._2001.xmlschema.Schema;\r
\r
/**\r
*/\r
public class SchemaConverter {\r
\r
+ File outputPlugin;\r
File schemaFile;\r
File conversionFile;\r
File ontologyFile;\r
boolean createImporter = true;\r
boolean createExporter = true;\r
\r
+ private List<SchemaConverter> parent = new ArrayList<>();\r
+ private List<SchemaConverter> subConverters = new ArrayList<>();\r
+ private Map<String,SchemaConverter> nameMap;\r
\r
+ String ontologyUri;\r
+ String className;\r
+ String name;\r
+ String shortName;\r
\r
-\r
- public void convertSchema(File schemaFile, File conversionFile, File outputPlugin) throws JAXBException, IOException {\r
+ SchemaConversionBase base;\r
+ \r
+ private ManualSchemaFileImport fileImport;\r
+ \r
+ public SchemaConverter(File schemaFile, File conversionFile, File outputPlugin) throws IOException {\r
+ this(null,schemaFile,conversionFile,outputPlugin);\r
+ }\r
+ \r
+ public SchemaConverter(SchemaConverter parent,File schemaFile, File conversionFile, File outputPlugin) throws IOException {\r
+ \r
+ this.outputPlugin = outputPlugin;\r
+ this.schemaFile = schemaFile;\r
+ this.conversionFile = conversionFile;\r
+ \r
pluginName = outputPlugin.getName();\r
String packageParts[] = pluginName.split("\\.");\r
String outputLoc = outputPlugin.getAbsolutePath();\r
outputGraph += "/graph";\r
outputGraph += "/" + schemaFile.getName().substring(0, schemaFile.getName().length()-4) +".pgraph";\r
\r
- this.schemaFile = schemaFile;\r
- this.conversionFile = conversionFile;\r
+ \r
this.ontologyFile = new File(outputGraph);\r
this.parserDir = new File(outputLoc);\r
\r
- if (!ontologyFile.exists()) {\r
- ontologyFile.getParentFile().mkdirs();\r
- ontologyFile.createNewFile();\r
+ if (parent != null) {\r
+ this.parent.add(parent);\r
+ parent.subConverters.add(this);\r
+ } else {\r
+ nameMap = new HashMap<>();\r
}\r
- if (!parserDir.exists())\r
- parserDir.mkdirs();\r
- \r
- convert();\r
- \r
+ getRoot().nameMap.put(schemaFile.getAbsolutePath(), this);\r
+ }\r
+ \r
+ public void setFileImport(ManualSchemaFileImport fileImport) {\r
+ this.fileImport = fileImport;\r
}\r
+\r
\r
public void setCreateExporter(boolean createExporter) {\r
this.createExporter = createExporter;\r
this.createPGraph = createPGraph;\r
}\r
\r
- private void convert() throws JAXBException, IOException {\r
+ protected SchemaConverter createSubConverter(String location) throws JAXBException, IOException {\r
+ File directory = schemaFile.getParentFile();\r
+ File schemaFile = new File(directory.getAbsolutePath()+File.separator+location);\r
+ if (!schemaFile.exists()) {\r
+ if (getRoot().fileImport != null) {\r
+ schemaFile = getRoot().fileImport.getFileForLocation(location);\r
+ }\r
+ if (!schemaFile.exists())\r
+ throw new FileNotFoundException(schemaFile.getAbsolutePath());\r
+ }\r
+ SchemaConverter subConverter = getRoot().nameMap.get((schemaFile.getAbsolutePath()));\r
+ if (subConverter == null) {\r
+ subConverter = new SchemaConverter(this,schemaFile, conversionFile, outputPlugin);\r
+ subConverter.createPGraph = this.createPGraph;\r
+ subConverter.createImporter = this.createImporter;\r
+ subConverter.createExporter = this.createExporter;\r
+ } else {\r
+ subConverter.parent.add(this);\r
+ }\r
+ return subConverter;\r
+ }\r
+ \r
+ protected SchemaConverter getRoot() {\r
+ SchemaConverter s = this;\r
+ while (s.parent.size() > 0)\r
+ s = s.parent.get(0);\r
+ return s;\r
+ }\r
+ \r
+ public void convert() throws JAXBException, IOException {\r
+ \r
+ init();\r
+ doConvert();\r
+ }\r
+ \r
+ boolean init = false;\r
+ \r
+ protected void init() throws IOException, JAXBException {\r
+ if (init)\r
+ return;\r
+ init = true;\r
JAXBContext jc = JAXBContext.newInstance("org.w3._2001.xmlschema");\r
Unmarshaller u = jc.createUnmarshaller();\r
//u.setSchema(schema);\r
header[3] = "Date " + new Date().toString();\r
\r
\r
- String ontologyUri = schema.getTargetNamespace();\r
+ ontologyUri = schema.getTargetNamespace();\r
if (ontologyUri == null) {\r
ontologyUri = getSchemaFile().getName();\r
\r
} \r
ontologyUri = ontologyUri.replaceAll(" ", "_");\r
String parts[] = ontologyUri.split("/");\r
- String name = parts[parts.length-1];\r
+ name = parts[parts.length-1];\r
name = name.replaceAll("\\.", "_");\r
if (!ontologyUri.startsWith("http://"))\r
ontologyUri = "http://" + ontologyUri.replaceAll("/", "_");\r
ontologyUri +="-"+ version;\r
\r
\r
- String className = getPluginName() + "." + name;\r
+ className = getPluginName() + "." + name;\r
+ shortName = name.substring(0, 3).toUpperCase();\r
+ \r
+ \r
+ for (OpenAttrs attrs : schema.getIncludeOrImportOrRedefine()) {\r
+ if (attrs instanceof Import) {\r
+ Import imp = (Import)attrs;\r
+ String location = imp.getSchemaLocation();\r
+ SchemaConverter sc = createSubConverter(location);\r
+ sc.init();\r
+ } else if (attrs instanceof Include) {\r
+ Include inc = (Include)attrs;\r
+ String location = inc.getSchemaLocation();\r
+ SchemaConverter sc = createSubConverter(location);\r
+ sc.init();\r
+ } else if (attrs instanceof Annotation) {\r
+ \r
+ } else {\r
+ throw new IOException("Cannot handle schema file " + schemaFile.getName() + ", the schema uses redefine elements.");\r
+ }\r
+ }\r
+ }\r
+ \r
+ protected void doConvert() throws IOException, JAXBException {\r
+ if (!ontologyFile.exists()) {\r
+ ontologyFile.getParentFile().mkdirs();\r
+ ontologyFile.createNewFile();\r
+ }\r
+ if (!parserDir.exists())\r
+ parserDir.mkdirs();\r
+ \r
+ for (SchemaConverter sc : subConverters)\r
+ sc.doConvert();\r
+ \r
+ base = new SchemaConversionBase(this,ontologyUri,className);\r
+ base.init(schema);\r
\r
if (createPGraph) {\r
- OntologyGenerator ontologyGenerator = new OntologyGenerator(configuration);\r
- ontologyGenerator.createOntology(schema, ontologyUri, className, this);\r
+ OntologyGenerator ontologyGenerator = new OntologyGenerator(this,base);\r
+ ontologyGenerator.createOntology();\r
}\r
if (createImporter) {\r
- ImporterGenerator importerGenerator = new ImporterGenerator(configuration);\r
- importerGenerator.createParser(schema, ontologyUri, className, this);\r
+ ImporterGenerator importerGenerator = new ImporterGenerator(this,base);\r
+ importerGenerator.createParser();\r
}\r
if (createExporter) {\r
- ExporterGenerator exporterGenerator = new ExporterGenerator(configuration);\r
- exporterGenerator.createParser(schema, ontologyUri,className, this);\r
+ ExporterGenerator exporterGenerator = new ExporterGenerator(this,base);\r
+ exporterGenerator.createParser();\r
}\r
+ base.component = null;\r
}\r
\r
public File getOntologyFile() {\r
\r
public class SchemaElement {\r
\r
- public enum ElementType{CHOICE,SEQUENCE,ALL,ANY,ELEMENT}\r
+ public enum ElementType{CHOICE,SEQUENCE,ALL,ANY,ELEMENT,NAMED_GROUP, GROUP_REF}\r
\r
private Group gelement;\r
private Any aelement;\r
import org.w3._2001.xmlschema.ComplexType;\r
import org.w3._2001.xmlschema.Element;\r
import org.w3._2001.xmlschema.NamedAttributeGroup;\r
+import org.w3._2001.xmlschema.NamedGroup;\r
import org.w3._2001.xmlschema.OpenAttrs;\r
import org.w3._2001.xmlschema.SimpleType;\r
\r
public class SchemaObject {\r
- enum ObjectType{ELEMENT,COMPLEX_TYPE,SIMPLE_TYPE,ATTRIBUTE_GROUP};\r
+ enum ObjectType{ELEMENT,COMPLEX_TYPE,SIMPLE_TYPE,ATTRIBUTE_GROUP,MODEL_GROUP};\r
\r
private SchemaObject parent;\r
private ObjectType type;\r
this(null, simpleType);\r
}\r
\r
+ public SchemaObject(NamedGroup namedGroup) {\r
+ this(null, namedGroup);\r
+ }\r
+ \r
public SchemaObject(SchemaObject parent, Element element) {\r
this.parent = parent;\r
this.obj = element;\r
this.type = ObjectType.ATTRIBUTE_GROUP;\r
}\r
\r
+ public SchemaObject(SchemaObject parent, NamedGroup namedGroup) {\r
+ this.parent = parent;\r
+ this.obj = namedGroup;\r
+ this.type = ObjectType.MODEL_GROUP;\r
+ }\r
+ \r
\r
public SchemaObject(SchemaObject parent, SimpleType simpleType) {\r
this.parent = parent;\r
return (AttributeGroup)obj;\r
}\r
\r
+ public NamedGroup getModelGroup() {\r
+ if (type != ObjectType.MODEL_GROUP)\r
+ return null;\r
+ return (NamedGroup)obj;\r
+ }\r
+ \r
public SchemaObject getParent() {\r
return parent;\r
}\r