View Javadoc

1   /*
2    * Copyright James Leigh (c) 2006, 2007.
3    *
4    * Licensed under the Aduna BSD-style license.
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   * Tags every Resource with a AugurNode by wrapping it in a AResource.
24   * 
25   * @author James Leigh
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  }