Simplify the API.
+++ /dev/null
-package org.yaz4j;
-
-import java.util.Hashtable;
-
-class Bib1Diagnostic {
-
- private static Hashtable<Integer, String> errorCodes = new Hashtable<Integer, String>();
-
- static {
- errorCodes.put(1, "PermanentSystemError");
- errorCodes.put(2, "TemporarySystemError");
- errorCodes.put(3, "UnsupportedSearch");
- errorCodes.put(4, "TermsOnlyIncludesExclusionOrStopWords");
- errorCodes.put(5, "TooManyArgumentWords");
- errorCodes.put(6, "TooManyBooleanOperators");
- errorCodes.put(7, "TooManyTruncatedWords");
- errorCodes.put(8, "TooManyIncompleteSubfields");
- errorCodes.put(9, "TruncatedWordsTooShort");
- errorCodes.put(10, "InvalidFormatForRecordNumberInSearchTerm");
- errorCodes.put(11, "TooManyCharactersInSearchStatement");
- errorCodes.put(12, "TooManyRecordsRetrieved");
- errorCodes.put(13, "PresentRequestOutOfRange");
- errorCodes.put(14, "SystemErrorInPresentingRecords");
- errorCodes.put(15, "RecordNotAuthorizedToBeSentIntersystem");
- errorCodes.put(16, "RecordExceedsPreferredMessageSize");
- errorCodes.put(17, "RecordExceedsExceptionalRecordSize");
- errorCodes.put(18, "ResultSetNotSupportedAsASearchTerm");
- errorCodes.put(19, "OnlySingleResultSetAsSearchTermSupported");
- errorCodes.put(20, "OnlyAndingOfASingleResultSetAsSearchTerm");
- errorCodes.put(21, "ResultSetExistsAndReplaceIndicatorOff");
- errorCodes.put(22, "ResultSetNamingNotSupported");
- errorCodes.put(23, "SpecifiedCombinationOfDatabasesNotSupported");
- errorCodes.put(24, "ElementSetNamesNotSupported");
- errorCodes.put(25, "SpecifiedElementSetNameNotValidForSpecifiedDatabase");
- errorCodes.put(26, "OnlyGenericFormOfElementSetNameSupported");
- errorCodes.put(27, "ResultSetNoLongerExistsUnilaterallyDeletedByTarget");
- errorCodes.put(28, "ResultSetIsInUse");
- errorCodes.put(29, "OneOfTheSpecifiedDatabasesIsLocked");
- errorCodes.put(30, "SpecifiedResultSetDoesNotExist");
- errorCodes.put(31, "ResourcesExhaustedNoResultsAvailable");
- errorCodes.put(32, "ResourcesExhaustedUnpredictablePartialResultsAvailable");
- errorCodes.put(33, "ResourcesExhaustedValidSubsetOfResultsAvailable");
- errorCodes.put(100, "UnspecifiedError");
- errorCodes.put(101, "AccessControlFailure");
- errorCodes.put(102, "ChallengeRequiredCouldNotBeIssuedOperationTerminated");
- errorCodes.put(103, "ChallengeRequiredCouldNotBeIssuedRecordNotIncluded");
- errorCodes.put(104, "ChallengeFailedRecordNotIncluded");
- errorCodes.put(105, "TerminatedAtOriginRequest");
- errorCodes.put(106, "NoAbstractSyntaxesAgreedToForThisRecord");
- errorCodes.put(107, "QueryTypeNotSupported");
- errorCodes.put(108, "MalformedQuery");
- errorCodes.put(109, "DatabaseUnavailable");
- errorCodes.put(110, "OperatorUnsupported");
- errorCodes.put(111, "TooManyDatabasesSpecified");
- errorCodes.put(112, "TooManyResultSetsCreated");
- errorCodes.put(113, "UnsupportedAttributeType");
- errorCodes.put(114, "UnsupportedUseAttribute");
- errorCodes.put(115, "UnsupportedTermValueForUseAttribute");
- errorCodes.put(116, "UseAttributeRequiredButNotSupplied");
- errorCodes.put(117, "UnsupportedRelationAttribute");
- errorCodes.put(118, "UnsupportedStructureAttribute");
- errorCodes.put(119, "UnsupportedPositionAttribute");
- errorCodes.put(120, "UnsupportedTruncationAttribute");
- errorCodes.put(121, "UnsupportedAttributeSet");
- errorCodes.put(122, "UnsupportedCompletenessAttribute");
- errorCodes.put(123, "UnsupportedAttributeCombination");
- errorCodes.put(124, "UnsupportedCodedValueForTerm");
- errorCodes.put(125, "MalformedSearchTerm");
- errorCodes.put(126, "IllegalTermValueForAttribute");
- errorCodes.put(127, "UnparsableFormatForUnNormalizedValue");
- errorCodes.put(128, "IllegalResultSetName");
- errorCodes.put(129, "ProximitySearchOfSetsNotSupported");
- errorCodes.put(130, "IllegalResultSetInProximitySearch");
- errorCodes.put(131, "UnsupportedProximityRelation");
- errorCodes.put(132, "UnsupportedProximityUnitCode");
- errorCodes.put(201, "ProximityNotSupportedWithThisAttributeCombinationAttribute");
- errorCodes.put(202, "UnsupportedDistanceForProximity");
- errorCodes.put(203, "OrderedFlagNotSupportedForProximity");
- errorCodes.put(205, "OnlyZeroStepSizeSupportedForScan");
- errorCodes.put(206, "SpecifiedStepSizeNotSupportedForScanStep");
- errorCodes.put(207, "CannotSortAccordingToSequence");
- errorCodes.put(208, "NoResultSetNameSuppliedOnSort");
- errorCodes.put(209, "GenericSortNotSupported");
- errorCodes.put(210, "DatabaseSpecificSortNotSupported");
- errorCodes.put(211, "TooManySortKeys");
- errorCodes.put(212, "DuplicateSortKeys");
- errorCodes.put(213, "UnsupportedMissingDataAction");
- errorCodes.put(214, "IllegalSortRelation");
- errorCodes.put(215, "IllegalCaseValue");
- errorCodes.put(216, "IllegalMissingDataAction");
- errorCodes.put(217, "SegmentationCannotGuaranteeRecordsWillFitInSpecifiedSegments");
- errorCodes.put(218, "EsPackageNameAlreadyInUse");
- errorCodes.put(219, "EsNoSuchPackageOnModifyDelete");
- errorCodes.put(220, "EsQuotaExceeded");
- errorCodes.put(221, "EsExtendedServiceTypeNotSupported");
- errorCodes.put(222, "EsPermissionDeniedOnEsIdNotAuthorized");
- errorCodes.put(223, "EsPermissionDeniedOnEsCannotModifyOrDelete");
- errorCodes.put(224, "EsImmediateExecutionFailed");
- errorCodes.put(225, "EsImmediateExecutionNotSupportedForThisService");
- errorCodes.put(226, "EsImmediateExecutionNotSupportedForTheseParameters");
- errorCodes.put(227, "NoDataAvailableInRequestedRecordSyntax");
- errorCodes.put(228, "ScanMalformedScan");
- errorCodes.put(229, "TermTypeNotSupported");
- errorCodes.put(230, "SortTooManyInputResults");
- errorCodes.put(231, "SortIncompatibleRecordFormats");
- errorCodes.put(232, "ScanTermListNotSupported");
- errorCodes.put(233, "ScanUnsupportedValueOfPositionInResponse");
- errorCodes.put(234, "TooManyIndexTermsProcessed");
- errorCodes.put(235, "DatabaseDoesNotExist");
- errorCodes.put(236, "AccessToSpecifiedDatabaseDenied");
- errorCodes.put(237, "SortIllegalSort");
- errorCodes.put(238, "RecordNotAvailableInRequestedSyntax");
- errorCodes.put(239, "RecordSyntaxNotSupported");
- errorCodes.put(240, "ScanResourcesExhaustedLookingForSatisfyingTerms");
- errorCodes.put(241, "ScanBeginningOrEndOfTermList");
- errorCodes.put(242, "SegmentationMaxSegmentSizeTooSmallToSegmentRecord");
- errorCodes.put(243, "PresentAdditionalRangesParameterNotSupported");
- errorCodes.put(244, "PresentCompSpecParameterNotSupported");
- errorCodes.put(245, "Type1QueryRestrictionOperandNotSupported");
- errorCodes.put(246, "Type1QueryComplexAttributevalueNotSupported");
- errorCodes.put(247, "Type1QueryAttributesetAsPartOfAttributeelementNotSupported");
- }
-
- public static String getError(int errorCode) {
- String errorText = "Unknown Error";
-
- if (errorCodes.containsKey(errorCode)) {
- errorText = errorCodes.get(errorCode);
- }
-
- return errorText;
- }
-}
+++ /dev/null
-package org.yaz4j;
-
-public class Bib1Exception extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public Bib1Exception() {
- super();
- }
-
- public Bib1Exception(String message) {
- super(message);
- }
-}
+++ /dev/null
-package org.yaz4j;
-
-public class CQLQuery {
-
- private String query = null;
-
- public CQLQuery(String query) {
- this.query = query;
- }
-
- public String getQueryString() {
- return query;
- }
-
- public void setQueryString(String query) {
- this.query = query;
- }
-}
package org.yaz4j;
+import org.yaz4j.exception.ZoomImplementationException;
+import org.yaz4j.exception.ConnectionTimeoutException;
+import org.yaz4j.exception.InitRejectedException;
+import org.yaz4j.exception.Bib1Exception;
+import org.yaz4j.exception.InvalidQueryException;
+import org.yaz4j.exception.Bib1Diagnostic;
+import org.yaz4j.exception.ConnectionUnavailableException;
+import org.yaz4j.exception.ZoomException;
import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p;
import org.yaz4j.jni.SWIGTYPE_p_ZOOM_query_p;
import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p;
import org.yaz4j.jni.SWIGTYPE_p_ZOOM_scanset_p;
-import org.yaz4j.jni.SWIGTYPE_p_p_char;
+import org.yaz4j.jni.SWIGTYPE_p_ZOOM_options_p;
import org.yaz4j.jni.yaz4jlib;
import org.yaz4j.jni.yaz4jlibConstants;
public class Connection {
-
private String host;
private int port;
- private ConnectionOptionsCollection options = null;
- protected SWIGTYPE_p_ZOOM_connection_p zoomConnection = null;
- private boolean connected = false;
+ final private SWIGTYPE_p_ZOOM_options_p options;
+ protected SWIGTYPE_p_ZOOM_connection_p zoomConnection;
+ //connection is initially closed
+ protected boolean closed = true;
private boolean disposed = false;
+ public enum QueryType {
+ CQLQuery, PrefixQuery
+ };
+
static {
// on Linux 'yaz4j' maps to 'libyaz4j.so' (i.e. 'lib' prefix & '.so' extension)
// on Windows 'yaz4j' maps to 'yaz4j.dll' (i.e. '.dll' extension)
try {
// System.err.println( "Loading library '"+ System.mapLibraryName( libName ) + "'" );
System.loadLibrary(libName);
- } catch (Throwable e) {
+ } catch (AbstractMethodError e) {
System.err.println("Fatal Error: Failed to load library '" + System.mapLibraryName(libName) + "'");
e.printStackTrace();
}
public Connection(String host, int port) {
this.host = host;
this.port = port;
-
- options = new ConnectionOptionsCollection();
- zoomConnection = yaz4jlib.ZOOM_connection_create(options.zoomOptions);
-
- //remove
- SWIGTYPE_p_p_char cp = null;
- SWIGTYPE_p_p_char addinfo = null;
- int errorCode = yaz4jlib.ZOOM_connection_error(zoomConnection, cp, addinfo);
- checkErrorCodeAndThrow(errorCode);
+ options = yaz4jlib.ZOOM_options_create();
}
public void finalize() {
- dispose();
- }
-
- private void checkErrorCodeAndThrow(int errorCode) {
- String message;
-
- if (errorCode == yaz4jlibConstants.ZOOM_ERROR_NONE) {
- return;
- } else if (errorCode == yaz4jlib.ZOOM_ERROR_CONNECT) {
- message = String.format("Connection could not be made to %s:%d", host, port);
- throw new ConnectionUnavailableException(message);
- } else if (errorCode == yaz4jlib.ZOOM_ERROR_INVALID_QUERY) {
- message = String.format("The query requested is not valid or not supported");
- throw new InvalidQueryException(message);
- } else if (errorCode == yaz4jlib.ZOOM_ERROR_INIT) {
- message = String.format("Server %s:%d rejected our init request", host, port);
- throw new InitRejectedException(message);
- } else if (errorCode == yaz4jlib.ZOOM_ERROR_TIMEOUT) {
- message = String.format("Server %s:%d timed out handling our request", host, port);
- throw new ConnectionTimeoutException(message);
- } else if ((errorCode == yaz4jlib.ZOOM_ERROR_MEMORY) || (errorCode == yaz4jlib.ZOOM_ERROR_ENCODE) || (errorCode == yaz4jlib.ZOOM_ERROR_DECODE) || (errorCode == yaz4jlib.ZOOM_ERROR_CONNECTION_LOST) || (errorCode == yaz4jlib.ZOOM_ERROR_INTERNAL) || (errorCode == yaz4jlib.ZOOM_ERROR_UNSUPPORTED_PROTOCOL) || (errorCode == yaz4jlib.ZOOM_ERROR_UNSUPPORTED_QUERY)) {
- message = yaz4jlib.ZOOM_connection_errmsg(zoomConnection);
- throw new ZoomImplementationException("A fatal error occurred in Yaz: " + errorCode + " - " + message);
- } else {
- String errMsgBib1 = "Bib1Exception: Error Code = " + errorCode + " (" + Bib1Diagnostic.getError(errorCode) + ")";
- throw new Bib1Exception(errMsgBib1);
- }
+ _dispose();
}
- private enum QueryType {
-
- CQLQuery, PrefixQuery
- };
-
- public ResultSet search(PrefixQuery query) {
- return search(query.getQueryString(), QueryType.PrefixQuery);
- }
-
- public ResultSet search(CQLQuery query) {
- return search(query.getQueryString(), QueryType.CQLQuery);
- }
-
- private ResultSet search(String query, QueryType queryType) {
- ensureConnected();
-
+ public ResultSet search(String query, QueryType queryType) throws ZoomException {
+ if (closed) throw new IllegalStateException("Connection is closed.");
SWIGTYPE_p_ZOOM_query_p yazQuery = yaz4jlib.ZOOM_query_create();
ResultSet resultSet = null;
return resultSet;
}
- public ScanSet scan(String query) {
- ensureConnected();
+ public ScanSet scan(String query) throws ZoomException {
+ if (closed) throw new IllegalStateException("Connection is closed.");
SWIGTYPE_p_ZOOM_scanset_p yazScanSet = yaz4jlib.ZOOM_connection_scan(zoomConnection, query);
int errorCode = yaz4jlib.ZOOM_connection_errcode(zoomConnection);
return scanSet;
}
- public ConnectionOptionsCollection getOptions() {
- return options;
- }
+ /**
+ * Initiates the connection
+ */
+ public void connect() throws ZoomException {
+ //this is temporary before ZOOM-C has proper close method, right now
+ // simply recreate connection
+ if (closed)
+ zoomConnection = yaz4jlib.ZOOM_connection_create(options);
+ yaz4jlib.ZOOM_connection_connect(zoomConnection, host, port);
+ int errorCode = yaz4jlib.ZOOM_connection_errcode(zoomConnection);
+ checkErrorCodeAndThrow(errorCode);
+ closed = false;
+ }
+
+ /**
+ * Closes the connection.
+ */
+ public void close() {
+ if (!closed) {
+ yaz4jlib.ZOOM_connection_destroy(zoomConnection);
+ zoomConnection = null;
+ closed = true;
+ }
+ }
+
+ private void checkErrorCodeAndThrow(int errorCode) throws ZoomException {
+ String message;
- protected void ensureConnected() {
- if (!connected) {
- connect();
+ if (errorCode == yaz4jlibConstants.ZOOM_ERROR_NONE) {
+ return;
+ } else if (errorCode == yaz4jlib.ZOOM_ERROR_CONNECT) {
+ message = String.format("Connection could not be made to %s:%d", host, port);
+ throw new ConnectionUnavailableException(message);
+ } else if (errorCode == yaz4jlib.ZOOM_ERROR_INVALID_QUERY) {
+ message = String.format("The query requested is not valid or not supported");
+ throw new InvalidQueryException(message);
+ } else if (errorCode == yaz4jlib.ZOOM_ERROR_INIT) {
+ message = String.format("Server %s:%d rejected our init request", host, port);
+ throw new InitRejectedException(message);
+ } else if (errorCode == yaz4jlib.ZOOM_ERROR_TIMEOUT) {
+ message = String.format("Server %s:%d timed out handling our request", host, port);
+ throw new ConnectionTimeoutException(message);
+ } else if ((errorCode == yaz4jlib.ZOOM_ERROR_MEMORY) || (errorCode == yaz4jlib.ZOOM_ERROR_ENCODE) || (errorCode == yaz4jlib.ZOOM_ERROR_DECODE) || (errorCode == yaz4jlib.ZOOM_ERROR_CONNECTION_LOST) || (errorCode == yaz4jlib.ZOOM_ERROR_INTERNAL) || (errorCode == yaz4jlib.ZOOM_ERROR_UNSUPPORTED_PROTOCOL) || (errorCode == yaz4jlib.ZOOM_ERROR_UNSUPPORTED_QUERY)) {
+ message = yaz4jlib.ZOOM_connection_errmsg(zoomConnection);
+ throw new ZoomImplementationException("A fatal error occurred in Yaz: " + errorCode + " - " + message);
+ } else {
+ String errMsgBib1 = "Bib1Exception: Error Code = " + errorCode + " (" + Bib1Diagnostic.getError(errorCode) + ")";
+ throw new Bib1Exception(errMsgBib1);
}
}
- public void connect() {
- yaz4jlib.ZOOM_connection_connect(zoomConnection, host, port);
- int errorCode = yaz4jlib.ZOOM_connection_errcode(zoomConnection);
- checkErrorCodeAndThrow(errorCode);
- connected = true;
+ /**
+ * Write option with a given name.
+ * @param name option name
+ * @param value option value
+ * @return connection (self) for chainability
+ */
+ public Connection option(String name, String value) {
+ yaz4jlib.ZOOM_options_set(options, name, value);
+ return this;
}
- public void dispose() {
- if (!disposed) {
- yaz4jlib.ZOOM_connection_destroy(zoomConnection);
- zoomConnection = null;
- disposed = true;
- }
+ /**
+ * Read option with a given name
+ * @param name option name
+ * @return option value
+ */
+ public String option(String name) {
+ return yaz4jlib.ZOOM_options_get(options, name);
}
public String getSyntax() {
- return options.get("preferredRecordSyntax");
+ return option("preferredRecordSyntax");
}
public void setSyntax(String value) {
- options.set("preferredRecordSyntax", value);
+ option("preferredRecordSyntax", value);
}
public String getDatabaseName() {
- return options.get("databaseName");
+ return option("databaseName");
}
public void setDatabaseName(String value) {
- options.set("databaseName", value);
+ option("databaseName", value);
}
public String getUsername() {
- return options.get("user");
+ return option("user");
}
public void setUsername(String value) {
- options.set("user", value);
+ option("user", value);
}
public String getPassword() {
- return options.get("password");
+ return option("password");
}
public void setPassword(String value) {
- options.set("password", value);
+ option("password", value);
+ }
+
+ /**
+ * INTERNAL, GC-ONLY
+ */
+ void _dispose() {
+ if (!disposed) {
+ close();
+ disposed = true;
+ }
}
}
}
public Package getPackage(String type) {
- ensureConnected();
+ if (closed) throw new IllegalStateException("Connection is closed.");
Package pack = null;
-
SWIGTYPE_p_ZOOM_options_p options = yaz4jlib.ZOOM_options_create();
-
SWIGTYPE_p_ZOOM_package_p yazPackage = yaz4jlib.ZOOM_connection_package(zoomConnection, options);
pack = new Package(yazPackage, this, type);
return pack;
+++ /dev/null
-package org.yaz4j;
-
-import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p;
-import org.yaz4j.jni.SWIGTYPE_p_ZOOM_options_p;
-import org.yaz4j.jni.yaz4jlib;
-
-public class ConnectionOptionsCollection {
-
- SWIGTYPE_p_ZOOM_options_p zoomOptions = null;
-
- ConnectionOptionsCollection() {
- zoomOptions = yaz4jlib.ZOOM_options_create();
- }
-
- public void finalize() {
- dispose();
- }
-
- public void dispose() {
- yaz4jlib.ZOOM_options_destroy(zoomOptions);
- zoomOptions = null;
- }
-
- SWIGTYPE_p_ZOOM_connection_p createConnection() {
- return yaz4jlib.ZOOM_connection_create(zoomOptions);
- }
-
- public String get(String key) {
- return yaz4jlib.ZOOM_options_get(zoomOptions, key);
- }
-
- public void set(String key, String value) {
- yaz4jlib.ZOOM_options_set(zoomOptions, key, value);
- }
-}
+++ /dev/null
-package org.yaz4j;
-
-public class ConnectionTimeoutException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public ConnectionTimeoutException() {
- super();
- }
-
- public ConnectionTimeoutException(String message) {
- super(message);
- }
-}
+++ /dev/null
-package org.yaz4j;
-
-public class ConnectionUnavailableException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public ConnectionUnavailableException() {
- super();
- }
-
- public ConnectionUnavailableException(String message) {
- super(message);
- }
-}
+++ /dev/null
-package org.yaz4j;
-
-public class InitRejectedException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public InitRejectedException() {
- super();
- }
-
- public InitRejectedException(String message) {
- super(message);
- }
-}
+++ /dev/null
-package org.yaz4j;
-
-public class InvalidQueryException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public InvalidQueryException() {
- super();
- }
-
- public InvalidQueryException(String message) {
- super(message);
- }
-}
import org.yaz4j.jni.yaz4jlib;
public class Package {
-
- private SWIGTYPE_p_ZOOM_package_p pack = null;
- private ConnectionExtended connection = null;
+ private SWIGTYPE_p_ZOOM_package_p pack;
+ private ConnectionExtended connection;
private String type;
Package(SWIGTYPE_p_ZOOM_package_p pack, ConnectionExtended connection, String type) {
}
public void finalize() {
- dispose();
+ _dispose();
+ }
+
+ /**
+ * Write option for a specified key
+ * @param key option name
+ * @param value option value
+ * @return package (self) for chainability
+ */
+ public Package option(String key, String value) {
+ yaz4jlib.ZOOM_package_option_set(pack, key, value);
+ return this;
}
- public PackageOptionsCollection getPackageOptions() {
- return new PackageOptionsCollection(pack);
+ /**
+ * Read option for a specified key.
+ * @param key option name
+ * @return option value
+ */
+ public String option(String key) {
+ return yaz4jlib.ZOOM_package_option_get(pack, key);
}
+ /**
+ * Send the package.
+ */
public void send() {
yaz4jlib.ZOOM_package_send(pack, type);
}
- public void dispose() {
+ void _dispose() {
if (pack != null) {
yaz4jlib.ZOOM_package_destroy(pack);
connection = null;
+++ /dev/null
-package org.yaz4j;
-
-import org.yaz4j.jni.SWIGTYPE_p_ZOOM_package_p;
-import org.yaz4j.jni.yaz4jlib;
-
-public class PackageOptionsCollection {
-
- private SWIGTYPE_p_ZOOM_package_p pack = null;
-
- PackageOptionsCollection(SWIGTYPE_p_ZOOM_package_p pack) {
- this.pack = pack;
- }
-
- public void dispose() {
- pack = null;
- }
-
- public String get(String key) {
- return yaz4jlib.ZOOM_package_option_get(pack, key);
- }
-
- public void set(String key, String value) {
- yaz4jlib.ZOOM_package_option_set(pack, key, value);
- }
-}
+++ /dev/null
-package org.yaz4j;
-
-public class PrefixQuery {
-
- private String query = null;
-
- public PrefixQuery(String query) {
- this.query = query;
- }
-
- public String getQueryString() {
- return query;
- }
-
- public void setQueryString(String query) {
- this.query = query;
- }
-}
}
public void finalize() {
- dispose();
+ _dispose();
}
public byte[] get(String type) {
return new String(get("database"));
}
- public void dispose() {
+ void _dispose() {
if (!disposed) {
resultSet = null;
record = null;
this._dispose();
}
- ResultSetOptionsCollection getResultSetOptions() {
- return new ResultSetOptionsCollection(resultSet);
+ /**
+ * Read option by name.
+ * @param name option name
+ * @return option value
+ */
+ public String option(String name) {
+ return yaz4jlib.ZOOM_resultset_option_get(resultSet, name);
+ }
+
+ /**
+ * Write option with a given name.
+ * @param name option name
+ * @param value option value
+ * @return result set (self) for chainability
+ */
+ public ResultSet option(String name, String value) {
+ yaz4jlib.ZOOM_resultset_option_set(resultSet, name, value);
+ return this;
}
public Record getRecord(int index) {
disposed = true;
}
}
-}
+}
\ No newline at end of file
+++ /dev/null
-package org.yaz4j;
-
-import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p;
-import org.yaz4j.jni.yaz4jlib;
-
-public class ResultSetOptionsCollection {
-
- private SWIGTYPE_p_ZOOM_resultset_p resultSet = null;
-
- ResultSetOptionsCollection(SWIGTYPE_p_ZOOM_resultset_p resultSet) {
- this.resultSet = resultSet;
- }
-
- public void finalize() {
- resultSet = null;
- }
-
- public String get(String key) {
- return yaz4jlib.ZOOM_resultset_option_get(resultSet, key);
- }
-
- public void set(String key, String value) {
- yaz4jlib.ZOOM_resultset_option_set(resultSet, key, value);
- }
-}
}
public void finalize() {
- dispose();
+ _dispose();
}
public ScanTerm get(long index) {
return yaz4jlib.ZOOM_scanset_size(scanSet);
}
- public void dispose() {
+ void _dispose() {
if (!disposed) {
yaz4jlib.ZOOM_scanset_destroy(scanSet);
connection = null;
import java.io.UnsupportedEncodingException;
import java.io.IOException;
+import org.yaz4j.exception.ZoomException;
public class Yaz4jMain {
// java -cp ./bin: -Djava.library.path=./libyaz4j org.yaz4j.Yaz4jMain
public static void main(String[] args) throws UnsupportedEncodingException, IOException {
- Connection conn = new Connection("talisbase.talis.com", 210);
+ Connection conn = new Connection("talisbase.talis.com", 210);
+ try {
conn.setDatabaseName("unionm21");
conn.setUsername("fred");
conn.setPassword("apple");
conn.setSyntax("USMarc"); // USMarc, Sutrs, XML, opac, UKMarc
- PrefixQuery query = new PrefixQuery("@attr 1=4 \"pottering\"");
- ResultSet results = conn.search(query);
+ ResultSet results = conn.search("@attr 1=4 \"pottering\"", Connection.QueryType.PrefixQuery);
long resultsSize = results.getSize();
System.out.println("Found " + resultsSize + " records");
Record record = results.getRecord(i);
System.out.write(record.getContent());
}
- conn.dispose();
+ } catch (ZoomException ze) {
+ System.out.println(ze.getMessage());
+ ze.printStackTrace();
+ } finally {
+ conn.close();
+ }
}
}
+++ /dev/null
-package org.yaz4j;
-
-public class ZoomImplementationException extends RuntimeException {
-
- private static final long serialVersionUID = 1L;
-
- public ZoomImplementationException() {
- super();
- }
-
- public ZoomImplementationException(String message) {
- super(message);
- }
-}
--- /dev/null
+package org.yaz4j.exception;
+
+import java.util.Hashtable;
+
+public class Bib1Diagnostic {
+
+ private final static Hashtable<Integer, String> errorCodes = new Hashtable<Integer, String>();
+
+ static {
+ errorCodes.put(1, "PermanentSystemError");
+ errorCodes.put(2, "TemporarySystemError");
+ errorCodes.put(3, "UnsupportedSearch");
+ errorCodes.put(4, "TermsOnlyIncludesExclusionOrStopWords");
+ errorCodes.put(5, "TooManyArgumentWords");
+ errorCodes.put(6, "TooManyBooleanOperators");
+ errorCodes.put(7, "TooManyTruncatedWords");
+ errorCodes.put(8, "TooManyIncompleteSubfields");
+ errorCodes.put(9, "TruncatedWordsTooShort");
+ errorCodes.put(10, "InvalidFormatForRecordNumberInSearchTerm");
+ errorCodes.put(11, "TooManyCharactersInSearchStatement");
+ errorCodes.put(12, "TooManyRecordsRetrieved");
+ errorCodes.put(13, "PresentRequestOutOfRange");
+ errorCodes.put(14, "SystemErrorInPresentingRecords");
+ errorCodes.put(15, "RecordNotAuthorizedToBeSentIntersystem");
+ errorCodes.put(16, "RecordExceedsPreferredMessageSize");
+ errorCodes.put(17, "RecordExceedsExceptionalRecordSize");
+ errorCodes.put(18, "ResultSetNotSupportedAsASearchTerm");
+ errorCodes.put(19, "OnlySingleResultSetAsSearchTermSupported");
+ errorCodes.put(20, "OnlyAndingOfASingleResultSetAsSearchTerm");
+ errorCodes.put(21, "ResultSetExistsAndReplaceIndicatorOff");
+ errorCodes.put(22, "ResultSetNamingNotSupported");
+ errorCodes.put(23, "SpecifiedCombinationOfDatabasesNotSupported");
+ errorCodes.put(24, "ElementSetNamesNotSupported");
+ errorCodes.put(25, "SpecifiedElementSetNameNotValidForSpecifiedDatabase");
+ errorCodes.put(26, "OnlyGenericFormOfElementSetNameSupported");
+ errorCodes.put(27, "ResultSetNoLongerExistsUnilaterallyDeletedByTarget");
+ errorCodes.put(28, "ResultSetIsInUse");
+ errorCodes.put(29, "OneOfTheSpecifiedDatabasesIsLocked");
+ errorCodes.put(30, "SpecifiedResultSetDoesNotExist");
+ errorCodes.put(31, "ResourcesExhaustedNoResultsAvailable");
+ errorCodes.put(32, "ResourcesExhaustedUnpredictablePartialResultsAvailable");
+ errorCodes.put(33, "ResourcesExhaustedValidSubsetOfResultsAvailable");
+ errorCodes.put(100, "UnspecifiedError");
+ errorCodes.put(101, "AccessControlFailure");
+ errorCodes.put(102, "ChallengeRequiredCouldNotBeIssuedOperationTerminated");
+ errorCodes.put(103, "ChallengeRequiredCouldNotBeIssuedRecordNotIncluded");
+ errorCodes.put(104, "ChallengeFailedRecordNotIncluded");
+ errorCodes.put(105, "TerminatedAtOriginRequest");
+ errorCodes.put(106, "NoAbstractSyntaxesAgreedToForThisRecord");
+ errorCodes.put(107, "QueryTypeNotSupported");
+ errorCodes.put(108, "MalformedQuery");
+ errorCodes.put(109, "DatabaseUnavailable");
+ errorCodes.put(110, "OperatorUnsupported");
+ errorCodes.put(111, "TooManyDatabasesSpecified");
+ errorCodes.put(112, "TooManyResultSetsCreated");
+ errorCodes.put(113, "UnsupportedAttributeType");
+ errorCodes.put(114, "UnsupportedUseAttribute");
+ errorCodes.put(115, "UnsupportedTermValueForUseAttribute");
+ errorCodes.put(116, "UseAttributeRequiredButNotSupplied");
+ errorCodes.put(117, "UnsupportedRelationAttribute");
+ errorCodes.put(118, "UnsupportedStructureAttribute");
+ errorCodes.put(119, "UnsupportedPositionAttribute");
+ errorCodes.put(120, "UnsupportedTruncationAttribute");
+ errorCodes.put(121, "UnsupportedAttributeSet");
+ errorCodes.put(122, "UnsupportedCompletenessAttribute");
+ errorCodes.put(123, "UnsupportedAttributeCombination");
+ errorCodes.put(124, "UnsupportedCodedValueForTerm");
+ errorCodes.put(125, "MalformedSearchTerm");
+ errorCodes.put(126, "IllegalTermValueForAttribute");
+ errorCodes.put(127, "UnparsableFormatForUnNormalizedValue");
+ errorCodes.put(128, "IllegalResultSetName");
+ errorCodes.put(129, "ProximitySearchOfSetsNotSupported");
+ errorCodes.put(130, "IllegalResultSetInProximitySearch");
+ errorCodes.put(131, "UnsupportedProximityRelation");
+ errorCodes.put(132, "UnsupportedProximityUnitCode");
+ errorCodes.put(201, "ProximityNotSupportedWithThisAttributeCombinationAttribute");
+ errorCodes.put(202, "UnsupportedDistanceForProximity");
+ errorCodes.put(203, "OrderedFlagNotSupportedForProximity");
+ errorCodes.put(205, "OnlyZeroStepSizeSupportedForScan");
+ errorCodes.put(206, "SpecifiedStepSizeNotSupportedForScanStep");
+ errorCodes.put(207, "CannotSortAccordingToSequence");
+ errorCodes.put(208, "NoResultSetNameSuppliedOnSort");
+ errorCodes.put(209, "GenericSortNotSupported");
+ errorCodes.put(210, "DatabaseSpecificSortNotSupported");
+ errorCodes.put(211, "TooManySortKeys");
+ errorCodes.put(212, "DuplicateSortKeys");
+ errorCodes.put(213, "UnsupportedMissingDataAction");
+ errorCodes.put(214, "IllegalSortRelation");
+ errorCodes.put(215, "IllegalCaseValue");
+ errorCodes.put(216, "IllegalMissingDataAction");
+ errorCodes.put(217, "SegmentationCannotGuaranteeRecordsWillFitInSpecifiedSegments");
+ errorCodes.put(218, "EsPackageNameAlreadyInUse");
+ errorCodes.put(219, "EsNoSuchPackageOnModifyDelete");
+ errorCodes.put(220, "EsQuotaExceeded");
+ errorCodes.put(221, "EsExtendedServiceTypeNotSupported");
+ errorCodes.put(222, "EsPermissionDeniedOnEsIdNotAuthorized");
+ errorCodes.put(223, "EsPermissionDeniedOnEsCannotModifyOrDelete");
+ errorCodes.put(224, "EsImmediateExecutionFailed");
+ errorCodes.put(225, "EsImmediateExecutionNotSupportedForThisService");
+ errorCodes.put(226, "EsImmediateExecutionNotSupportedForTheseParameters");
+ errorCodes.put(227, "NoDataAvailableInRequestedRecordSyntax");
+ errorCodes.put(228, "ScanMalformedScan");
+ errorCodes.put(229, "TermTypeNotSupported");
+ errorCodes.put(230, "SortTooManyInputResults");
+ errorCodes.put(231, "SortIncompatibleRecordFormats");
+ errorCodes.put(232, "ScanTermListNotSupported");
+ errorCodes.put(233, "ScanUnsupportedValueOfPositionInResponse");
+ errorCodes.put(234, "TooManyIndexTermsProcessed");
+ errorCodes.put(235, "DatabaseDoesNotExist");
+ errorCodes.put(236, "AccessToSpecifiedDatabaseDenied");
+ errorCodes.put(237, "SortIllegalSort");
+ errorCodes.put(238, "RecordNotAvailableInRequestedSyntax");
+ errorCodes.put(239, "RecordSyntaxNotSupported");
+ errorCodes.put(240, "ScanResourcesExhaustedLookingForSatisfyingTerms");
+ errorCodes.put(241, "ScanBeginningOrEndOfTermList");
+ errorCodes.put(242, "SegmentationMaxSegmentSizeTooSmallToSegmentRecord");
+ errorCodes.put(243, "PresentAdditionalRangesParameterNotSupported");
+ errorCodes.put(244, "PresentCompSpecParameterNotSupported");
+ errorCodes.put(245, "Type1QueryRestrictionOperandNotSupported");
+ errorCodes.put(246, "Type1QueryComplexAttributevalueNotSupported");
+ errorCodes.put(247, "Type1QueryAttributesetAsPartOfAttributeelementNotSupported");
+ }
+
+ public static String getError(int errorCode) {
+ String errorText = "Unknown Error";
+
+ if (errorCodes.containsKey(errorCode)) {
+ errorText = errorCodes.get(errorCode);
+ }
+
+ return errorText;
+ }
+}
--- /dev/null
+package org.yaz4j.exception;
+
+public class Bib1Exception extends ZoomException {
+
+ private static final long serialVersionUID = 1L;
+
+ public Bib1Exception() {
+ super();
+ }
+
+ public Bib1Exception(String message) {
+ super(message);
+ }
+}
\ No newline at end of file
--- /dev/null
+package org.yaz4j.exception;
+
+public class ConnectionTimeoutException extends ZoomException {
+
+ private static final long serialVersionUID = 1L;
+
+ public ConnectionTimeoutException() {
+ super();
+ }
+
+ public ConnectionTimeoutException(String message) {
+ super(message);
+ }
+}
--- /dev/null
+package org.yaz4j.exception;
+
+public class ConnectionUnavailableException extends ZoomException {
+
+ private static final long serialVersionUID = 1L;
+
+ public ConnectionUnavailableException() {
+ super();
+ }
+
+ public ConnectionUnavailableException(String message) {
+ super(message);
+ }
+}
--- /dev/null
+package org.yaz4j.exception;
+
+public class InitRejectedException extends ZoomException {
+
+
+ public InitRejectedException() {
+ super();
+ }
+
+ public InitRejectedException(String message) {
+ super(message);
+ }
+}
--- /dev/null
+package org.yaz4j.exception;
+
+public class InvalidQueryException extends ZoomException {
+
+ private static final long serialVersionUID = 1L;
+
+ public InvalidQueryException() {
+ super();
+ }
+
+ public InvalidQueryException(String message) {
+ super(message);
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 1995-2010, Index Data
+ * All rights reserved.
+ * See the file LICENSE for details.
+ */
+
+package org.yaz4j.exception;
+
+/**
+ * Generic exception representing any ZOOM-C error situation.
+ * @author jakub
+ */
+public class ZoomException extends Exception {
+
+ public ZoomException() {
+ super();
+ }
+
+ public ZoomException(String msg) {
+ super(msg);
+ }
+
+}
--- /dev/null
+package org.yaz4j.exception;
+
+public class ZoomImplementationException extends ZoomException {
+
+ private static final long serialVersionUID = 1L;
+
+ public ZoomImplementationException() {
+ super();
+ }
+
+ public ZoomImplementationException(String message) {
+ super(message);
+ }
+}
import org.junit.*;
import static org.junit.Assert.*;
-import java.util.*;
+import org.yaz4j.Connection.QueryType;
+import org.yaz4j.exception.ZoomException;
public class ConnectionTest {
public void testConnection() {
org.yaz4j.Connection con = new org.yaz4j.Connection("z3950.indexdata.dk:210/gils", 0);
assertNotNull(con);
- con.setSyntax("sutrs");
- org.yaz4j.PrefixQuery pqf = new org.yaz4j.PrefixQuery("@attr 1=4 utah");
- assertNotNull(pqf);
- org.yaz4j.ResultSet s = con.search(pqf);
- assertNotNull(s);
- assertEquals(s.getSize(), 9);
- org.yaz4j.Record rec = s.getRecord(0);
- assertNotNull(rec);
- byte[] content = rec.getContent();
- // first SUTRS record
- assertEquals(content.length, 1940);
- assertEquals(content[0], 103);
- assertEquals(rec.getSyntax(), "SUTRS");
- assertEquals(rec.getDatabase(), "gils");
-
+ try {
+ con.setSyntax("sutrs");
+ System.out.println("Open connection to z3950.indexdata.dk:210/gils...");
+ con.connect();
+ org.yaz4j.ResultSet s = con.search("@attr 1=4 utah", QueryType.PrefixQuery);
+ assertNotNull(s);
+ assertEquals(s.getSize(), 9);
+ org.yaz4j.Record rec = s.getRecord(0);
+ assertNotNull(rec);
+ byte[] content = rec.getContent();
+ // first SUTRS record
+ assertEquals(content.length, 1940);
+ assertEquals(content[0], 103);
+ assertEquals(rec.getSyntax(), "SUTRS");
+ assertEquals(rec.getDatabase(), "gils");
+ } catch (ZoomException ze) {
+ fail(ze.getMessage());
+ } finally {
+ con.close();
+ }
}
}
import org.junit.*;
import static org.junit.Assert.*;
import org.yaz4j.*;
+import org.yaz4j.exception.ZoomException;
/**
* @author adam
@Test
public void test() {
Connection con = new Connection("z3950.loc.gov:7090/voyager", 0);
+ try {
assertNotNull(con);
con.setSyntax("usmarc");
- PrefixQuery pqf = new PrefixQuery("@attr 1=7 0253333490");
- assertNotNull(pqf);
- ResultSet set = con.search(pqf);
+ con.connect();
+ ResultSet set = con.search("@attr 1=7 0253333490", Connection.QueryType.PrefixQuery);
assertNotNull(set);
Record rec = set.getRecord(0);
assertNotNull(rec);
- // System.out.println(rec.render());
+ } catch (ZoomException ze) {
+ fail(ze.getMessage());
+ } finally {
+ con.close();
+ }
}
}