X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fyaz4j%2FResultSet.java;h=aef52f641eb8531bcf97e5839fa67d0b65d6d85c;hb=80fe126a86a610466bdc4089f10e17fd3e683d44;hp=ab3af1a04498e69d3c2250169c397c70d2e3fa37;hpb=04a60ffa2d97a96191fcad999557818c7c95a5f9;p=yaz4j-moved-to-github.git
diff --git a/src/main/java/org/yaz4j/ResultSet.java b/src/main/java/org/yaz4j/ResultSet.java
index ab3af1a..aef52f6 100644
--- a/src/main/java/org/yaz4j/ResultSet.java
+++ b/src/main/java/org/yaz4j/ResultSet.java
@@ -1,11 +1,32 @@
package org.yaz4j;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
import org.yaz4j.exception.ZoomException;
import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p;
import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p;
import org.yaz4j.jni.yaz4jlib;
-public class ResultSet {
+/**
+ * This class represents a "buffered handle" to the result set created on the
+ * server and thus retrieving records may invlove a request to the server if
+ * those records are not locally cached. Details on how to configure the retrieval
+ * (present) process are available in the YAZ manual
+ *
+ * @see YAZ ZOOM result sets
+ *
+ * Becacuse of the server misbehaviour or errors during retrieval the
+ * "getRecord" method may either return null or throw exceptions, even when the
+ * index of retrieved records lies within the bounds of the set. Client
+ * code should be prepared for such situations.
+ *
+ * This class implements the iterable interface and as such can be used within
+ * foreach loops, it's important to note however that in this case the errors
+ * during retrieval will be masked with standard NoSuchElementExceptions
+ *
+ * @author jakub
+ */
+public class ResultSet implements Iterable {
//for GC refcount
private Connection conn;
@@ -44,7 +65,7 @@ public class ResultSet {
return this;
}
- public Record getRecord(int index) throws ZoomException {
+ public Record getRecord(long index) throws ZoomException {
SWIGTYPE_p_ZOOM_record_p record =
yaz4jlib.ZOOM_resultset_record(resultSet, index);
//may be out of range or unsupported syntax
@@ -58,6 +79,37 @@ public class ResultSet {
return new Record(record, this);
}
+ @Override
+ public Iterator iterator() {
+ return new Iterator() {
+ private long cur;
+ @Override
+ public boolean hasNext() {
+ return cur < size;
+ }
+
+ @Override
+ public Record next() {
+ try {
+ return getRecord(cur++);
+ } catch (ZoomException ze) {
+ throw new NoSuchElementException(ze.getMessage());
+ }
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException("remove operation not supported");
+ }
+ };
+ }
+
+ public ResultSet sort(String type, String spec) throws ZoomException {
+ int ret = yaz4jlib.ZOOM_resultset_sort1(resultSet, type, spec);
+ if (ret != 0) throw new ZoomException("Sorting resultset failed");
+ return this;
+ }
+
public long getHitCount() {
return size;
}