]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java
Handling choice exporting properly by checking exported resource type
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / XMLElementNamedChildWriterBase.java
index 9c4ceb6b9a26a4963b143d31d6e4655762948ab2..8e6a678dab848182df40e720c7109caf9bc29570 100644 (file)
@@ -14,8 +14,9 @@ import org.simantics.db.exception.DatabaseException;
 \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
@@ -61,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
@@ -85,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