diff --git a/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java b/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java index b37b9dbc41491c70ade437818f7be63439da474f..e409e89b72c48da40166df1881032d5035baf762 100644 --- a/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java +++ b/solidify-oai-pmh/src/main/java/ch/unige/solidify/controller/oai/OAIProviderController.java @@ -65,6 +65,7 @@ import ch.unige.solidify.exception.SolidifyResourceNotFoundException; import ch.unige.solidify.exception.SolidifyRuntimeException; import ch.unige.solidify.model.oai.OAIMetadataPrefix; import ch.unige.solidify.model.oai.OAIPMH; +import ch.unige.solidify.model.oai.OAIToken; import ch.unige.solidify.model.xml.oai.v2.OAIPMHerrorcodeType; import ch.unige.solidify.model.xml.oai.v2.OAIPMHtype; import ch.unige.solidify.rest.Tool; @@ -103,7 +104,7 @@ public class OAIProviderController implements ControllerWithHateoasHome { // ------------ // https://www.openarchives.org/OAI/openarchivesprotocol.html#GetRecord oai.setGetRecord(this.oaiService.getRecord(this.getRootUrl(request), identifier, metadataPrefix)); - final OAIMetadataPrefix oaiMetadataPrefixForRecord = this.oaiService.getOAIMetadataPrefix(metadataPrefix); + final OAIMetadataPrefix oaiMetadataPrefixForRecord = this.getOAIMetadataPrefix(metadataPrefix, token, oaiUrl); schemaLocations.put(oaiMetadataPrefixForRecord.getSchemaNamespace(), oaiMetadataPrefixForRecord.getSchemaUrl().toString()); break; case IDENTIFY: @@ -135,7 +136,8 @@ public class OAIProviderController implements ControllerWithHateoasHome { // ------------ // https://www.openarchives.org/OAI/openarchivesprotocol.html#ListRecords oai.setListRecords(this.oaiService.listRecords(this.getBaseUrl(request), metadataPrefix, from, until, set, token)); - final OAIMetadataPrefix oaiMetadataPrefixForList = this.oaiService.getOAIMetadataPrefix(metadataPrefix); + // OAI metadata prefix + final OAIMetadataPrefix oaiMetadataPrefixForList = this.getOAIMetadataPrefix(metadataPrefix, token, oaiUrl); schemaLocations.put(oaiMetadataPrefixForList.getSchemaNamespace(), oaiMetadataPrefixForList.getSchemaUrl().toString()); break; case LIST_SETS: @@ -293,4 +295,16 @@ public class OAIProviderController implements ControllerWithHateoasHome { baseUrl = baseUrl.substring(0, baseUrl.indexOf(OAIConstants.OAI_PROVIDER + SolidifyConstants.URL_SEP + OAIConstants.OAI_RESOURCE)); return baseUrl; } + + private OAIMetadataPrefix getOAIMetadataPrefix(String metadataPrefix, String token, String oaiUrl) { + if (metadataPrefix != null) { + return this.oaiService.getOAIMetadataPrefix(metadataPrefix); + } else if (token != null) { + OAIToken oaiToken = new OAIToken(); + oaiToken.setToken(token); + return this.oaiService.getOAIMetadataPrefix(oaiToken.getOaiParameters().getMetadataPrefix()); + } else { + throw new OAIException(OAIPMHerrorcodeType.NO_METADATA_FORMATS, oaiUrl); + } + } } diff --git a/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java b/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java index 354fb8bdc6072846aa422c6e12c85026eaa89c10..6dc2644982a0545231511afe714c271324429cff 100644 --- a/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java +++ b/solidify-oai-pmh/src/main/java/ch/unige/solidify/service/OAIService.java @@ -297,6 +297,7 @@ public class OAIService { for (final OAIRecord oaiRecord : list) { recList.getRecord().add(this.getRecord(baseUrl, oaiRecord, oaiToken.getOaiParameters().getMetadataPrefix())); } + if (collection.getPage().hasNext()) { recList.setResumptionToken(oaiToken.getToken(collection.getPage().getTotalItems(), collection.getPage().getPreviousItems())); }