All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ontoware.rdf2go.impl.jena.QueryIterator Maven / Gradle / Ivy

package org.ontoware.rdf2go.impl.jena;

import org.ontoware.aifbcommons.collection.ClosableIterator;
import org.ontoware.rdf2go.exception.ModelRuntimeException;
import org.ontoware.rdf2go.model.QueryRow;
import org.ontoware.rdf2go.model.impl.QueryRowImpl;

import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.RDFNode;


public class QueryIterator implements ClosableIterator {
	
	private final ResultSet resultSet;
	
	private final QueryResultTableImpl table;
	
	public QueryIterator(QueryResultTableImpl table, ResultSet results) {
		this.resultSet = results;
		this.table = table;
	}
	
	@Override
	public boolean hasNext() {
		return this.resultSet.hasNext();
	}
	
	@Override
	/*
	 * patch from garpinc against nulls -
	 * http://issues.semweb4j.org/browse/RTGO-65
	 */
	public QueryRow next() {
		QuerySolution qs = this.resultSet.nextSolution();
		QueryRowImpl row = new QueryRowImpl();
		for(String v : this.table.getVariables()) {
			RDFNode node = qs.get(v);
			assert node != null : "null node for varname " + v
			        + ". Do you have unbound variables in the query?";
			try {
				row.put(v, TypeConversion.toRDF2Go((node == null ? null : node.asNode())));
			} catch(ModelRuntimeException e) {
				throw new ModelRuntimeException(e);
			}
		}
		return row;
	}
	
	@Override
	public void remove() {
		this.resultSet.remove();
	}
	
	@Override
	public void close() {
	}
	
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy