From: Adam Dickmeiss Date: Mon, 21 Sep 2009 13:31:54 +0000 (+0200) Subject: Use Maven for building yaz4j. X-Git-Tag: v1.0~15 X-Git-Url: http://sru.miketaylor.org.uk/cgi-bin?a=commitdiff_plain;h=428d895d6dc31b784e953ea935d662cfc4a4bd43;p=yaz4j-moved-to-github.git Use Maven for building yaz4j. --- diff --git a/.classpath b/.classpath index c1e85ad..caa7eba 100644 --- a/.classpath +++ b/.classpath @@ -1,11 +1,8 @@ - - - - - + + + - - + diff --git a/.gitignore b/.gitignore index f904b11..eb5a316 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -bin -distributions +target diff --git a/.project b/.project index 0bf3351..1b79910 100644 --- a/.project +++ b/.project @@ -4,14 +4,20 @@ - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.iam.jdt.core.mavenIncrementalBuilder + + + + + + org.eclipse.iam.jdt.core.mavenNature + org.eclipse.jdt.core.javanature + diff --git a/AUTHORS b/AUTHORS index c40cdd9..e310170 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,7 +1,5 @@ -Most of the work on yaz4j was done by: - Rob Styles +Adam Dickmeiss +J. Cayetano -Current version is maintained by: -Adam Dickmeiss diff --git a/README b/README index 5f06606..b974b3e 100644 --- a/README +++ b/README @@ -7,11 +7,11 @@ Copyright (C) 2006-2007, Talis Group Ltd. Copyright (C) 2008-2009, Index Data. See LICENSE for details. -In order to built yaz4j the Java JDK, ant, YAZ and Swig must be installed. +In order to built yaz4j the Java JDK, Maven, YAZ and Swig must be installed. The exact process varies from platform to platform. For example, on Ubuntu/Debian the following installs the components: - apt-get install sun-java6-jdk ant libyaz3-dev swig + apt-get install sun-java6-jdk maven2 libyaz3-dev swig The compilation is a two-step process. The environment variable JAVA_HOME should point to the Java JDK of your preference. For example, @@ -21,9 +21,9 @@ Build the shared libary (.so) with: cd libyaz4j ./build.sh -Rest is built by ant which reads build.xml: +Rest is built by maven which reads pom.xml: cd .. - ant + mvn compile If you network-connected you should be able to run tests with: - ant unit-test + mvn test diff --git a/build-windows.xml b/build-windows.xml deleted file mode 100644 index 883c460..0000000 --- a/build-windows.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - Build the java side of Yaz4J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build.xml b/build.xml deleted file mode 100644 index 16bc930..0000000 --- a/build.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - Build the java side of Yaz4J - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dependencies/JUnit-4.3.1/junit-4.3.1.jar b/dependencies/JUnit-4.3.1/junit-4.3.1.jar deleted file mode 100644 index ff5d188..0000000 Binary files a/dependencies/JUnit-4.3.1/junit-4.3.1.jar and /dev/null differ diff --git a/libyaz4j/build.sh b/libyaz4j/build.sh index 98f55d9..d4687ad 100755 --- a/libyaz4j/build.sh +++ b/libyaz4j/build.sh @@ -6,7 +6,7 @@ YAZ_PREFIX=`${YAZ_CONFIG} --prefix` YAZ_CFLAGS=`${YAZ_CONFIG} --cflags` YAZ_LIBS=`${YAZ_CONFIG} --libs` -swig -I"include" -I"${YAZ_PREFIX}/include" -outdir ../src/org/yaz4j/jni -package org.yaz4j.jni -o src/libyaz4j.cpp -c++ -java libyaz4j.i +swig -I"include" -I"${YAZ_PREFIX}/include" -outdir ../src/main/java/org/yaz4j/jni -package org.yaz4j.jni -o src/libyaz4j.cpp -c++ -java libyaz4j.i g++ -fPIC -I"include" -I"$JNI_DIR" -I"$JNI_DIR/linux" ${YAZ_CFLAGS} -c -Wall -o obj/libyaz4j.o src/libyaz4j.cpp diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..94760c0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,173 @@ + + + + + 4.0.0 + org.yaz4j + yaz4j + 1.0-SNAPSHOT + jar + + + yaz4j + http://indexdata.com/yaz4j + 2008 + + + BSD + http://www.opensource.org/licenses/bsd-license.php + + + Java wrapper for the ZOOM API of YAZ + + + + Rob Styles + + Rob.Styles@talis.com + + + + + + + Adam Dickmeiss + + adam@indexdata.dk + + + + + + + + + + + + junit + junit + 4.3.1 + test + + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + + UTF-8 + + + + + org.apache.maven.plugins + maven-compiler-plugin + + UTF-8 + 1.5 + 1.5 + true + true + + + + + org.apache.maven.plugins + maven-surefire-plugin + + once + target + -Djava.library.path=${basedir}/libyaz4j/lib + + + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + false + **/*.java + src/main/java + + + + + org.apache.maven.plugins + + maven-project-info-reports-plugin + + + + + dependencies + project-team + mailing-list + issue-tracking + summary + scm + index + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + UTF-8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/yaz4j/Bib1Diagnostic.java b/src/main/java/org/yaz4j/Bib1Diagnostic.java new file mode 100644 index 0000000..5dd8c11 --- /dev/null +++ b/src/main/java/org/yaz4j/Bib1Diagnostic.java @@ -0,0 +1,134 @@ +package org.yaz4j; + +import java.util.Hashtable; + +class Bib1Diagnostic +{ + private static Hashtable errorCodes = new Hashtable(); + + 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; + } +} diff --git a/src/main/java/org/yaz4j/Bib1Exception.java b/src/main/java/org/yaz4j/Bib1Exception.java new file mode 100644 index 0000000..742b9ab --- /dev/null +++ b/src/main/java/org/yaz4j/Bib1Exception.java @@ -0,0 +1,16 @@ +package org.yaz4j; + +public class Bib1Exception extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public Bib1Exception() + { + super(); + } + + public Bib1Exception(String message ) + { + super( message ); + } +} diff --git a/src/main/java/org/yaz4j/CQLQuery.java b/src/main/java/org/yaz4j/CQLQuery.java new file mode 100644 index 0000000..1411e28 --- /dev/null +++ b/src/main/java/org/yaz4j/CQLQuery.java @@ -0,0 +1,21 @@ +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 ; + } +} diff --git a/src/main/java/org/yaz4j/Connection.java b/src/main/java/org/yaz4j/Connection.java new file mode 100644 index 0000000..2c5fcf2 --- /dev/null +++ b/src/main/java/org/yaz4j/Connection.java @@ -0,0 +1,235 @@ +package org.yaz4j; + +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.yaz4jlib; +import org.yaz4j.jni.yaz4jlibConstants; + +import sun.reflect.generics.reflectiveObjects.NotImplementedException; + +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; + private boolean disposed = false; + + 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) + String libName = "yaz4j" ; + try + { + // System.err.println( "Loading library '"+ System.mapLibraryName( libName ) + "'" ); + System.loadLibrary( libName ); + } + catch( Throwable 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); + + SWIGTYPE_p_p_char cp = null; + SWIGTYPE_p_p_char addinfo = null ; + int errorCode = yaz4jlib.ZOOM_connection_error(zoomConnection, cp, addinfo); + CheckErrorCodeAndThrow(errorCode); + } + + 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 ); + } + } + + 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(); + + SWIGTYPE_p_ZOOM_query_p yazQuery = yaz4jlib.ZOOM_query_create(); + ResultSet resultSet = null; + + try + { + if( queryType == QueryType.CQLQuery ) + yaz4jlib.ZOOM_query_cql(yazQuery, query); + else if( queryType == QueryType.PrefixQuery ) + yaz4jlib.ZOOM_query_prefix(yazQuery, query); + else + throw new NotImplementedException(); + + SWIGTYPE_p_ZOOM_resultset_p yazResultSet = yaz4jlib.ZOOM_connection_search(zoomConnection, yazQuery); + + int errorCode = yaz4jlib.ZOOM_connection_errcode( zoomConnection ); + if (errorCode != yaz4jlib.ZOOM_ERROR_NONE) + { + yaz4jlib.ZOOM_resultset_destroy(yazResultSet); + } + CheckErrorCodeAndThrow(errorCode); + + resultSet = new ResultSet(yazResultSet, zoomConnection); + } + finally + { + yaz4jlib.ZOOM_query_destroy(yazQuery); // deallocate yazQuery also when exceptions + yazQuery = null; + } + return resultSet; + } + + public ScanSet Scan(String query) + { + EnsureConnected(); + SWIGTYPE_p_ZOOM_scanset_p yazScanSet = yaz4jlib.ZOOM_connection_scan(zoomConnection, query); + + int errorCode = yaz4jlib.ZOOM_connection_errcode(zoomConnection); + if( errorCode != yaz4jlib.ZOOM_ERROR_NONE ) + { + yaz4jlib.ZOOM_scanset_destroy(yazScanSet); + } + CheckErrorCodeAndThrow(errorCode); + + ScanSet scanSet = new ScanSet(yazScanSet, this); + return scanSet; + } + + public ConnectionOptionsCollection getOptions() + { + return options; + } + + protected void EnsureConnected() + { + if (! connected ) + Connect(); + } + + public void Connect() + { + yaz4jlib.ZOOM_connection_connect( zoomConnection, host, port); + int errorCode = yaz4jlib.ZOOM_connection_errcode(zoomConnection); + CheckErrorCodeAndThrow(errorCode); + connected = true; + } + + public void Dispose() + { + if (! disposed ) + { + yaz4jlib.ZOOM_connection_destroy(zoomConnection); + zoomConnection = null; + disposed = true; + } + } + + public String getSyntax() + { + return options.get("preferredRecordSyntax"); + } + + public void setSyntax( String value) + { + options.set("preferredRecordSyntax", value ) ; + } + + public String getDatabaseName() + { + return options.get("databaseName"); + } + + public void setDatabaseName( String value ) + { + options.set("databaseName", value); + } + + public String getUsername() + { + return options.get("user"); + } + + public void setUsername( String value ) + { + options.set("user", value); + } + + public String getPassword() + { + return options.get("password"); + } + + public void setPassword( String value ) + { + options.set("password", value); + } +} diff --git a/src/main/java/org/yaz4j/ConnectionExtended.java b/src/main/java/org/yaz4j/ConnectionExtended.java new file mode 100644 index 0000000..8d9744b --- /dev/null +++ b/src/main/java/org/yaz4j/ConnectionExtended.java @@ -0,0 +1,25 @@ +package org.yaz4j; + +import org.yaz4j.jni.SWIGTYPE_p_ZOOM_options_p; +import org.yaz4j.jni.SWIGTYPE_p_ZOOM_package_p; +import org.yaz4j.jni.yaz4jlib; + +public class ConnectionExtended extends Connection +{ + public ConnectionExtended(String host, int port) + { + super(host, port); + } + + public Package Package(String type) + { + EnsureConnected(); + 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; + } +} diff --git a/src/main/java/org/yaz4j/ConnectionOptionsCollection.java b/src/main/java/org/yaz4j/ConnectionOptionsCollection.java new file mode 100644 index 0000000..fb60263 --- /dev/null +++ b/src/main/java/org/yaz4j/ConnectionOptionsCollection.java @@ -0,0 +1,42 @@ +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) ; + } + +} diff --git a/src/main/java/org/yaz4j/ConnectionTimeoutException.java b/src/main/java/org/yaz4j/ConnectionTimeoutException.java new file mode 100644 index 0000000..7f6c574 --- /dev/null +++ b/src/main/java/org/yaz4j/ConnectionTimeoutException.java @@ -0,0 +1,16 @@ +package org.yaz4j; + +public class ConnectionTimeoutException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public ConnectionTimeoutException() + { + super(); + } + + public ConnectionTimeoutException(String message ) + { + super( message ); + } +} diff --git a/src/main/java/org/yaz4j/ConnectionUnavailableException.java b/src/main/java/org/yaz4j/ConnectionUnavailableException.java new file mode 100644 index 0000000..25c7226 --- /dev/null +++ b/src/main/java/org/yaz4j/ConnectionUnavailableException.java @@ -0,0 +1,16 @@ +package org.yaz4j; + +public class ConnectionUnavailableException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public ConnectionUnavailableException() + { + super(); + } + + public ConnectionUnavailableException(String message ) + { + super( message ); + } +} diff --git a/src/main/java/org/yaz4j/InitRejectedException.java b/src/main/java/org/yaz4j/InitRejectedException.java new file mode 100644 index 0000000..83c3c8d --- /dev/null +++ b/src/main/java/org/yaz4j/InitRejectedException.java @@ -0,0 +1,16 @@ +package org.yaz4j; + +public class InitRejectedException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public InitRejectedException() + { + super(); + } + + public InitRejectedException(String message ) + { + super( message ); + } +} diff --git a/src/main/java/org/yaz4j/InvalidQueryException.java b/src/main/java/org/yaz4j/InvalidQueryException.java new file mode 100644 index 0000000..4f265c2 --- /dev/null +++ b/src/main/java/org/yaz4j/InvalidQueryException.java @@ -0,0 +1,16 @@ +package org.yaz4j; + +public class InvalidQueryException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public InvalidQueryException() + { + super(); + } + + public InvalidQueryException(String message ) + { + super( message ); + } +} diff --git a/src/main/java/org/yaz4j/Package.java b/src/main/java/org/yaz4j/Package.java new file mode 100644 index 0000000..590b172 --- /dev/null +++ b/src/main/java/org/yaz4j/Package.java @@ -0,0 +1,43 @@ +package org.yaz4j; + +import org.yaz4j.jni.SWIGTYPE_p_ZOOM_package_p; +import org.yaz4j.jni.yaz4jlib; + +public class Package +{ + private SWIGTYPE_p_ZOOM_package_p pack = null ; + private ConnectionExtended connection = null ; + private String type; + + Package(SWIGTYPE_p_ZOOM_package_p pack, ConnectionExtended connection, String type) + { + this.type = type; + this.connection = connection; + this.pack = pack; + } + + public void finalize() + { + Dispose(); + } + + public PackageOptionsCollection getPackageOptions() + { + return new PackageOptionsCollection(pack); + } + + public void Send() + { + yaz4jlib.ZOOM_package_send( pack, type ); + } + + public void Dispose() + { + if ( pack != null ) + { + yaz4jlib.ZOOM_package_destroy( pack ); + connection = null; + pack = null ; + } + } +} diff --git a/src/main/java/org/yaz4j/PackageOptionsCollection.java b/src/main/java/org/yaz4j/PackageOptionsCollection.java new file mode 100644 index 0000000..7cff946 --- /dev/null +++ b/src/main/java/org/yaz4j/PackageOptionsCollection.java @@ -0,0 +1,29 @@ +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) ; + } +} diff --git a/src/main/java/org/yaz4j/PrefixQuery.java b/src/main/java/org/yaz4j/PrefixQuery.java new file mode 100644 index 0000000..f8d2e53 --- /dev/null +++ b/src/main/java/org/yaz4j/PrefixQuery.java @@ -0,0 +1,21 @@ +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 ; + } +} diff --git a/src/main/java/org/yaz4j/Record.java b/src/main/java/org/yaz4j/Record.java new file mode 100644 index 0000000..e1990a7 --- /dev/null +++ b/src/main/java/org/yaz4j/Record.java @@ -0,0 +1,71 @@ +package org.yaz4j; + +import java.io.UnsupportedEncodingException; + +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[] getContent() + { + String type = "raw"; + SWIGTYPE_p_int length = null ; + return yaz4jlib.ZOOM_record_get_bytes(record, type, length) ; +// String contentString = yaz4jlib.ZOOM_record_get(record, type, length) ; +// System.err.println("!!!!!"); +// System.err.println(contentString); +// System.err.println(contentString.length()); +// System.err.println("!!!!!"); +// try { +// byte[] bytes = contentString.getBytes("UTF8"); +// System.err.println(bytes.length); +// return bytes ; +// } catch (UnsupportedEncodingException e) { +// throw new RuntimeException(e); +// } + } + + public String getSyntax() + { + String type = "syntax"; + SWIGTYPE_p_int length = null ; + String syntax = yaz4jlib.ZOOM_record_get(record, type, length); + return syntax ; + } + + public String getDatabase() + { + String type = "database"; + SWIGTYPE_p_int length = null ; + String database = yaz4jlib.ZOOM_record_get(record, type, length); + + return database ; + } + + public void Dispose() + { + if (!disposed) + { + resultSet = null; + record = null; + disposed = true; + } + } +} diff --git a/src/main/java/org/yaz4j/ResultSet.java b/src/main/java/org/yaz4j/ResultSet.java new file mode 100644 index 0000000..b70a03e --- /dev/null +++ b/src/main/java/org/yaz4j/ResultSet.java @@ -0,0 +1,66 @@ +package org.yaz4j; + +import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p; +import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p; +import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p; +import org.yaz4j.jni.yaz4jlib; + +public class ResultSet +{ + private SWIGTYPE_p_ZOOM_resultset_p resultSet; + private SWIGTYPE_p_ZOOM_connection_p connection; + private long size = 0 ; + private Record[] records = null ; + private boolean disposed = false; + + ResultSet(SWIGTYPE_p_ZOOM_resultset_p resultSet, SWIGTYPE_p_ZOOM_connection_p connection) + { + this.resultSet = resultSet ; + this.connection = connection ; + size = yaz4jlib.ZOOM_resultset_size(this.resultSet); + records = new Record[(int)size]; + } + + public void finalize() + { + this.Dispose(); + } + + ResultSetOptionsCollection getResultSetOptions() + { + return new ResultSetOptionsCollection(resultSet); + } + + public Record getRecord(int index) + { + if ( records[index] == null) + { + SWIGTYPE_p_ZOOM_record_p recordTemp = yaz4jlib.ZOOM_resultset_record(resultSet, index); + records[index] = new Record(recordTemp, this); + } + + return this.records[index]; + } + + public int getSize() + { + return (int)size ; + } + + public void Dispose() + { + if (! disposed ) + { + for( int i=0 ; i errorCodes = new Hashtable(); - - 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; - } -} diff --git a/src/org/yaz4j/Bib1Exception.java b/src/org/yaz4j/Bib1Exception.java deleted file mode 100644 index 742b9ab..0000000 --- a/src/org/yaz4j/Bib1Exception.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.yaz4j; - -public class Bib1Exception extends RuntimeException -{ - private static final long serialVersionUID = 1L; - - public Bib1Exception() - { - super(); - } - - public Bib1Exception(String message ) - { - super( message ); - } -} diff --git a/src/org/yaz4j/CQLQuery.java b/src/org/yaz4j/CQLQuery.java deleted file mode 100644 index 1411e28..0000000 --- a/src/org/yaz4j/CQLQuery.java +++ /dev/null @@ -1,21 +0,0 @@ -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 ; - } -} diff --git a/src/org/yaz4j/Connection.java b/src/org/yaz4j/Connection.java deleted file mode 100644 index 2c5fcf2..0000000 --- a/src/org/yaz4j/Connection.java +++ /dev/null @@ -1,235 +0,0 @@ -package org.yaz4j; - -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.yaz4jlib; -import org.yaz4j.jni.yaz4jlibConstants; - -import sun.reflect.generics.reflectiveObjects.NotImplementedException; - -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; - private boolean disposed = false; - - 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) - String libName = "yaz4j" ; - try - { - // System.err.println( "Loading library '"+ System.mapLibraryName( libName ) + "'" ); - System.loadLibrary( libName ); - } - catch( Throwable 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); - - SWIGTYPE_p_p_char cp = null; - SWIGTYPE_p_p_char addinfo = null ; - int errorCode = yaz4jlib.ZOOM_connection_error(zoomConnection, cp, addinfo); - CheckErrorCodeAndThrow(errorCode); - } - - 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 ); - } - } - - 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(); - - SWIGTYPE_p_ZOOM_query_p yazQuery = yaz4jlib.ZOOM_query_create(); - ResultSet resultSet = null; - - try - { - if( queryType == QueryType.CQLQuery ) - yaz4jlib.ZOOM_query_cql(yazQuery, query); - else if( queryType == QueryType.PrefixQuery ) - yaz4jlib.ZOOM_query_prefix(yazQuery, query); - else - throw new NotImplementedException(); - - SWIGTYPE_p_ZOOM_resultset_p yazResultSet = yaz4jlib.ZOOM_connection_search(zoomConnection, yazQuery); - - int errorCode = yaz4jlib.ZOOM_connection_errcode( zoomConnection ); - if (errorCode != yaz4jlib.ZOOM_ERROR_NONE) - { - yaz4jlib.ZOOM_resultset_destroy(yazResultSet); - } - CheckErrorCodeAndThrow(errorCode); - - resultSet = new ResultSet(yazResultSet, zoomConnection); - } - finally - { - yaz4jlib.ZOOM_query_destroy(yazQuery); // deallocate yazQuery also when exceptions - yazQuery = null; - } - return resultSet; - } - - public ScanSet Scan(String query) - { - EnsureConnected(); - SWIGTYPE_p_ZOOM_scanset_p yazScanSet = yaz4jlib.ZOOM_connection_scan(zoomConnection, query); - - int errorCode = yaz4jlib.ZOOM_connection_errcode(zoomConnection); - if( errorCode != yaz4jlib.ZOOM_ERROR_NONE ) - { - yaz4jlib.ZOOM_scanset_destroy(yazScanSet); - } - CheckErrorCodeAndThrow(errorCode); - - ScanSet scanSet = new ScanSet(yazScanSet, this); - return scanSet; - } - - public ConnectionOptionsCollection getOptions() - { - return options; - } - - protected void EnsureConnected() - { - if (! connected ) - Connect(); - } - - public void Connect() - { - yaz4jlib.ZOOM_connection_connect( zoomConnection, host, port); - int errorCode = yaz4jlib.ZOOM_connection_errcode(zoomConnection); - CheckErrorCodeAndThrow(errorCode); - connected = true; - } - - public void Dispose() - { - if (! disposed ) - { - yaz4jlib.ZOOM_connection_destroy(zoomConnection); - zoomConnection = null; - disposed = true; - } - } - - public String getSyntax() - { - return options.get("preferredRecordSyntax"); - } - - public void setSyntax( String value) - { - options.set("preferredRecordSyntax", value ) ; - } - - public String getDatabaseName() - { - return options.get("databaseName"); - } - - public void setDatabaseName( String value ) - { - options.set("databaseName", value); - } - - public String getUsername() - { - return options.get("user"); - } - - public void setUsername( String value ) - { - options.set("user", value); - } - - public String getPassword() - { - return options.get("password"); - } - - public void setPassword( String value ) - { - options.set("password", value); - } -} diff --git a/src/org/yaz4j/ConnectionExtended.java b/src/org/yaz4j/ConnectionExtended.java deleted file mode 100644 index 8d9744b..0000000 --- a/src/org/yaz4j/ConnectionExtended.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.yaz4j; - -import org.yaz4j.jni.SWIGTYPE_p_ZOOM_options_p; -import org.yaz4j.jni.SWIGTYPE_p_ZOOM_package_p; -import org.yaz4j.jni.yaz4jlib; - -public class ConnectionExtended extends Connection -{ - public ConnectionExtended(String host, int port) - { - super(host, port); - } - - public Package Package(String type) - { - EnsureConnected(); - 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; - } -} diff --git a/src/org/yaz4j/ConnectionOptionsCollection.java b/src/org/yaz4j/ConnectionOptionsCollection.java deleted file mode 100644 index fb60263..0000000 --- a/src/org/yaz4j/ConnectionOptionsCollection.java +++ /dev/null @@ -1,42 +0,0 @@ -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) ; - } - -} diff --git a/src/org/yaz4j/ConnectionTimeoutException.java b/src/org/yaz4j/ConnectionTimeoutException.java deleted file mode 100644 index 7f6c574..0000000 --- a/src/org/yaz4j/ConnectionTimeoutException.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.yaz4j; - -public class ConnectionTimeoutException extends RuntimeException -{ - private static final long serialVersionUID = 1L; - - public ConnectionTimeoutException() - { - super(); - } - - public ConnectionTimeoutException(String message ) - { - super( message ); - } -} diff --git a/src/org/yaz4j/ConnectionUnavailableException.java b/src/org/yaz4j/ConnectionUnavailableException.java deleted file mode 100644 index 25c7226..0000000 --- a/src/org/yaz4j/ConnectionUnavailableException.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.yaz4j; - -public class ConnectionUnavailableException extends RuntimeException -{ - private static final long serialVersionUID = 1L; - - public ConnectionUnavailableException() - { - super(); - } - - public ConnectionUnavailableException(String message ) - { - super( message ); - } -} diff --git a/src/org/yaz4j/InitRejectedException.java b/src/org/yaz4j/InitRejectedException.java deleted file mode 100644 index 83c3c8d..0000000 --- a/src/org/yaz4j/InitRejectedException.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.yaz4j; - -public class InitRejectedException extends RuntimeException -{ - private static final long serialVersionUID = 1L; - - public InitRejectedException() - { - super(); - } - - public InitRejectedException(String message ) - { - super( message ); - } -} diff --git a/src/org/yaz4j/InvalidQueryException.java b/src/org/yaz4j/InvalidQueryException.java deleted file mode 100644 index 4f265c2..0000000 --- a/src/org/yaz4j/InvalidQueryException.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.yaz4j; - -public class InvalidQueryException extends RuntimeException -{ - private static final long serialVersionUID = 1L; - - public InvalidQueryException() - { - super(); - } - - public InvalidQueryException(String message ) - { - super( message ); - } -} diff --git a/src/org/yaz4j/Package.java b/src/org/yaz4j/Package.java deleted file mode 100644 index 590b172..0000000 --- a/src/org/yaz4j/Package.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.yaz4j; - -import org.yaz4j.jni.SWIGTYPE_p_ZOOM_package_p; -import org.yaz4j.jni.yaz4jlib; - -public class Package -{ - private SWIGTYPE_p_ZOOM_package_p pack = null ; - private ConnectionExtended connection = null ; - private String type; - - Package(SWIGTYPE_p_ZOOM_package_p pack, ConnectionExtended connection, String type) - { - this.type = type; - this.connection = connection; - this.pack = pack; - } - - public void finalize() - { - Dispose(); - } - - public PackageOptionsCollection getPackageOptions() - { - return new PackageOptionsCollection(pack); - } - - public void Send() - { - yaz4jlib.ZOOM_package_send( pack, type ); - } - - public void Dispose() - { - if ( pack != null ) - { - yaz4jlib.ZOOM_package_destroy( pack ); - connection = null; - pack = null ; - } - } -} diff --git a/src/org/yaz4j/PackageOptionsCollection.java b/src/org/yaz4j/PackageOptionsCollection.java deleted file mode 100644 index 7cff946..0000000 --- a/src/org/yaz4j/PackageOptionsCollection.java +++ /dev/null @@ -1,29 +0,0 @@ -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) ; - } -} diff --git a/src/org/yaz4j/PrefixQuery.java b/src/org/yaz4j/PrefixQuery.java deleted file mode 100644 index f8d2e53..0000000 --- a/src/org/yaz4j/PrefixQuery.java +++ /dev/null @@ -1,21 +0,0 @@ -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 ; - } -} diff --git a/src/org/yaz4j/Record.java b/src/org/yaz4j/Record.java deleted file mode 100644 index e1990a7..0000000 --- a/src/org/yaz4j/Record.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.yaz4j; - -import java.io.UnsupportedEncodingException; - -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[] getContent() - { - String type = "raw"; - SWIGTYPE_p_int length = null ; - return yaz4jlib.ZOOM_record_get_bytes(record, type, length) ; -// String contentString = yaz4jlib.ZOOM_record_get(record, type, length) ; -// System.err.println("!!!!!"); -// System.err.println(contentString); -// System.err.println(contentString.length()); -// System.err.println("!!!!!"); -// try { -// byte[] bytes = contentString.getBytes("UTF8"); -// System.err.println(bytes.length); -// return bytes ; -// } catch (UnsupportedEncodingException e) { -// throw new RuntimeException(e); -// } - } - - public String getSyntax() - { - String type = "syntax"; - SWIGTYPE_p_int length = null ; - String syntax = yaz4jlib.ZOOM_record_get(record, type, length); - return syntax ; - } - - public String getDatabase() - { - String type = "database"; - SWIGTYPE_p_int length = null ; - String database = yaz4jlib.ZOOM_record_get(record, type, length); - - return database ; - } - - public void Dispose() - { - if (!disposed) - { - resultSet = null; - record = null; - disposed = true; - } - } -} diff --git a/src/org/yaz4j/ResultSet.java b/src/org/yaz4j/ResultSet.java deleted file mode 100644 index b70a03e..0000000 --- a/src/org/yaz4j/ResultSet.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.yaz4j; - -import org.yaz4j.jni.SWIGTYPE_p_ZOOM_connection_p; -import org.yaz4j.jni.SWIGTYPE_p_ZOOM_record_p; -import org.yaz4j.jni.SWIGTYPE_p_ZOOM_resultset_p; -import org.yaz4j.jni.yaz4jlib; - -public class ResultSet -{ - private SWIGTYPE_p_ZOOM_resultset_p resultSet; - private SWIGTYPE_p_ZOOM_connection_p connection; - private long size = 0 ; - private Record[] records = null ; - private boolean disposed = false; - - ResultSet(SWIGTYPE_p_ZOOM_resultset_p resultSet, SWIGTYPE_p_ZOOM_connection_p connection) - { - this.resultSet = resultSet ; - this.connection = connection ; - size = yaz4jlib.ZOOM_resultset_size(this.resultSet); - records = new Record[(int)size]; - } - - public void finalize() - { - this.Dispose(); - } - - ResultSetOptionsCollection getResultSetOptions() - { - return new ResultSetOptionsCollection(resultSet); - } - - public Record getRecord(int index) - { - if ( records[index] == null) - { - SWIGTYPE_p_ZOOM_record_p recordTemp = yaz4jlib.ZOOM_resultset_record(resultSet, index); - records[index] = new Record(recordTemp, this); - } - - return this.records[index]; - } - - public int getSize() - { - return (int)size ; - } - - public void Dispose() - { - if (! disposed ) - { - for( int i=0 ; i + + + yaz4j + http://www.indexdata.com/sites/indexdata.com/themes/indexd/topbar.gif + http://indexdata.com/yaz + + + + org.apache.tapestry + maven-skin + 1.1 + + + + ${reports} + + + diff --git a/src/test/java/yaz4jtest/ConnectionTest.java b/src/test/java/yaz4jtest/ConnectionTest.java new file mode 100644 index 0000000..2f143af --- /dev/null +++ b/src/test/java/yaz4jtest/ConnectionTest.java @@ -0,0 +1,24 @@ +package yaz4jtest; +import org.junit.*; +import static org.junit.Assert.*; +import java.util.*; + +public class ConnectionTest { + @Test + 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); + } +} diff --git a/test/ConnectionTest.java b/test/ConnectionTest.java deleted file mode 100644 index 2f143af..0000000 --- a/test/ConnectionTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package yaz4jtest; -import org.junit.*; -import static org.junit.Assert.*; -import java.util.*; - -public class ConnectionTest { - @Test - 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); - } -}