1 package com.ontotext.ordi.tripleset; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 import org.openrdf.model.URI; 8 import org.openrdf.query.BindingSet; 9 import org.openrdf.query.TupleQueryResultHandler; 10 import org.openrdf.query.TupleQueryResultHandlerException; 11 import org.openrdf.query.impl.AbstractQuery; 12 import org.openrdf.query.parser.ParsedQuery; 13 14 import com.ontotext.ordi.exception.ORDIException; 15 import com.ontotext.ordi.iterator.CloseableIterator; 16 17 public class TriplesetQuery extends AbstractQuery { 18 19 private final ParsedQuery query; 20 private final TConnection connection; 21 private final URI tripleset; 22 23 public TriplesetQuery(ParsedQuery query, TConnection connection) { 24 this(query, connection, null); 25 } 26 27 public TriplesetQuery(ParsedQuery query, TConnection connection, 28 URI tripleset) { 29 if (query == null || connection == null) { 30 throw new IllegalArgumentException(); 31 } 32 this.query = query; 33 this.connection = connection; 34 this.tripleset = tripleset; 35 super.dataset = query.getDataset(); 36 } 37 38 public void evaluate(TupleQueryResultHandler handler) throws ORDIException { 39 try { 40 List<String> bindings = new ArrayList<String>(); 41 for (Iterator<String> i = query.getTupleExpr().getBindingNames() 42 .iterator(); i.hasNext();) { 43 bindings.add(i.next()); 44 } 45 handler.startQueryResult(bindings); 46 47 CloseableIterator<? extends BindingSet> iterator = connection 48 .evaluate(query.getTupleExpr(), getBindings(), 49 getDataset(), getIncludeInferred(), tripleset); 50 51 while (iterator.hasNext()) { 52 handler.handleSolution(iterator.next()); 53 } 54 handler.endQueryResult(); 55 } catch (TupleQueryResultHandlerException te) { 56 return; 57 } 58 } 59 }