01: package org.ontoware.rdfreactor.runtime.converter;
02:
03: import java.net.MalformedURLException;
04: import java.net.URISyntaxException;
05: import java.net.URL;
06:
07: import org.ontoware.rdf2go.model.Model;
08: import org.ontoware.rdf2go.model.node.DatatypeLiteral;
09: import org.ontoware.rdf2go.model.node.LanguageTagLiteral;
10: import org.ontoware.rdf2go.model.node.Node;
11: import org.ontoware.rdf2go.model.node.PlainLiteral;
12: import org.ontoware.rdf2go.model.node.URI;
13: import org.ontoware.rdf2go.vocabulary.XSD;
14: import org.ontoware.rdfreactor.runtime.INodeConverter;
15: import org.ontoware.rdfreactor.runtime.RDFDataException;
16:
17: public class UrlConverter implements INodeConverter<java.net.URL> {
18:
19: public java.net.URL convert(Node node) {
20: if (node == null)
21: return null;
22:
23: if (node instanceof LanguageTagLiteral) {
24: throw new RDFDataException(
25: "Cannot convert a language tagged literal to a URI - it makes no sense");
26: }
27:
28: try {
29: if (node instanceof URI) {
30: return new URL(node.asURI().toString());
31: }
32:
33: if (node instanceof PlainLiteral) {
34: return new java.net.URL(node.asLiteral().getValue());
35: }
36:
37: if (node instanceof DatatypeLiteral) {
38: URI datatype = node.asDatatypeLiteral().getDatatype();
39: if (datatype.equals(XSD._anyURI)) {
40: return new java.net.URL(node.asDatatypeLiteral()
41: .getValue());
42: } else {
43: throw new RDFDataException(
44: "Cannot convert from datatype " + datatype
45: + " to URI");
46: }
47: }
48: } catch (MalformedURLException e) {
49: throw new RDFDataException("Could not convert <"
50: + node.asLiteral().getValue()
51: + "> to a java.net.URL", e);
52: }
53:
54: throw new RDFDataException("Cannot convert from "
55: + node.getClass() + " to URL");
56: }
57:
58: public URL toJava(Node node) {
59: return convert(node);
60: }
61:
62: public Node toNode(Model model, Object javaValue) {
63: try {
64: return model.createURI(((URL) javaValue).toURI() + "");
65: } catch (URISyntaxException e) {
66: throw new RDFDataException("error in URL syntax?", e);
67: }
68: }
69:
70: }
|