package com.mysema.rdfbean.sesame;
import java.io.Writer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import org.openrdf.query.TupleQuery;
import org.openrdf.result.TupleResult;
import org.openrdf.store.StoreException;
import com.mysema.commons.lang.CloseableIterator;
import com.mysema.rdfbean.model.NODE;
import com.mysema.rdfbean.model.RepositoryException;
import com.mysema.rdfbean.model.SPARQLQuery;
import com.mysema.rdfbean.model.STMT;
/**
* @author tiwe
*
*/
public class TupleQueryImpl implements SPARQLQuery {
private final Map<String, NODE> bindings = new HashMap<String, NODE>();
private final SesameDialect dialect;
private final TupleQuery query;
@Nullable
private TupleResult result;
public TupleQueryImpl(TupleQuery query, SesameDialect dialect) {
this.query = query;
this.dialect = dialect;
}
@Override
public boolean getBoolean() {
throw new UnsupportedOperationException();
}
private TupleResult getResult() throws StoreException {
if (result == null) {
result = query.evaluate();
}
return result;
}
@Override
public ResultType getResultType() {
return ResultType.TUPLES;
}
@Override
public CloseableIterator<STMT> getTriples() {
throw new UnsupportedOperationException();
}
@Override
public CloseableIterator<Map<String, NODE>> getTuples() {
try {
return new TupleResultIterator(getResult(), bindings, dialect);
} catch (StoreException e) {
throw new RepositoryException(e);
}
}
@Override
public List<String> getVariables() {
try {
return getResult().getBindingNames();
} catch (StoreException e) {
throw new RepositoryException(e);
}
}
@Override
public void streamTriples(Writer writer, String contentType) {
throw new UnsupportedOperationException();
}
@Override
public void setBinding(String variable, NODE node) {
bindings.put(variable, node);
query.setBinding(variable, dialect.getNode(node));
}
@Override
public void setMaxQueryTime(int secs) {
query.setMaxQueryTime(secs);
}
}