1 package com.ontotext.ordi.rdbms;
2
3 import java.util.NoSuchElementException;
4
5 import org.openrdf.model.URI;
6
7 import com.ontotext.ordi.iterator.CloseableIterator;
8 import com.ontotext.ordi.mapper.model.RDFResultSet;
9 import com.ontotext.ordi.tripleset.TFactory;
10 import com.ontotext.ordi.tripleset.TStatement;
11
12 public class RDBMSCloseableIterator implements CloseableIterator<TStatement> {
13
14 private boolean isClosed = false;
15 private RDFResultSet resultSet;
16 private TFactory factory;
17 private TStatement statement;
18
19 public RDBMSCloseableIterator(RDFResultSet resultSet, TFactory factory) {
20 if (resultSet == null || factory == null) {
21 throw new IllegalArgumentException();
22 }
23 this.resultSet = resultSet;
24 this.factory = factory;
25 }
26
27 public void close() {
28 isClosed = true;
29 resultSet.close();
30 }
31
32 public boolean hasNext() {
33 if (statement == null) {
34 if (resultSet.next() == false)
35 return false;
36 statement = factory.createStatement(resultSet.getSubject(),
37 resultSet.getPredicate(), resultSet.getObject(), resultSet
38 .getNamedGraph(), new URI[0]);
39 }
40 return true;
41 }
42
43 public TStatement next() {
44 if (isClosed)
45 throw new NoSuchElementException("Iterator is closed!");
46 if (hasNext() == false)
47 throw new NoSuchElementException("No more elements are available!");
48 TStatement result = statement;
49 statement = null;
50 return result;
51 }
52
53 public void remove() {
54 if (!isClosed)
55 throw new NoSuchElementException("Iterator is closed!");
56 }
57 }