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<>();
\r
18 private Map<Resource,Class<? extends XMLElementWriter>> relationWriters = new HashMap<>();
\r
19 private Map<Resource,Map<Resource,Class<? extends XMLElementWriter>>> relationTypeWriters = new HashMap<>();
\r
20 private Set<Class<? extends XMLElementWriter>> writers = new HashSet<Class<? extends XMLElementWriter>>();
\r
23 public XMLElementNamedChildWriterBase() {
\r
27 public XMLElementNamedChildWriterBase(ReadGraph graph) {
\r
32 public Resource getType(ReadGraph graph) throws DatabaseException {
\r
37 public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
\r
38 writer.writeStartElement(getElementId());
\r
42 public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)
\r
43 throws XMLStreamException, DatabaseException {
\r
48 public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {
\r
49 writer.writeEndElement();
\r
53 public void children(ReadGraph graph, WriterElement instance, Set<Resource> sorted)
\r
54 throws XMLStreamException, DatabaseException {
\r
59 public Class<? extends XMLElementWriter> getWriter(ReadGraph graph, Map<Resource, XMLElementWriter> writers, WriterElement child) throws DatabaseException{
\r
60 Resource type = graph.getSingleType(child.instance);
\r
61 Class<? extends XMLElementWriter> writerClass = typeWriters.get(type);
\r
62 if (writerClass != null)
\r
64 if (child.statement != null) {
\r
65 Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(child.statement.getPredicate());
\r
66 if (typeWriters != null) {
\r
67 writerClass = typeWriters.get(type);
\r
68 if (writerClass != null)
\r
71 writerClass = relationWriters.get(child.statement.getPredicate());
\r
72 if (writerClass != null)
\r
75 XMLElementWriter writer = writers.get(type);
\r
78 writerClass = writer.getClass();
\r
79 if (this.writers.contains(writerClass))
\r
81 for (Class<?> c : this.writers)
\r
82 if (c.isAssignableFrom(writerClass))
\r
87 public void addTypeWriter(Resource type, Class<? extends XMLElementWriter> writer) {
\r
88 typeWriters.put(type, writer);
\r
91 public void addRelationWriter(Resource relation, Class<? extends XMLElementWriter> writer) {
\r
92 relationWriters.put(relation, writer);
\r
95 public void addRelationTypeWriter(Resource relation, Resource type, Class<? extends XMLElementWriter> writer) {
\r
96 Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(relation);
\r
97 if (typeWriters == null) {
\r
98 typeWriters = new HashMap<>();
\r
99 relationTypeWriters.put(relation, typeWriters);
\r
101 typeWriters.put(type, writer);
\r
105 public void addWriter(Class<? extends XMLElementWriter> writer) {
\r
106 writers.add(writer);
\r