]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java
9c4ceb6b9a26a4963b143d31d6e4655762948ab2
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / XMLElementNamedChildWriterBase.java
1 package org.simantics.xml.sax.base;\r
2 \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
7 \r
8 import javax.xml.stream.XMLStreamException;\r
9 import javax.xml.stream.XMLStreamWriter;\r
10 \r
11 import org.simantics.db.ReadGraph;\r
12 import org.simantics.db.Resource;\r
13 import org.simantics.db.exception.DatabaseException;\r
14 \r
15 public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedChildWriter{\r
16 \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
20         \r
21         \r
22         public XMLElementNamedChildWriterBase() {\r
23         \r
24         }\r
25         \r
26         public XMLElementNamedChildWriterBase(ReadGraph graph) {\r
27                 \r
28         }\r
29         \r
30         @Override\r
31         public Resource getType(ReadGraph graph) throws DatabaseException {\r
32                 return null;\r
33         }\r
34         \r
35         @Override\r
36         public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {\r
37                 writer.writeStartElement(getElementId());\r
38         }\r
39         \r
40         @Override\r
41         public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
42                         throws XMLStreamException, DatabaseException {\r
43                 \r
44         }\r
45         \r
46         @Override\r
47         public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException {\r
48                 writer.writeEndElement();\r
49         }\r
50         \r
51         @Override\r
52         public void children(ReadGraph graph, WriterElement instance, Set<Resource> sorted)\r
53                         throws XMLStreamException, DatabaseException {\r
54         \r
55         }\r
56         \r
57         @Override\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
62                         return writerClass;\r
63                 if (child.statement != null) {\r
64                         writerClass = relationWriters.get(child.statement.getPredicate());\r
65                         if (writerClass != null)\r
66                                 return writerClass;\r
67                 }\r
68                 XMLElementWriter writer = writers.get(type);\r
69                 if (writer == null)\r
70                         return null;\r
71                 writerClass = writer.getClass();\r
72                 if (this.writers.contains(writerClass))\r
73                         return writerClass;\r
74                 for (Class<?> c : this.writers)\r
75                         if (c.isAssignableFrom(writerClass))\r
76                                 return writerClass;\r
77                 return null;\r
78         }\r
79         \r
80         public void addTypeWriter(Resource type, Class<? extends XMLElementWriter> writer) {\r
81                 typeWriters.put(type, writer);\r
82         }\r
83         \r
84         public void addRelationWriter(Resource relation, Class<? extends XMLElementWriter> writer) {\r
85                 relationWriters.put(relation, writer);\r
86         }\r
87         \r
88         public void addWriter(Class<? extends XMLElementWriter> writer) {\r
89                 writers.add(writer);\r
90         }\r
91 }\r