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;fp=org.simantics.xml.sax.base%2Fsrc%2Forg%2Fsimantics%2Fxml%2Fsax%2Fbase%2FXMLElementNamedChildWriterBase.java;h=69b6c8df0c7fe22e6352f1ab80b6bdeb62531e62;hb=dd3b2c7ecd5f4b60734f2602b16637aa8be2a263;hp=0000000000000000000000000000000000000000;hpb=47791aa9453c9d90786bc8ca7de102fb3ee90f3b;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 new file mode 100644 index 0000000..69b6c8d --- /dev/null +++ b/org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildWriterBase.java @@ -0,0 +1,94 @@ +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; + +import javax.xml.stream.XMLStreamException; +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 Set> writers = new HashSet>(); + + + public XMLElementNamedChildWriterBase() { + + } + + public XMLElementNamedChildWriterBase(ReadGraph graph) { + + } + + @Override + public Resource getType(ReadGraph graph) throws DatabaseException { + return null; + } + + @Override + public void start(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(getElementId()); + } + + @Override + public void characters(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) + throws XMLStreamException, DatabaseException { + + } + + @Override + public void end(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) throws XMLStreamException { + writer.writeEndElement(); + } + + @Override + public List children(ReadGraph graph, WriterElement instance, XMLStreamWriter writer) + throws XMLStreamException, DatabaseException { + return Collections.EMPTY_LIST; + } + + @Override + public Class getWriter(ReadGraph graph, Map writers, WriterElement child) throws DatabaseException{ + Resource type = graph.getSingleType(child.instance); + Class writerClass = typeWriters.get(type); + if (writerClass != null) + return writerClass; + if (child.statement != null) { + writerClass = relationWriters.get(child.statement.getPredicate()); + if (writerClass != null) + return writerClass; + } + XMLElementWriter writer = writers.get(type); + if (writer == null) + return null; + writerClass = writer.getClass(); + if (this.writers.contains(writerClass)) + return writerClass; + for (Class c : this.writers) + if (c.isAssignableFrom(writerClass)) + return writerClass; + return null; + } + + public void addTypeWriter(Resource type, Class writer) { + typeWriters.put(type, writer); + } + + public void addRelationWriter(Resource relation, Class writer) { + relationWriters.put(relation, writer); + } + + public void addWriter(Class writer) { + writers.add(writer); + } +}