2 * Copyright (c) 1995-2015, Index Data
4 * See the file LICENSE for details.
6 package org.yaz4j.async;
8 import org.yaz4j.Connection;
9 import org.yaz4j.Query;
10 import org.yaz4j.Record;
11 import org.yaz4j.ResultSet;
12 import org.yaz4j.exception.ZoomException;
13 import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p;
14 import static org.yaz4j.jni.yaz4jlib.*;
15 import org.yaz4j.util.Unstable;
22 public class AsyncConnection extends Connection {
23 private ResultSet lastResultSet;
25 //make sure error is only handled once
26 boolean errorHandled = false;
27 int handledRecordOffset = 0;
32 public interface SearchHandler {
33 public void handle(ResultSet rs);
36 public interface RecordHandler {
37 public void handle(Record r);
40 public interface ErrorHandler {
41 public void handle(ZoomException e);
44 public AsyncConnection(String host, int port) {
46 ZOOM_connection_option_set(zoomConnection, "async", "1");
51 public ResultSet search(Query query) throws ZoomException {
53 lastResultSet = super.search(query);
57 public AsyncConnection onSearch(SearchHandler sh) {
62 public AsyncConnection onRecord(RecordHandler rh) {
67 public AsyncConnection onError(ErrorHandler eh) {
72 public AsyncConnection onRecordError(ErrorHandler reh) {
77 //actuall handler, pkg-private
82 if (sh != null) sh.handle(lastResultSet);
86 //TODO clone the record to detach it from the result set
88 if (rh != null) rh.handle(lastResultSet.getRecord(handledRecordOffset));
89 } catch (ZoomException ex) {
90 if (reh != null) reh.handle(ex);
92 handledRecordOffset++;
99 ZoomException err = getZoomException();
110 * Expose native connection to the async package, keep it package private.
112 SWIGTYPE_p_ZOOM_connection_p getNativeConnection() {
113 return zoomConnection;