package org.simantics.xml.sax.base; import java.util.Deque; import org.simantics.databoard.Bindings; import org.simantics.databoard.binding.Binding; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.exception.DatabaseException; import org.simantics.layer0.Layer0; public class ValueElementParser extends XMLElementParserBase{ String name; Binding binding; String relationURI; public ValueElementParser(String name, String relationURI,Binding binding) { this.name = name; this.relationURI = relationURI; this.binding = binding; } @Override public String getElementId() { return name; } @Override public Resource create(WriteGraph graph, ParserElement element) throws DatabaseException { Resource res = graph.newResource(); return res; } @Override public void configure(WriteGraph graph, Deque parents, ParserElement element) throws DatabaseException { } @Override public boolean connectParent(WriteGraph graph, ParserElement parent, ParserElement element)throws DatabaseException { graph.claim(parent.getData(), graph.getResource(relationURI), element.getData()); return true; } @Override public boolean connectChild(WriteGraph graph, ParserElement element, ParserElement child) throws DatabaseException { return false; } @Override public void configure(WriteGraph graph, ParserElement element, String string) throws DatabaseException { Layer0 l0 = Layer0.getInstance(graph); if (binding == Bindings.STRING) { graph.claim(element.getData(), l0.InstanceOf, l0.String); graph.claimValue(element.getData(), string, binding); } else if (binding == Bindings.INTEGER) { graph.claim(element.getData(), l0.InstanceOf, l0.Integer); graph.claimValue(element.getData(), Integer.parseInt(string), binding); } else if (binding == Bindings.FLOAT) { graph.claim(element.getData(), l0.InstanceOf, l0.Float); graph.claimValue(element.getData(), Float.parseFloat(string), binding); } else if (binding == Bindings.DOUBLE) { graph.claim(element.getData(), l0.InstanceOf, l0.Double); graph.claimValue(element.getData(), Double.parseDouble(string), binding); } else if (binding == Bindings.BOOLEAN) { graph.claim(element.getData(), l0.InstanceOf, l0.Boolean); graph.claimValue(element.getData(), Boolean.parseBoolean(string), binding); } else if (binding == Bindings.LONG) { graph.claim(element.getData(), l0.InstanceOf, l0.Long); graph.claimValue(element.getData(), Long.parseLong(string), binding); } else if (binding == Bindings.BYTE) { graph.claim(element.getData(), l0.InstanceOf, l0.Byte); graph.claimValue(element.getData(), Byte.parseByte(string), binding); } else { throw new DatabaseException("Unknown datatype " + binding); } } }