01: package org.ontoware.rdfreactor.runtime.converter;
02:
03: import org.ontoware.rdf2go.model.Model;
04: import org.ontoware.rdf2go.model.node.DatatypeLiteral;
05: import org.ontoware.rdf2go.model.node.LanguageTagLiteral;
06: import org.ontoware.rdf2go.model.node.Node;
07: import org.ontoware.rdf2go.model.node.PlainLiteral;
08: import org.ontoware.rdf2go.model.node.impl.DatatypeLiteralImpl;
09: import org.ontoware.rdf2go.vocabulary.XSD;
10: import org.ontoware.rdfreactor.runtime.INodeConverter;
11: import org.ontoware.rdfreactor.runtime.RDFDataException;
12:
13: public class BooleanConverter implements INodeConverter<Boolean> {
14:
15: public Boolean toJava(Node node) {
16: return node2Boolean(node);
17: }
18:
19: /**
20: * Static versions for convenience
21: * @param node
22: * @return the node converted to a Boolean, false if null.
23: * @throws RDFDataException if node is not null, but could not be converted
24: */
25: public static Boolean node2Boolean(Node node) {
26:
27: if (node == null)
28: return false;
29:
30: if (node instanceof DatatypeLiteral) {
31: DatatypeLiteral dnode = (DatatypeLiteral) node;
32: if (dnode.getDatatype().equals(XSD._boolean)) {
33: return new Boolean(Boolean.parseBoolean(dnode
34: .getValue()));
35: } else
36: throw new RDFDataException("Datatype is "
37: + dnode.getDatatype() + " which is not known");
38: }
39:
40: if (node instanceof LanguageTagLiteral) {
41: throw new RDFDataException(
42: "Cannot convert languageTaggedLiterals to booleans - because that is more often an error than a feature");
43: }
44:
45: if (node instanceof PlainLiteral)
46: return new Boolean(Boolean
47: .parseBoolean(((PlainLiteral) node).getValue()));
48:
49: throw new RDFDataException("Cannot convert a "
50: + node.getClass() + " to Boolean");
51: }
52:
53: public Node toNode(Model model, Object javaValue) {
54: Boolean b = (Boolean) javaValue;
55: return new DatatypeLiteralImpl(b.toString(), XSD._boolean);
56: }
57: }
|