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 }