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.URI;
13  import org.openrdf.model.Value;
14  import org.openrdf.query.Binding;
15  import org.openrdf.query.BindingSet;
16  import org.openrdf.query.impl.BindingImpl;
17  import org.openrdf.query.impl.MapBindingSet;
18  import org.openrdf.repository.augur.model.ABNode;
19  import org.openrdf.repository.augur.model.AURI;
20  import org.openrdf.repository.augur.model.AugurNode;
21  
22  /**
23   * Tags a solution iterator resources with an AugurNode.
24   * 
25   * @author James Leigh
26   */
27  public class ASolutionIterator<X extends Exception> extends ConvertingIteration<BindingSet, BindingSet, X> {
28  
29  	private AugurNode node;
30  
31  	public ASolutionIterator(Iteration<? extends BindingSet, X> iter, AugurNode node) {
32  		super(iter);
33  		this.node = node;
34  	}
35  
36  	@Override
37  	protected BindingSet convert(BindingSet bindingSet)
38  	{
39  		MapBindingSet result = new MapBindingSet(bindingSet.size());
40  		for (Binding binding : bindingSet) {
41  			String name = binding.getName();
42  			Value value = binding.getValue();
43  			if (value instanceof URI) {
44  				value = new AURI(name, (URI)value, node);
45  			}
46  			else if (value instanceof BNode) {
47  				value = new ABNode(name, (BNode)value, node);
48  			}
49  			binding = new BindingImpl(name, value);
50  			result.addBinding(binding);
51  		}
52  		return result;
53  	}
54  }