]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java
Don't continue parsing XML file if root element is not recognised
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / XMLElementNamedChildWriterBase.java
index 69b6c8df0c7fe22e6352f1ab80b6bdeb62531e62..8e6a678dab848182df40e720c7109caf9bc29570 100644 (file)
@@ -1,9 +1,7 @@
 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
@@ -13,12 +11,12 @@ import javax.xml.stream.XMLStreamWriter;
 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 Map<Resource,Class<? extends XMLElementWriter>> typeWriters = new HashMap<>();\r
+       private Map<Resource,Class<? extends XMLElementWriter>> relationWriters = new HashMap<>();\r
+       private Map<Resource,Map<Resource,Class<? extends XMLElementWriter>>> relationTypeWriters = new HashMap<>();\r
        private Set<Class<? extends XMLElementWriter>> writers = new HashSet<Class<? extends XMLElementWriter>>();\r
        \r
        \r
@@ -52,9 +50,9 @@ public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedC
        }\r
        \r
        @Override\r
-       public List<Resource> children(ReadGraph graph, WriterElement instance, XMLStreamWriter writer)\r
+       public void children(ReadGraph graph, WriterElement instance, Set<Resource> sorted)\r
                        throws XMLStreamException, DatabaseException {\r
-               return Collections.EMPTY_LIST;\r
+       \r
        }\r
        \r
        @Override\r
@@ -64,6 +62,12 @@ public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedC
                if (writerClass != null)\r
                        return writerClass;\r
                if (child.statement != null) {\r
+                       Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(child.statement.getPredicate());\r
+                       if (typeWriters != null) {\r
+                               writerClass = typeWriters.get(type);\r
+                               if (writerClass != null)\r
+                                       return writerClass;\r
+                       }\r
                        writerClass = relationWriters.get(child.statement.getPredicate());\r
                        if (writerClass != null)\r
                                return writerClass;\r
@@ -88,6 +92,16 @@ public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedC
                relationWriters.put(relation, writer);\r
        }\r
        \r
+       public void addRelationTypeWriter(Resource relation, Resource type, Class<? extends XMLElementWriter> writer) {\r
+               Map<Resource,Class<? extends XMLElementWriter>> typeWriters = relationTypeWriters.get(relation);\r
+               if (typeWriters == null) {\r
+                       typeWriters = new HashMap<>();\r
+                       relationTypeWriters.put(relation, typeWriters);\r
+               }\r
+               typeWriters.put(type, writer);\r
+       }\r
+       \r
+       \r
        public void addWriter(Class<? extends XMLElementWriter> writer) {\r
                writers.add(writer);\r
        }\r