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=5a2849a5e792c9821201d320cb30b3dc41a586bf;hp=9c4ceb6b9a26a4963b143d31d6e4655762948ab2;hpb=90d821c64af7690fe7e108c3f5b89da8fa5395fc;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 9c4ceb6..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 @@ -14,8 +14,9 @@ import org.simantics.db.exception.DatabaseException; 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>(); @@ -61,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; @@ -85,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); }