1 package org.simantics.xml.sax.base;
\r
3 import java.util.Collections;
\r
4 import java.util.HashMap;
\r
5 import java.util.HashSet;
\r
6 import java.util.List;
\r
7 import java.util.Map;
\r
8 import java.util.Set;
\r
10 import javax.xml.stream.XMLStreamException;
\r
11 import javax.xml.stream.XMLStreamWriter;
\r
13 import org.simantics.db.ReadGraph;
\r
14 import org.simantics.db.Resource;
\r
15 import org.simantics.db.exception.DatabaseException;
\r
16 import org.simantics.scl.compiler.elaboration.errors.ElabNode;
\r
18 public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedChildWriter{
\r
20 private Map<Resource,Class<? extends XMLElementWriter>> typeWriters = new HashMap<Resource, Class<? extends XMLElementWriter>>();
\r
21 private Map<Resource,Class<? extends XMLElementWriter>> relationWriters = new HashMap<Resource, Class<? extends XMLElementWriter>>();
\r
22 private Set<Class<? extends XMLElementWriter>> writers = new HashSet<Class<? extends XMLElementWriter>>();
\r
25 public XMLElementNamedChildWriterBase() {
\r
29 public XMLElementNamedChildWriterBase(ReadGraph graph) {
\r
34 public Resource getType(ReadGraph graph) throws DatabaseException {
\r
39 public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
\r
40 writer.writeStartElement(getElementId());
\r
44 public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)
\r
45 throws XMLStreamException, DatabaseException {
\r
50 public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
\r
51 writer.writeEndElement();
\r
55 public List<Resource> children(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)
\r
56 throws XMLStreamException, DatabaseException {
\r
57 return Collections.EMPTY_LIST;
\r
61 public Class<? extends XMLElementWriter> getWriter(ReadGraph graph, Map<Resource, XMLElementWriter> writers, WriterElement child) throws DatabaseException{
\r
62 Resource type = graph.getSingleType(child.instance);
\r
63 Class<? extends XMLElementWriter> writerClass = typeWriters.get(type);
\r
64 if (writerClass != null)
\r
66 if (child.statement != null) {
\r
67 writerClass = relationWriters.get(child.statement.getPredicate());
\r
68 if (writerClass != null)
\r
71 XMLElementWriter writer = writers.get(type);
\r
74 writerClass = writer.getClass();
\r
75 if (this.writers.contains(writerClass))
\r
77 for (Class<?> c : this.writers)
\r
78 if (c.isAssignableFrom(writerClass))
\r
83 public void addTypeWriter(Resource type, Class<? extends XMLElementWriter> writer) {
\r
84 typeWriters.put(type, writer);
\r
87 public void addRelationWriter(Resource relation, Class<? extends XMLElementWriter> writer) {
\r
88 relationWriters.put(relation, writer);
\r
91 public void addWriter(Class<? extends XMLElementWriter> writer) {
\r
92 writers.add(writer);
\r