View Javadoc

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  }