1 package org.simantics.xml.sax.base;
\r
3 import java.util.HashMap;
\r
4 import java.util.HashSet;
\r
5 import java.util.Map;
\r
6 import java.util.Set;
\r
8 import javax.xml.stream.XMLStreamException;
\r
9 import javax.xml.stream.XMLStreamWriter;
\r
11 import org.simantics.db.ReadGraph;
\r
12 import org.simantics.db.Resource;
\r
13 import org.simantics.db.exception.DatabaseException;
\r
15 public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedChildWriter{
\r
17 private Map<Resource,Class<? extends XMLElementWriter>> typeWriters = new HashMap<Resource, Class<? extends XMLElementWriter>>();
\r
18 private Map<Resource,Class<? extends XMLElementWriter>> relationWriters = new HashMap<Resource, Class<? extends XMLElementWriter>>();
\r
19 private Set<Class<? extends XMLElementWriter>> writers = new HashSet<Class<? extends XMLElementWriter>>();
\r
22 public XMLElementNamedChildWriterBase() {
\r
26 public XMLElementNamedChildWriterBase(ReadGraph graph) {
\r
31 public Resource getType(ReadGraph graph) throws DatabaseException {
\r
36 public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
\r
37 writer.writeStartElement(getElementId());
\r
41 public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)
\r
42 throws XMLStreamException, DatabaseException {
\r
47 public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
\r
48 writer.writeEndElement();
\r
52 public void children(ReadGraph graph, WriterElement instance, Set<Resource> sorted)
\r
53 throws XMLStreamException, DatabaseException {
\r
58 public Class<? extends XMLElementWriter> getWriter(ReadGraph graph, Map<Resource, XMLElementWriter> writers, WriterElement child) throws DatabaseException{
\r
59 Resource type = graph.getSingleType(child.instance);
\r
60 Class<? extends XMLElementWriter> writerClass = typeWriters.get(type);
\r
61 if (writerClass != null)
\r
63 if (child.statement != null) {
\r
64 writerClass = relationWriters.get(child.statement.getPredicate());
\r
65 if (writerClass != null)
\r
68 XMLElementWriter writer = writers.get(type);
\r
71 writerClass = writer.getClass();
\r
72 if (this.writers.contains(writerClass))
\r
74 for (Class<?> c : this.writers)
\r
75 if (c.isAssignableFrom(writerClass))
\r
80 public void addTypeWriter(Resource type, Class<? extends XMLElementWriter> writer) {
\r
81 typeWriters.put(type, writer);
\r
84 public void addRelationWriter(Resource relation, Class<? extends XMLElementWriter> writer) {
\r
85 relationWriters.put(relation, writer);
\r
88 public void addWriter(Class<? extends XMLElementWriter> writer) {
\r
89 writers.add(writer);
\r