--- /dev/null
+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