diff --git a/gradle.properties b/gradle.properties index 9c3c27f..7cfb725 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ group = org.xbib name = oai -version = 2.5.3 +version = 2.5.4 gradle.wrapper.version = 6.6.1 xbib-content.version = 2.6.2 diff --git a/oai-client/src/main/java/org/xbib/oai/client/OAIClient.java b/oai-client/src/main/java/org/xbib/oai/client/OAIClient.java index 04e9288..de60497 100644 --- a/oai-client/src/main/java/org/xbib/oai/client/OAIClient.java +++ b/oai-client/src/main/java/org/xbib/oai/client/OAIClient.java @@ -1,6 +1,7 @@ package org.xbib.oai.client; import org.xbib.net.URL; +import org.xbib.oai.OAIConstants; import org.xbib.oai.client.getrecord.GetRecordRequest; import org.xbib.oai.client.identify.IdentifyRequest; import org.xbib.oai.client.identify.IdentifyResponse; @@ -99,18 +100,12 @@ public class OAIClient { * to the formats available for a specific item. * @return list metadata formats request */ - public ListMetadataFormatsRequest newListMetadataFormatsRequest() { - return new ListMetadataFormatsRequest(); - } /** * This verb is used to retrieve the set structure of a repository, * useful for selective harvesting. * @return list sets request */ - public ListSetsRequest newListSetsRequest() { - return new ListSetsRequest(); - } /** * This verb is an abbreviated form of ListRecords, retrieving only @@ -122,9 +117,6 @@ public class OAIClient { * @return list identifiers request * */ - public ListIdentifiersRequest newListIdentifiersRequest() { - return new ListIdentifiersRequest(); - } /** * This verb is used to retrieve an individual metadata record from @@ -137,9 +129,6 @@ public class OAIClient { * repository or from the specified item. * @return get record request */ - public GetRecordRequest newGetRecordRequest() { - return new GetRecordRequest(); - } /** * This verb is used to harvest records from a repository. @@ -196,9 +185,20 @@ public class OAIClient { } ListRecordsResponse listRecordsResponse = new ListRecordsResponse(listRecordsRequest); URL.Builder url = URL.from(baseURL).mutator(); - listRecordsRequest.getParams().forEach(url::queryParam); + logger.log(Level.FINE, "before: baseURL = " + baseURL + " url = " + url.build() + " uri = "); + // kind of hacky here - suppress all OAI params if resumption token is present + if (listRecordsRequest.getResumptionToken() == null) { + logger.log(Level.FINE, "no resumption token, params are " + listRecordsRequest.getParams() ); + listRecordsRequest.getParams().forEach(url::queryParam); + } else { + logger.log(Level.FINE, "no params because of resumption token " + listRecordsRequest.getResumptionToken()); + url.queryParam(OAIConstants.VERB_PARAMETER, OAIConstants.LIST_RECORDS); + url.queryParam(OAIConstants.RESUMPTION_TOKEN_PARAMETER, listRecordsRequest.getResumptionToken().toString()); + } + URI uri = URI.create(url.build().toExternalForm()); + logger.log(Level.FINE, "after: baseURL = " + baseURL + " url = " + url.build() + " uri = " + uri); HttpRequest httpRequest = HttpRequest.newBuilder() - .uri(URI.create(url.build().toExternalForm())) + .uri(uri) .header("accept", "utf-8") .header("user-agent", userAgent != null ? userAgent : "xbib OAI client") .GET() @@ -216,7 +216,6 @@ public class OAIClient { byte[] b = httpResponse.body(); if (b.length > 0) { consumer.accept(new ByteArrayInputStream(b)); - logger.log(Level.FINE, "body consumed: " + body); } } else { HttpResponse httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString()); @@ -262,81 +261,15 @@ public class OAIClient { } } - public IdentifyRequest resume(IdentifyRequest request, ResumptionToken token) { - if (request.isRetry()) { - request.setRetry(false); - return request; - } - if (token == null) { - return null; - } - IdentifyRequest nextRequest = new IdentifyRequest(); - nextRequest.setResumptionToken(token); - return nextRequest; - } - public ListRecordsRequest resume(ListRecordsRequest request, ResumptionToken token) { + ListRecordsRequest nextRequest = token != null ? new ListRecordsRequest() : request; + if (token != null) { + nextRequest.setResumptionToken(token); + } if (request.isRetry()) { - request.setRetry(false); - return request; + nextRequest.setRetry(false); + return nextRequest; } - if (token == null) { - return null; - } - ListRecordsRequest nextRequest = new ListRecordsRequest(); - nextRequest.setResumptionToken(token); - return nextRequest; - } - - public ListIdentifiersRequest resume(ListIdentifiersRequest request, ResumptionToken token) { - if (request.isRetry()) { - request.setRetry(false); - return request; - } - if (token == null) { - return null; - } - ListIdentifiersRequest nextRequest = newListIdentifiersRequest(); - nextRequest.setResumptionToken(token); - return nextRequest; - } - - public ListMetadataFormatsRequest resume(ListMetadataFormatsRequest request, ResumptionToken token) { - if (request.isRetry()) { - request.setRetry(false); - return request; - } - if (token == null) { - return null; - } - ListMetadataFormatsRequest nextRequest = newListMetadataFormatsRequest(); - nextRequest.setResumptionToken(token); - return nextRequest; - } - - public ListSetsRequest resume(ListSetsRequest request, ResumptionToken token) { - if (request.isRetry()) { - request.setRetry(false); - return request; - } - if (token == null) { - return null; - } - ListSetsRequest nextRequest = newListSetsRequest(); - nextRequest.setResumptionToken(token); - return nextRequest; - } - - public GetRecordRequest resume(GetRecordRequest request, ResumptionToken token) { - if (request.isRetry()) { - request.setRetry(false); - return request; - } - if (token == null) { - return null; - } - GetRecordRequest nextRequest = newGetRecordRequest(); - nextRequest.setResumptionToken(token); - return nextRequest; + return token != null ? nextRequest : null; } } diff --git a/oai-client/src/main/java/org/xbib/oai/client/listrecords/ListRecordsRequest.java b/oai-client/src/main/java/org/xbib/oai/client/listrecords/ListRecordsRequest.java index f5955c2..d85c67b 100644 --- a/oai-client/src/main/java/org/xbib/oai/client/listrecords/ListRecordsRequest.java +++ b/oai-client/src/main/java/org/xbib/oai/client/listrecords/ListRecordsRequest.java @@ -7,12 +7,9 @@ import org.xbib.oai.xml.MetadataHandler; import java.util.LinkedList; import java.util.List; -/** - * - */ public class ListRecordsRequest extends AbstractOAIRequest { - private List handlers = new LinkedList<>(); + private final List handlers = new LinkedList<>(); public ListRecordsRequest() { super();