Skip to content

Commit

Permalink
refactor(settings): rename and retrieve EZID/DataCite settings via MP…
Browse files Browse the repository at this point in the history
…CONFIG #7000

- Add scopes and settings to JvmSettings for strictness and fast retrieval with MPCONFIG
- Rename settings to live under scope "dataverse.pid.ezid|datacite", so they are more
  aligned to our other settings. This could change again in the future, depending
  on what other devs feel where they should be located.
- Add aliases to make settings backward compatible - in the current state of Dataverse
  code, only one PID provider can be used at the same time and the double alias is
  with the deprecated, non-public EZID provider.
- Replace SystemConfig.getDataciteRestApiUrlString() with aliases and
  a default in microprofile-config.properties
  • Loading branch information
poikilotherm committed Jun 27, 2022
1 parent 065ec61 commit 1e30c47
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import edu.harvard.iq.dataverse.settings.JvmSettings;
import org.apache.commons.text.StringEscapeUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
Expand Down Expand Up @@ -53,7 +55,11 @@ public class DOIDataCiteRegisterService {

private DataCiteRESTfullClient getClient() throws IOException {
if (client == null) {
client = new DataCiteRESTfullClient(System.getProperty("doi.baseurlstring"), System.getProperty("doi.username"), System.getProperty("doi.password"));
client = new DataCiteRESTfullClient(
JvmSettings.DATACITE_MDS_API_URL.lookup(),
JvmSettings.DATACITE_USERNAME.lookup(),
JvmSettings.DATACITE_PASSWORD.lookup()
);
}
return client;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import javax.ejb.EJB;
import javax.ejb.Stateless;

import edu.harvard.iq.dataverse.settings.JvmSettings;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;

Expand Down Expand Up @@ -219,9 +220,9 @@ public void deleteIdentifier(DvObject dvObject) throws IOException, HttpExceptio
private void deleteDraftIdentifier(DvObject dvObject) throws IOException {

//ToDo - incorporate into DataCiteRESTfulClient
String baseUrl = systemConfig.getDataCiteRestApiUrlString();
String username = System.getProperty("doi.username");
String password = System.getProperty("doi.password");
String baseUrl = JvmSettings.DATACITE_REST_API_URL.lookup();
String username = JvmSettings.DATACITE_USERNAME.lookup();
String password = JvmSettings.DATACITE_PASSWORD.lookup();
GlobalId doi = dvObject.getGlobalId();
/**
* Deletes the DOI from DataCite if it can. Returns 204 if PID was deleted
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package edu.harvard.iq.dataverse;

import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.ucsb.nceas.ezid.EZIDException;
import edu.ucsb.nceas.ezid.EZIDService;
import edu.ucsb.nceas.ezid.EZIDServiceRequest;
Expand All @@ -26,10 +27,10 @@ public class DOIEZIdServiceBean extends AbstractGlobalIdServiceBean {

public DOIEZIdServiceBean() {
logger.log(Level.FINE,"Constructor");
baseURLString = System.getProperty("doi.baseurlstring");
baseURLString = JvmSettings.EZID_API_URL.lookup();
ezidService = new EZIDService(baseURLString);
USERNAME = System.getProperty("doi.username");
PASSWORD = System.getProperty("doi.password");
USERNAME = JvmSettings.EZID_USERNAME.lookup();
PASSWORD = JvmSettings.EZID_PASSWORD.lookup();
logger.log(Level.FINE, "Using baseURLString {0}", baseURLString);
try {
ezidService.login(USERNAME, PASSWORD);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import edu.harvard.iq.dataverse.makedatacount.DatasetExternalCitationsServiceBean;
import edu.harvard.iq.dataverse.makedatacount.DatasetMetrics;
import edu.harvard.iq.dataverse.makedatacount.DatasetMetricsServiceBean;
import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.harvard.iq.dataverse.util.SystemConfig;

import java.io.FileReader;
Expand Down Expand Up @@ -141,7 +142,10 @@ public Response updateCitationsForDataset(@PathParam("id") String id) throws Mal
// DataCite wants "doi=", not "doi:".
String authorityPlusIdentifier = persistentId.replaceFirst("doi:", "");
// Request max page size and then loop to handle multiple pages
URL url = new URL(systemConfig.getDataCiteRestApiUrlString() + "/events?doi=" + authorityPlusIdentifier + "&source=crossref&page[size]=1000");
URL url = new URL(JvmSettings.DATACITE_REST_API_URL.lookup() +
"/events?doi=" +
authorityPlusIdentifier +
"&source=crossref&page[size]=1000");
logger.fine("Retrieving Citations from " + url.toString());
boolean nextPage = true;
JsonArrayBuilder dataBuilder = Json.createArrayBuilder();
Expand Down
11 changes: 8 additions & 3 deletions src/main/java/edu/harvard/iq/dataverse/api/Pids.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import edu.harvard.iq.dataverse.engine.command.impl.DeletePidCommand;
import edu.harvard.iq.dataverse.engine.command.impl.ReservePidCommand;
import edu.harvard.iq.dataverse.pidproviders.PidUtil;
import edu.harvard.iq.dataverse.settings.JvmSettings;
import edu.harvard.iq.dataverse.util.BundleUtil;
import java.util.Arrays;
import javax.ejb.Stateless;
Expand Down Expand Up @@ -46,9 +47,13 @@ public Response getPid(@QueryParam("persistentId") String persistentId) {
} catch (WrappedResponse ex) {
return error(Response.Status.FORBIDDEN, BundleUtil.getStringFromBundle("api.errors.invalidApiToken"));
}
String baseUrl = systemConfig.getDataCiteRestApiUrlString();
String username = System.getProperty("doi.username");
String password = System.getProperty("doi.password");

// FIXME: Even before changing to MPCONFIG retrieval, this was pinned to be DataCite specific!
// Should this be extended to EZID and other PID systems like Handle?
String baseUrl = JvmSettings.DATACITE_REST_API_URL.lookup();
String username = JvmSettings.DATACITE_USERNAME.lookup();
String password = JvmSettings.DATACITE_PASSWORD.lookup();

try {
JsonObjectBuilder result = PidUtil.queryDoi(persistentId, baseUrl, username, password);
return ok(result);
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/settings/JvmSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,23 @@ public enum JvmSettings {
SOLR_CORE(SCOPE_SOLR, "core"),
SOLR_PATH(SCOPE_SOLR, "path"),

// PERSISTENT IDENTIFIER SETTINGS
SCOPE_PID(PREFIX, "pid"),

// PROVIDER EZID (legacy) - these settings were formerly kept together with DataCite ones
SCOPE_PID_EZID(SCOPE_PID, "ezid"),
EZID_API_URL(SCOPE_PID_EZID, "api-url", "doi.baseurlstring"),
EZID_USERNAME(SCOPE_PID_EZID, "username", "doi.username"),
EZID_PASSWORD(SCOPE_PID_EZID, "password", "doi.password"),

// PROVIDER DATACITE
SCOPE_PID_DATACITE(SCOPE_PID, "datacite"),
DATACITE_MDS_API_URL(SCOPE_PID_DATACITE, "mds-api-url", "doi.baseurlstring"),
DATACITE_REST_API_URL(SCOPE_PID_DATACITE, "rest-api-url", "doi.dataciterestapiurlstring", "doi.mdcbaseurlstring"),
DATACITE_USERNAME(SCOPE_PID_DATACITE, "username", "doi.username"),
DATACITE_PASSWORD(SCOPE_PID_DATACITE, "password", "doi.password"),


;

private static final String SCOPE_SEPARATOR = ".";
Expand Down
5 changes: 0 additions & 5 deletions src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -994,11 +994,6 @@ public boolean isDatafileValidationOnPublishEnabled() {
public boolean directUploadEnabled(DvObjectContainer container) {
return Boolean.getBoolean("dataverse.files." + container.getEffectiveStorageDriverId() + ".upload-redirect");
}

public String getDataCiteRestApiUrlString() {
//As of 5.0 the 'doi.dataciterestapiurlstring' is the documented jvm option. Prior versions used 'doi.mdcbaseurlstring' or were hardcoded to api.datacite.org, so the defaults are for backward compatibility.
return System.getProperty("doi.dataciterestapiurlstring", System.getProperty("doi.mdcbaseurlstring", "https://api.datacite.org"));
}

public boolean isExternalDataverseValidationEnabled() {
return settingsService.getValueForKey(SettingsServiceBean.Key.DataverseMetadataValidatorScript) != null;
Expand Down
8 changes: 8 additions & 0 deletions src/main/resources/META-INF/microprofile-config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,11 @@ dataverse.db.host=localhost
dataverse.db.port=5432
dataverse.db.user=dataverse
dataverse.db.name=dataverse

# PERSISTENT IDENTIFIER PROVIDERS
# EZID
dataverse.pid.ezid.api-url=https://ezid.cdlib.org

# DataCite
dataverse.pid.datacite.mds-api-url=https://mds.datacite.org
dataverse.pid.datacite.rest-api-url=https://api.datacite.org

0 comments on commit 1e30c47

Please sign in to comment.