3 import org.yaz4j.exception.ZoomException;
4 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p;
5 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_query_p;
6 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p;
7 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_scanset_p;
8 import org.yaz4j.jni.yaz4jlib;
10 public class Connection {
13 protected SWIGTYPE_p_ZOOM_connection_p zoomConnection;
14 //connection is initially closed
15 protected boolean closed = true;
16 private boolean disposed = false;
18 public enum QueryType {
23 // on Linux 'yaz4j' maps to 'libyaz4j.so' (i.e. 'lib' prefix & '.so' extension)
24 // on Windows 'yaz4j' maps to 'yaz4j.dll' (i.e. '.dll' extension)
25 String libName = "yaz4j";
26 System.loadLibrary(libName);
29 public Connection(String host, int port) {
32 zoomConnection = yaz4jlib.ZOOM_connection_create(null);
35 public void finalize() {
39 public ResultSet search(String query, QueryType queryType) throws ZoomException {
40 if (closed) throw new IllegalStateException("Connection is closed.");
41 SWIGTYPE_p_ZOOM_query_p yazQuery = null;
42 if (queryType == QueryType.CQLQuery) {
43 yazQuery = yaz4jlib.ZOOM_query_create();
44 yaz4jlib.ZOOM_query_cql(yazQuery, query);
45 } else if (queryType == QueryType.PrefixQuery) {
46 yazQuery = yaz4jlib.ZOOM_query_create();
47 yaz4jlib.ZOOM_query_prefix(yazQuery, query);
49 SWIGTYPE_p_ZOOM_resultset_p yazResultSet = yaz4jlib.ZOOM_connection_search(zoomConnection, yazQuery);
50 ZoomException err = ExceptionUtil.getError(zoomConnection, host,
53 yaz4jlib.ZOOM_resultset_destroy(yazResultSet);
54 yaz4jlib.ZOOM_query_destroy(yazQuery);
57 return new ResultSet(yazResultSet, this);
60 public ScanSet scan(String query) throws ZoomException {
61 if (closed) throw new IllegalStateException("Connection is closed.");
62 SWIGTYPE_p_ZOOM_scanset_p yazScanSet = yaz4jlib.ZOOM_connection_scan(zoomConnection, query);
63 ZoomException err = ExceptionUtil.getError(zoomConnection, host, port);
65 yaz4jlib.ZOOM_scanset_destroy(yazScanSet);
68 ScanSet scanSet = new ScanSet(yazScanSet, this);
73 * Initiates the connection
75 public void connect() throws ZoomException {
76 yaz4jlib.ZOOM_connection_connect(zoomConnection, host, port);
77 ZoomException err = ExceptionUtil.getError(zoomConnection, host, port);
78 if (err != null) throw err;
83 * Closes the connection.
86 yaz4jlib.ZOOM_connection_close(zoomConnection);
91 * Write option with a given name.
92 * @param name option name
93 * @param value option value
94 * @return connection (self) for chainability
96 public Connection option(String name, String value) {
97 yaz4jlib.ZOOM_connection_option_set(zoomConnection, name, value);
102 * Read option with a given name
103 * @param name option name
104 * @return option value
106 public String option(String name) {
107 return yaz4jlib.ZOOM_connection_option_get(zoomConnection, name);
110 public String getSyntax() {
111 return option("preferredRecordSyntax");
114 public void setSyntax(String value) {
115 option("preferredRecordSyntax", value);
118 public String getDatabaseName() {
119 return option("databaseName");
122 public void setDatabaseName(String value) {
123 option("databaseName", value);
126 public String getUsername() {
127 return option("user");
130 public void setUsername(String value) {
131 option("user", value);
134 public String getPassword() {
135 return option("password");
138 public void setPassword(String value) {
139 option("password", value);
147 yaz4jlib.ZOOM_connection_destroy(zoomConnection);
148 zoomConnection = null;