]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java
Initial support for XML export (order of Elements is not kept)
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / XMLElementNamedChildWriterBase.java
diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java
new file mode 100644 (file)
index 0000000..69b6c8d
--- /dev/null
@@ -0,0 +1,94 @@
+package org.simantics.xml.sax.base;\r
+\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\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
+import org.simantics.scl.compiler.elaboration.errors.ElabNode;\r
+\r
+public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedChildWriter{\r
+\r
+       private Map<Resource,Class<? extends XMLElementWriter>> typeWriters = new HashMap<Resource, Class<? extends XMLElementWriter>>();\r
+       private Map<Resource,Class<? extends XMLElementWriter>> relationWriters = new HashMap<Resource, Class<? extends XMLElementWriter>>();\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 List<Resource> children(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+                       throws XMLStreamException, DatabaseException {\r
+               return Collections.EMPTY_LIST;\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
+                       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 addWriter(Class<? extends XMLElementWriter> writer) {\r
+               writers.add(writer);\r
+       }\r
+}\r