1
2
3
4
5
6 package org.openrdf.repository.augur.helpers;
7
8 import info.aduna.iteration.ConvertingIteration;
9 import info.aduna.iteration.Iteration;
10
11 import org.openrdf.model.BNode;
12 import org.openrdf.model.Resource;
13 import org.openrdf.model.Statement;
14 import org.openrdf.model.URI;
15 import org.openrdf.model.Value;
16 import org.openrdf.model.impl.ContextStatementImpl;
17 import org.openrdf.repository.augur.model.ABNode;
18 import org.openrdf.repository.augur.model.AURI;
19 import org.openrdf.repository.augur.model.AugurNode;
20 import org.openrdf.repository.augur.model.AugurStatementNode;
21
22
23
24
25
26
27
28 public class AStatementIterator<X extends Exception> extends ConvertingIteration<Statement, Statement, X> {
29
30 private AugurNode node;
31
32 private String subjectName;
33
34 private String objectName;
35
36 public AStatementIterator(Iteration<? extends Statement, X> iter, AugurStatementNode node) {
37 this(iter, node, node.getSubjectName(), node.getObjectName());
38 }
39
40 public AStatementIterator(Iteration<? extends Statement, X> iter, AugurNode node, String subj,
41 String obj)
42 {
43 super(iter);
44 this.node = node;
45 this.subjectName = subj;
46 this.objectName = obj;
47 }
48
49 @Override
50 protected Statement convert(Statement stmt) {
51 Resource subject = convertSubject(stmt.getSubject());
52 URI predicate = stmt.getPredicate();
53 Value object = convertObject(stmt.getObject());
54 Resource context = stmt.getContext();
55 return new ContextStatementImpl(subject, predicate, object, context);
56 }
57
58 public Resource convertSubject(Resource subj) {
59 return toAResource(subjectName, subj, node);
60 }
61
62 public Value convertObject(Value obj) {
63 return toAResource(objectName, obj, node);
64 }
65
66 @SuppressWarnings("unchecked")
67 private <T extends Value> T toAResource(String name, T value, AugurNode node) {
68 if (value instanceof URI) {
69 AURI uri = new AURI(name, (URI)value, node);
70 return (T)uri;
71 }
72 else if (value instanceof BNode) {
73 ABNode bNode = new ABNode(name, (BNode)value, node);
74 return (T)bNode;
75 }
76 return value;
77 }
78
79 }