Expose ZOOM query object
[yaz4j-moved-to-github.git] / src / main / java / org / yaz4j / Record.java
index b1a93ca..08fd679 100644 (file)
@@ -1,50 +1,61 @@
 package org.yaz4j;
 
 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p;
-import org.yaz4j.jni.SWIGTYPE_p_int;
 import org.yaz4j.jni.yaz4jlib;
 
-public class Record {
-
-    private SWIGTYPE_p_ZOOM_record_p record = null;
-    private ResultSet resultSet = null;
-    private boolean disposed = false;
-
-    Record(SWIGTYPE_p_ZOOM_record_p record, ResultSet resultSet) {
-        this.resultSet = resultSet;
-        this.record = record;
-    }
-
-    public void finalize() {
-        dispose();
-    }
-
-    public byte[] get(String type) {
-        SWIGTYPE_p_int length = null;
-        return yaz4jlib.ZOOM_record_get_bytes(record, type, length);
-    }
-
-    public String render() {
-        return new String(get("render"));
-    }
-
-    public byte[] getContent() {
-        return get("raw");
-    }
-
-    public String getSyntax() {
-        return new String(get("syntax"));
-    }
-
-    public String getDatabase() {
-        return new String(get("database"));
-    }
-
-    public void dispose() {
-        if (!disposed) {
-            resultSet = null;
-            record = null;
-            disposed = true;
-        }
-    }
+public class Record implements Cloneable {
+
+  private SWIGTYPE_p_ZOOM_record_p record;
+  private ResultSet rset;
+  private boolean disposed = false;
+
+  Record(SWIGTYPE_p_ZOOM_record_p record, ResultSet rset) {
+    this.record = record;
+    this.rset = rset;
+  }
+
+  protected Record(SWIGTYPE_p_ZOOM_record_p record) {
+    this.record = record;
+  }
+
+  public void finalize() {
+    _dispose();
+  }
+
+  public byte[] get(String type) {
+    return yaz4jlib.ZOOM_record_get_bytes(record, type);
+  }
+
+  public String render() {
+    return new String(get("render"));
+  }
+
+  public byte[] getContent() {
+    return get("raw");
+  }
+
+  public String getSyntax() {
+    return new String(get("syntax"));
+  }
+
+  public String getDatabase() {
+    return new String(get("database"));
+  }
+
+  public Object clone() {
+    SWIGTYPE_p_ZOOM_record_p clone = yaz4jlib.ZOOM_record_clone(record);
+    return new Record(clone);
+  }
+
+  void _dispose() {
+    if (!disposed) {
+      //was cloned, need to dealloc?
+      if (rset == null) {
+        yaz4jlib.ZOOM_record_destroy(record);
+      }
+      rset = null;
+      record = null;
+      disposed = true;
+    }
+  }
 }