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.Literal;
07: import org.ontoware.rdf2go.model.node.Node;
08: import org.ontoware.rdf2go.model.node.PlainLiteral;
09: import org.ontoware.rdf2go.model.node.URI;
10: import org.ontoware.rdf2go.vocabulary.XSD;
11: import org.ontoware.rdfreactor.runtime.INodeConverter;
12: import org.ontoware.rdfreactor.runtime.RDFDataException;
13:
14: public class IntegerConverter implements INodeConverter<Integer> {
15:
16: public Integer toJava(Node node) {
17: return node2integer(node);
18: }
19:
20: public static Integer node2integer(Node node) {
21: if (node == null)
22: return null;
23:
24: if (node instanceof PlainLiteral) {
25: return toInteger(node.asLiteral());
26: }
27:
28: if (node instanceof LanguageTagLiteral) {
29: throw new RDFDataException(
30: "Cannot convert a language tagged literal to an Integer - it makes no sense");
31: }
32:
33: if (node instanceof DatatypeLiteral) {
34: URI datatype = node.asDatatypeLiteral().getDatatype();
35:
36: // TODO add handling for XSD._nonPositiveInteger and other weird
37: // types
38:
39: // Note: in general, xsd:integer cannot be handled by Java
40:
41: if (datatype.equals(XSD._int)) {
42: return toInteger(node.asDatatypeLiteral());
43: } else {
44: throw new RDFDataException(
45: "Cannot convert from datatype " + datatype
46: + " to URI");
47: }
48: }
49:
50: throw new RDFDataException("Cannot convert from "
51: + node.getClass() + " to Integer");
52: }
53:
54: public static Integer toInteger(Literal literal) {
55: return new Integer(Integer.parseInt(literal.getValue()));
56: }
57:
58: public Node toNode(Model model, Object javaValue) {
59: return model.createDatatypeLiteral("" + (Integer) javaValue,
60: XSD._int);
61: }
62:
63: }
|