X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FExporterGenerator.java;fp=org.simantics.xml.sax%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2FExporterGenerator.java;h=e3d0add91c321085af4fa1ef8836e69331c09208;hb=5985d5ea605049222dc5a4acb0accf77afd8f76f;hp=5294e913fce5d13832c484467de8fbb3825489b1;hpb=8c7637425667bd9710be0fe6afe437050fea59b7;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 5294e91..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 @@ -64,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("}"); @@ -100,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(); @@ -280,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; @@ -430,6 +461,7 @@ public class ExporterGenerator extends JavaGenerator{ String relationName; String attrName; + String ns = null; if (name != null) { attrName = name; relationName = ontShort+"has"+base.getName(attribute); @@ -444,6 +476,8 @@ public class ExporterGenerator extends JavaGenerator{ if (referred != null) { primitiveType = referred.getType(); simpleType = referred.getSimpleType(); + if (ref.getNamespaceURI() != null && !ref.getNamespaceURI().equals(this.converter.schemaNs)) + ns = ref.getNamespaceURI(); } } else { @@ -460,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) { @@ -470,6 +507,7 @@ public class ExporterGenerator extends JavaGenerator{ } } } + if (simpleType != null) { org.w3._2001.xmlschema.List list = simpleType.getList(); if (list != null) { @@ -484,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. @@ -506,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();