Refactor.
[yaz4j-moved-to-github.git] / src / main / java / org / yaz4j / ResultSet.java
1 package org.yaz4j;
2
3 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p;
4 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p;
5 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p;
6 import org.yaz4j.jni.yaz4jlib;
7
8 public class ResultSet {
9
10     private SWIGTYPE_p_ZOOM_resultset_p resultSet;
11     private SWIGTYPE_p_ZOOM_connection_p connection;
12     private long size = 0;
13     private boolean disposed = false;
14
15     ResultSet(SWIGTYPE_p_ZOOM_resultset_p resultSet, SWIGTYPE_p_ZOOM_connection_p connection) {
16         this.resultSet = resultSet;
17         this.connection = connection;
18         size = yaz4jlib.ZOOM_resultset_size(this.resultSet);
19     }
20
21     @Override
22     public void finalize() {
23         this._dispose();
24     }
25
26     /**
27      * Read option by name.
28      * @param name option name
29      * @return option value
30      */
31     public String option(String name) {
32       return yaz4jlib.ZOOM_resultset_option_get(resultSet, name);
33     }
34
35     /**
36      * Write option with a given name.
37      * @param name option name
38      * @param value option value
39      * @return result set (self) for chainability
40      */
41     public ResultSet option(String name, String value) {
42       yaz4jlib.ZOOM_resultset_option_set(resultSet, name, value);
43       return this;
44     }
45
46     public Record getRecord(int index) {
47       SWIGTYPE_p_ZOOM_record_p recordTemp = yaz4jlib.ZOOM_resultset_record(resultSet, index);
48       return new Record(recordTemp, this);
49     }
50
51     public long getSize() {
52         return size;
53     }
54
55     void _dispose() {
56         if (!disposed) {
57             yaz4jlib.ZOOM_resultset_destroy(resultSet);
58             connection = null;
59             resultSet = null;
60             disposed = true;
61         }
62     }
63 }