diff --git a/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java b/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java index d06c2a51009..7fc03dc90d6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java +++ b/src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java @@ -101,10 +101,10 @@ public void init(ServletConfig config) throws ServletException { //addMetadataFormatConditions(xoaiContext); setRepository = new DataverseXoaiSetRepository(setService); - itemRepository = new DataverseXoaiItemRepository(recordService, datasetService, systemConfig.getDataverseSiteUrl()+"/oai"); + itemRepository = new DataverseXoaiItemRepository(recordService, datasetService, systemConfig.getDataverseSiteUrl()); repositoryConfiguration = createRepositoryConfiguration(); - + xoaiRepository = new Repository() .withSetRepository(setRepository) .withItemRepository(itemRepository) @@ -182,20 +182,19 @@ private RepositoryConfiguration createRepositoryConfiguration() { // (Note: if the setting does not exist, we are going to assume that they // have a reason not to want to advertise their email address, so no // email will be shown in the output of Identify. - InternetAddress internetAddress = MailUtil.parseSystemAddress(settingsService.getValueForKey(SettingsServiceBean.Key.SystemEmail)); + InternetAddress systemEmailAddress = MailUtil.parseSystemAddress(settingsService.getValueForKey(SettingsServiceBean.Key.SystemEmail)); - RepositoryConfiguration repositoryConfiguration = new RepositoryConfiguration() + RepositoryConfiguration repositoryConfiguration = RepositoryConfiguration.defaults() .withRepositoryName(repositoryName) .withBaseUrl(systemConfig.getDataverseSiteUrl()+"/oai") .withCompression("gzip") .withCompression("deflate") - .withAdminEmail(internetAddress != null ? internetAddress.getAddress() : null) + .withAdminEmail(systemEmailAddress != null ? systemEmailAddress.getAddress() : null) .withDeleteMethod(DeletedRecord.TRANSIENT) - .withGranularity(Granularity.Second) .withMaxListIdentifiers(systemConfig.getOaiServerMaxIdentifiers()) .withMaxListRecords(systemConfig.getOaiServerMaxRecords()) .withMaxListSets(systemConfig.getOaiServerMaxSets()) - .withEarliestDate(new Date().toInstant()); // TODO: + .withEnableMetadataAttributes(true); return repositoryConfiguration; } diff --git a/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java b/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java index 1d50254fef9..6f246309593 100644 --- a/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java +++ b/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java @@ -140,7 +140,7 @@ public Item getItem(String identifier, MetadataFormat metadataFormat) throws Han @Override public ResultsPage getItemIdentifiers(List filters, MetadataFormat metadataFormat, int maxResponseLength, ResumptionToken.Value resumptionToken) throws HandlerException { - int offset = resumptionToken.getOffset().intValue(); + int offset = Long.valueOf(resumptionToken.getOffset()).intValue(); String setSpec = resumptionToken.getSetSpec(); Instant from = resumptionToken.getFrom(); Instant until = resumptionToken.getUntil(); @@ -183,7 +183,7 @@ public ResultsPage getItemIdentifiers(List filters final ResumptionToken.Value resumptionToken) throws HandlerException; */ @Override public ResultsPage getItems(List filters, MetadataFormat metadataFormat, int maxResponseLength, ResumptionToken.Value resumptionToken) throws HandlerException { - int offset = resumptionToken.getOffset().intValue(); + int offset = Long.valueOf(resumptionToken.getOffset()).intValue(); String setSpec = resumptionToken.getSetSpec(); Instant from = resumptionToken.getFrom(); Instant until = resumptionToken.getUntil(); @@ -297,11 +297,12 @@ private Metadata getDatasetMetadata(Dataset dataset, String metadataPrefix) thro Metadata metadata; if ("dataverse_json".equals(metadataPrefix)) { - // Slightly modified version of the old proprietary Json harvesting hack: - // (decision pending as to whether we want to provide backward compatibility - // for older Dataverse harvesting clients) + // Solely for backward compatibility, for older Dataverse harvesting clients + // that may still be relying on harvesting "dataverse_json"; + // we will want to eventually get rid of this hack! String apiUrl = customDataverseJsonApiUri(dataset.getGlobalId().asString()); - metadata = new Metadata(new EchoElement("" + apiUrl + "")); + metadata = new Metadata(new EchoElement("custom metadata")).withAttribute("directApiCall", apiUrl); + } else { InputStream pregeneratedMetadataStream; pregeneratedMetadataStream = ExportService.getInstance().getExport(dataset, metadataPrefix);