X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FExporterGenerator.java;h=e3d0add91c321085af4fa1ef8836e69331c09208;hb=5985d5ea605049222dc5a4acb0accf77afd8f76f;hp=f538bcb42bae58e026e17978d0a5dd4e89945eff;hpb=fad28e2a01ee43b7448cffaef1bc6ba2eed84e39;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java b/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java index f538bcb..e3d0add 100644 --- a/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java +++ b/org.simantics.xml.sax/src/org/simantics/xml/sax/ExporterGenerator.java @@ -40,10 +40,9 @@ public class ExporterGenerator extends JavaGenerator{ public void createParser() throws IOException { - String parserPackagePostfix = "_exp"; + String importerClassPostfix = "Exporter"; String parserClassPostfix = "Writer"; - elementPackageName = name+parserPackagePostfix; importParserDir= new File(converter.getParserDir().getAbsolutePath()+"/"+elementPackageName); if (!importParserDir.exists()) @@ -65,7 +64,7 @@ public class ExporterGenerator extends JavaGenerator{ mainWriter.println(); mainWriter.println(" public " + name + importerClassPostfix+"(Session session, File file, Resource root) throws DatabaseException {"); mainWriter.println(" super(session, file, root);"); - mainWriter.println(" setXmlWriter(new "+name + parserClassPostfix+"(session));"); + mainWriter.println(" setXmlWriter(new "+name + parserClassPostfix+"(session).resolveDependencies(session));"); mainWriter.println(" }"); mainWriter.println(); mainWriter.println("}"); @@ -101,6 +100,39 @@ public class ExporterGenerator extends JavaGenerator{ mainWriter.println(" }"); mainWriter.println(" });"); mainWriter.println(" }"); + + mainWriter.println(); + if (converter.getSubConverters().size() > 0) { + mainWriter.println(" public void addDependencies(org.simantics.db.Session session, java.util.Map map) throws DatabaseException {"); + for (SchemaConverter sc : converter.getSubConverters()) { + String s = sc.className; + if (s.endsWith("Ontology")) + s = s.substring(0,s.length()-"Ontology".length()); + s +="Writer"; + mainWriter.println(" {"); + mainWriter.println(" XMLWriter parser = new "+s+"(session);"); + mainWriter.println(" if (!map.containsKey(parser.getSchemaURI())) {"); + mainWriter.println(" map.put(parser.getSchemaURI(), parser);"); + mainWriter.println(" parser.addDependencies(session,map);"); + mainWriter.println(" } else {"); + mainWriter.println(" parser = map.get(parser.getSchemaURI());"); + mainWriter.println(" }"); + mainWriter.println(" add(parser);"); + mainWriter.println(" }"); + } + mainWriter.println(" }"); + + mainWriter.println(" public XMLWriter resolveDependencies(org.simantics.db.Session session) throws DatabaseException {"); + mainWriter.println(" super.resolveDependencies(session);"); + for (SchemaConverter sc : converter.getSubConverters()) { + String s = sc.schemaNs; + mainWriter.println(" if (!nsPrefixes.containsKey(\""+s+"\")) {"); + mainWriter.println(" nsPrefixes.put(\""+s+"\", \"ns\"+nsPrefixes.size());"); + mainWriter.println(" }"); + } + mainWriter.println(" return this;"); + mainWriter.println(" }"); + } mainWriter.println("}"); mainWriter.println(); @@ -108,6 +140,11 @@ public class ExporterGenerator extends JavaGenerator{ mainWriter.close(); } + @Override + protected String getPackagePostFix() { + return "_exp"; + } + // @Override // protected void handle(TopLevelAttribute topLevelAttribute) { // @@ -276,8 +313,6 @@ public class ExporterGenerator extends JavaGenerator{ protected void createReferenceIndicator(SchemaObject parent, RefType referenceType, String refName, String objectName, String primaryClassName, String secondaryClassName, boolean useElementList, boolean useOriginalList) { FileWriter fw = getWriter(parent); - if ("TextOrField".equals(refName)) - System.out.println(); if (referenceType == RefType.Type) { // create internal class for handling the element and child attachment secondaryClassName = getName(parent) +"_" +objectName; @@ -426,20 +461,23 @@ public class ExporterGenerator extends JavaGenerator{ String relationName; String attrName; + String ns = null; if (name != null) { attrName = name; - relationName = ontShort+"has"+name; + relationName = ontShort+"has"+base.getName(attribute); if (parent != null) - relationName = ontShort+getName(parent)+"_has"+name; + relationName = ontShort+getName(parent)+"_has"+base.getName(attribute); } else if (ref != null && parent != null) { attrName = ref.getLocalPart(); - relationName = ontShort+getName(parent)+"_has"+ref.getLocalPart(); + relationName = ontShort+getName(parent)+"_has"+base.getName(ref); Attribute referred = base.getRefAttribute(ref); if (referred != null) { primitiveType = referred.getType(); simpleType = referred.getSimpleType(); + if (ref.getNamespaceURI() != null && !ref.getNamespaceURI().equals(this.converter.schemaNs)) + ns = ref.getNamespaceURI(); } } else { @@ -456,7 +494,10 @@ public class ExporterGenerator extends JavaGenerator{ TypeEntry binding = base.getTypeEntry(primitiveType); if (binding != null) { - writeAttribute(fw, attrName, relationName, binding, isReference); + if (ns != null) + writeAttribute(fw, ns, attrName, relationName, binding, isReference); + else + writeAttribute(fw, attrName, relationName, binding, isReference); return; } else { if (simpleType == null) { @@ -466,6 +507,7 @@ public class ExporterGenerator extends JavaGenerator{ } } } + if (simpleType != null) { org.w3._2001.xmlschema.List list = simpleType.getList(); if (list != null) { @@ -480,7 +522,10 @@ public class ExporterGenerator extends JavaGenerator{ //String binding = getBindingFromPrimitiveType(base); TypeEntry binding = this.base.getTypeEntry(base); - writeAttribute(fw, attrName, relationName, binding, isReference); + if (base.getNamespaceURI() != null) + writeAttribute(fw, base.getNamespaceURI(), attrName, relationName, binding, isReference); + else + writeAttribute(fw, attrName, relationName, binding, isReference); } } else { // TODO : using default String attribute should be configured with rules. @@ -502,6 +547,17 @@ public class ExporterGenerator extends JavaGenerator{ fw.writer.println(" }"); } + private void writeAttribute(FileWriter fw, String ns, String attrName, String relationName, TypeEntry binding, boolean isReference) { + fw.writer.println(" {"); + fw.writer.println(" if (attribute.getPredicate().equals("+relationName+")) {"); + fw.writer.println(" writer.writeAttribute(\""+ns+"\",\""+attrName+"\", " + binding.getToString("graph.getValue(attribute.getObject(),"+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(" }"); + fw.writer.println(" }"); + } + @Override public void handleAttributes(SchemaObject simpleTypeObj) { SchemaObject parent = simpleTypeObj.getParent(); @@ -530,7 +586,7 @@ public class ExporterGenerator extends JavaGenerator{ FileWriter fw = getWriter(parent); NamedAttributeGroup group = this.base.getAttributeGroup(attribute.getRef()); fw.writer.println(commentTag+" AttributeGroup " + group.getName()); - SchemaObject obj = new SchemaObject(parent,attribute); + SchemaObject obj = new SchemaObject(base,parent,attribute); for (Annotated annotated : group.getAttributeOrAttributeGroup()) { if (annotated instanceof Attribute) { //handle("AttributeGroups_"+group.getName(),(Attribute)annotated);