Added support for getRecords method
authorSimon Jacob <sjacob@nla.gov.au>
Sun, 16 Dec 2012 22:20:28 +0000 (09:20 +1100)
committerJakub Skoczen <jakub@indexdata.dk>
Mon, 11 Feb 2013 09:52:12 +0000 (10:52 +0100)
Signed-off-by: Jakub Skoczen <jakub@indexdata.dk>

src/main/java/org/yaz4j/ResultSet.java
src/main/swig/libyaz4j.i

index aef52f6..a60f9a5 100644 (file)
@@ -1,9 +1,12 @@
 package org.yaz4j;
 
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 import java.util.NoSuchElementException;
 import org.yaz4j.exception.ZoomException;
 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p;
+import org.yaz4j.jni.SWIGTYPE_p_p_ZOOM_record_p;
 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p;
 import org.yaz4j.jni.yaz4jlib;
 
@@ -78,6 +81,29 @@ public class ResultSet implements Iterable<Record> {
     }
     return new Record(record, this);
   }
+  
+  public List<Record> getRecords(long start, int count) throws ZoomException {
+       List<Record> out = new ArrayList<Record>(count);
+       
+       SWIGTYPE_p_p_ZOOM_record_p recs = yaz4jlib.new_zoomRecordArray(count);
+       yaz4jlib.ZOOM_resultset_records(resultSet, recs, start, count);
+       
+       for (int i = 0; i < count; i++) {
+               SWIGTYPE_p_ZOOM_record_p record = yaz4jlib.zoomRecordArray_getitem(recs, i);
+               if (record == null) {
+                       continue;
+               }
+               
+               int errorCode = yaz4jlib.ZOOM_record_error(record, null, null, null);
+           if (errorCode != 0) {
+             throw new ZoomException("Record excpetion, code " + errorCode);
+           }
+           
+           out.add(new Record(record, this));
+       }
+
+    return out;
+  }
 
   @Override
   public Iterator<Record> iterator() {
index 3e686e2..97a74cb 100644 (file)
@@ -9,6 +9,8 @@
        %include "cpointer.i"
        %pointer_functions(int, intp);
        %pointer_functions(size_t, size_tp);
+       %include "carrays.i"
+       %array_functions(ZOOM_record, zoomRecordArray);
        %typemap(jni) CharStarByteArray "jbyteArray"
        %typemap(jtype) CharStarByteArray "byte[]"
        %typemap(jstype) CharStarByteArray "byte[]"