Fix JVM segv on null pointers
[yaz4j-moved-to-github.git] / src / main / java / org / yaz4j / Package.java
1 package org.yaz4j;
2
3 import org.yaz4j.exception.ZoomException;
4 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_package_p;
5 import org.yaz4j.jni.yaz4jlib;
6
7 /**
8  * Allows to perform an extended-service operation.
9  * 
10  * Once created, a package is configured by means of options, then the package 
11  * is send and the result is inspected (again, by means of options).
12  * 
13  * @see org.yaz4j.ConnectionExtended#getPackage(java.lang.String)
14  * 
15  * @author jakub
16  */
17 public class Package {
18   //for GC ref count
19   private ConnectionExtended conn;
20   private SWIGTYPE_p_ZOOM_package_p pack;
21   private final String type;
22
23   Package(SWIGTYPE_p_ZOOM_package_p pack, ConnectionExtended conn, String type) {
24     if (type == null)
25       throw new NullPointerException("type cannot be null");
26     this.type = type;
27     this.pack = pack;
28     this.conn = conn;
29   }
30
31   public void finalize() {
32     _dispose();
33   }
34
35   /**
36    * Write option for a specified key
37    * @param key option name
38    * @param value option value
39    * @return package (self) for chainability
40    */
41   public Package option(String key, String value) {
42     if (key == null)
43       throw new NullPointerException("option name cannot be null");
44     yaz4jlib.ZOOM_package_option_set(pack, key, value);
45     return this;
46   }
47
48   /**
49    * Read option for a specified key.
50    * @param key option name
51    * @return option value
52    */
53   public String option(String key) {
54     if (key == null)
55       throw new NullPointerException("option name cannot be null");
56     return yaz4jlib.ZOOM_package_option_get(pack, key);
57   }
58
59   /**
60    * Send the package.
61    */
62   public void send() {
63     yaz4jlib.ZOOM_package_send(pack, type);
64   }
65
66   void _dispose() {
67     if (pack != null) {
68       yaz4jlib.ZOOM_package_destroy(pack);
69       pack = null;
70       conn = null;
71     }
72   }
73 }