1 package com.ontotext.ordi.iterator;
2
3 import info.aduna.iteration.CloseableIteration;
4
5 import java.util.NoSuchElementException;
6
7 import org.openrdf.query.QueryEvaluationException;
8
9 import com.ontotext.ordi.tripleset.TStatement;
10
11 /**
12 * This class converts the ORDI's result iterator to Sesame's CloseableIteration<X,
13 * Exception>.
14 *
15 * @author vassil
16 *
17 * @param <X>
18 */
19 public class ConvertingIteratorImpl<X> implements
20 CloseableIteration<X, QueryEvaluationException> {
21
22 private CloseableIterator<? extends TStatement> iterator;
23 private boolean isClosed = false;
24
25 public ConvertingIteratorImpl(CloseableIterator<? extends TStatement> iterator) {
26 if (iterator == null) {
27 throw new IllegalArgumentException();
28 }
29 this.iterator = iterator;
30 }
31
32 public boolean hasNext() {
33 if (isClosed)
34 throw new NoSuchElementException("Iterator is closed!");
35 return iterator.hasNext();
36 }
37
38 public void remove() {
39 if (isClosed)
40 throw new NoSuchElementException("Iterator is closed!");
41 iterator.remove();
42 }
43
44 public void close() {
45 isClosed = true;
46 iterator.close();
47 }
48
49 @SuppressWarnings("unchecked")
50 public X next() throws QueryEvaluationException {
51 if (isClosed || hasNext() == false)
52 throw new NoSuchElementException();
53
54 try {
55 return (X) iterator.next();
56 } catch (ClassCastException e) {
57 throw new QueryEvaluationException(e);
58 }
59 }
60 }