]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java
Attribute namespace + multi-schema data export
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / XMLElementNamedChildWriterBase.java
index 8e6a678dab848182df40e720c7109caf9bc29570..32ad6f19a6fe29da3d2e3971d32b0f97474b4c8f 100644 (file)
-package org.simantics.xml.sax.base;\r
-\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import javax.xml.stream.XMLStreamException;\r
-import javax.xml.stream.XMLStreamWriter;\r
-\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.exception.DatabaseException;\r
-\r
-public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedChildWriter{\r
-\r
-       private Map<Resource,Class<? extends XMLElementWriter>> typeWriters = new HashMap<>();\r
-       private Map<Resource,Class<? extends XMLElementWriter>> relationWriters = new HashMap<>();\r
-       private Map<Resource,Map<Resource,Class<? extends XMLElementWriter>>> relationTypeWriters = new HashMap<>();\r
-       private Set<Class<? extends XMLElementWriter>> writers = new HashSet<Class<? extends XMLElementWriter>>();\r
-       \r
-       \r
-       public XMLElementNamedChildWriterBase() {\r
-       \r
-       }\r
-       \r
-       public XMLElementNamedChildWriterBase(ReadGraph graph) {\r
-               \r
-       }\r
-       \r
-       @Override\r
-       public Resource getType(ReadGraph graph) throws DatabaseException {\r
-               return null;\r
-       }\r
-       \r
-       @Override\r
-       public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {\r
-               writer.writeStartElement(getElementId());\r
-       }\r
-       \r
-       @Override\r
-       public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
-                       throws XMLStreamException, DatabaseException {\r
-               \r
-       }\r
-       \r
-       @Override\r
-       public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {\r
-               writer.writeEndElement();\r
-       }\r
-       \r
-       @Override\r
-       public void children(ReadGraph graph, WriterElement instance, Set<Resource> sorted)\r
-                       throws XMLStreamException, DatabaseException {\r
-       \r
-       }\r
-       \r
-       @Override\r
-       public Class<? extends XMLElementWriter> getWriter(ReadGraph graph, Map<Resource, XMLElementWriter> writers, WriterElement child) throws DatabaseException{\r
-               Resource type = graph.getSingleType(child.instance);\r
-               Class<? extends XMLElementWriter> writerClass =  typeWriters.get(type);\r
-               if (writerClass != null)\r
-                       return writerClass;\r
-               if (child.statement != null) {\r
-                       Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(child.statement.getPredicate());\r
-                       if (typeWriters != null) {\r
-                               writerClass = typeWriters.get(type);\r
-                               if (writerClass != null)\r
-                                       return writerClass;\r
-                       }\r
-                       writerClass = relationWriters.get(child.statement.getPredicate());\r
-                       if (writerClass != null)\r
-                               return writerClass;\r
-               }\r
-               XMLElementWriter writer = writers.get(type);\r
-               if (writer == null)\r
-                       return null;\r
-               writerClass = writer.getClass();\r
-               if (this.writers.contains(writerClass))\r
-                       return writerClass;\r
-               for (Class<?> c : this.writers)\r
-                       if (c.isAssignableFrom(writerClass))\r
-                               return writerClass;\r
-               return null;\r
-       }\r
-       \r
-       public void addTypeWriter(Resource type, Class<? extends XMLElementWriter> writer) {\r
-               typeWriters.put(type, writer);\r
-       }\r
-       \r
-       public void addRelationWriter(Resource relation, Class<? extends XMLElementWriter> writer) {\r
-               relationWriters.put(relation, writer);\r
-       }\r
-       \r
-       public void addRelationTypeWriter(Resource relation, Resource type, Class<? extends XMLElementWriter> writer) {\r
-               Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(relation);\r
-               if (typeWriters == null) {\r
-                       typeWriters = new HashMap<>();\r
-                       relationTypeWriters.put(relation, typeWriters);\r
-               }\r
-               typeWriters.put(type, writer);\r
-       }\r
-       \r
-       \r
-       public void addWriter(Class<? extends XMLElementWriter> writer) {\r
-               writers.add(writer);\r
-       }\r
-}\r
+package org.simantics.xml.sax.base;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.xml.sax.ontology.XMLResource;
+
+public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedChildWriter{
+
+       private Map<Resource,Class<? extends XMLElementWriter>> typeWriters = new HashMap<>();
+       private Map<Resource,Class<? extends XMLElementWriter>> relationWriters = new HashMap<>();
+       private Map<Resource,Map<Resource,Class<? extends XMLElementWriter>>> relationTypeWriters = new HashMap<>();
+       private Set<Class<? extends XMLElementWriter>> writers = new HashSet<Class<? extends XMLElementWriter>>();
+       
+       
+       public XMLElementNamedChildWriterBase() {
+       
+       }
+       
+       public XMLElementNamedChildWriterBase(ReadGraph graph) {
+               
+       }
+       
+       @Override
+       public Resource getType(ReadGraph graph) throws DatabaseException {
+               return null;
+       }
+       
+       @Override
+       public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
+               writer.writeStartElement(getElementId());
+       }
+       
+       @Override
+       public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)
+                       throws XMLStreamException, DatabaseException {
+               
+       }
+       
+       @Override
+       public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
+               writer.writeEndElement();
+       }
+       
+       @Override
+       public void children(ReadGraph graph, WriterElement instance, Set<Resource> sorted)
+                       throws XMLStreamException, DatabaseException {
+       
+       }
+       
+       @Override
+       public Class<? extends XMLElementWriter> getWriter(ReadGraph graph, Map<Resource, XMLElementWriter> writers, WriterElement child) throws DatabaseException{
+               //Resource type = graph.getSingleType(child.instance);
+               // hack fix for elements containing character data (Current schema conversion does not recognise such cases, leaving Literal type inheritance out).
+               XMLResource XML = XMLResource.getInstance(graph);
+               Resource type = graph.getSingleType(child.instance,XML.Element);
+               Class<? extends XMLElementWriter> writerClass =  typeWriters.get(type);
+               if (writerClass != null)
+                       return writerClass;
+               if (child.statement != null) {
+                       Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(child.statement.getPredicate());
+                       if (typeWriters != null) {
+                               writerClass = typeWriters.get(type);
+                               if (writerClass != null)
+                                       return writerClass;
+                       }
+                       writerClass = relationWriters.get(child.statement.getPredicate());
+                       if (writerClass != null)
+                               return writerClass;
+               }
+               XMLElementWriter writer = writers.get(type);
+               if (writer == null)
+                       return null;
+               writerClass = writer.getClass();
+               if (this.writers.contains(writerClass))
+                       return writerClass;
+               for (Class<?> c : this.writers)
+                       if (c.isAssignableFrom(writerClass))
+                               return writerClass;
+               return null;
+       }
+       
+       public void addTypeWriter(Resource type, Class<? extends XMLElementWriter> writer) {
+               typeWriters.put(type, writer);
+       }
+       
+       public void addRelationWriter(Resource relation, Class<? extends XMLElementWriter> writer) {
+               relationWriters.put(relation, writer);
+       }
+       
+       public void addRelationTypeWriter(Resource relation, Resource type, Class<? extends XMLElementWriter> writer) {
+               Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(relation);
+               if (typeWriters == null) {
+                       typeWriters = new HashMap<>();
+                       relationTypeWriters.put(relation, typeWriters);
+               }
+               typeWriters.put(type, writer);
+       }
+       
+       
+       public void addWriter(Class<? extends XMLElementWriter> writer) {
+               writers.add(writer);
+       }
+}