X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.xml.sax.base%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2Fbase%2FXMLElementNamedChildWriterBase.java;h=8e6a678dab848182df40e720c7109caf9bc29570;hb=c8ead11dcd815dc26885b2b8e866e4ac4e563ae5;hp=69b6c8df0c7fe22e6352f1ab80b6bdeb62531e62;hpb=dd3b2c7ecd5f4b60734f2602b16637aa8be2a263;p=simantics%2Finterop.git diff --git a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java index 69b6c8d..8e6a678 100644 --- a/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java +++ b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java @@ -1,9 +1,7 @@ package org.simantics.xml.sax.base; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; @@ -13,12 +11,12 @@ import javax.xml.stream.XMLStreamWriter; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; -import org.simantics.scl.compiler.elaboration.errors.ElabNode; public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedChildWriter{ - private Map> typeWriters = new HashMap>(); - private Map> relationWriters = new HashMap>(); + private Map> typeWriters = new HashMap<>(); + private Map> relationWriters = new HashMap<>(); + private Map>> relationTypeWriters = new HashMap<>(); private Set> writers = new HashSet>(); @@ -52,9 +50,9 @@ public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedC } @Override - public List children(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) + public void children(ReadGraph graph, WriterElement instance, Set sorted) throws XMLStreamException, DatabaseException { - return Collections.EMPTY_LIST; + } @Override @@ -64,6 +62,12 @@ public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedC if (writerClass != null) return writerClass; if (child.statement != null) { + Map> typeWriters = relationTypeWriters.get(child.statement.getPredicate()); + if (typeWriters != null) { + writerClass = typeWriters.get(type); + if (writerClass != null) + return writerClass; + } writerClass = relationWriters.get(child.statement.getPredicate()); if (writerClass != null) return writerClass; @@ -88,6 +92,16 @@ public abstract class XMLElementNamedChildWriterBase implements XMLElementNamedC relationWriters.put(relation, writer); } + public void addRelationTypeWriter(Resource relation, Resource type, Class writer) { + Map> typeWriters = relationTypeWriters.get(relation); + if (typeWriters == null) { + typeWriters = new HashMap<>(); + relationTypeWriters.put(relation, typeWriters); + } + typeWriters.put(type, writer); + } + + public void addWriter(Class writer) { writers.add(writer); }