diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java index 2adecc63eb5..e4cafe56185 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java @@ -31,9 +31,22 @@ public boolean registerWhenPublished() { @Override public boolean alreadyExists(DvObject dvObject) { + if(dvObject==null) { + logger.severe("Null DvObject sent to alreadyExists()."); + return false; + } + return alreadyExists(dvObject.getGlobalId()); + } + + @Override + public boolean alreadyExists(GlobalId pid) { logger.log(Level.FINE,"alreadyExists"); + if(pid==null) { + logger.severe("No identifier sent."); + return false; + } boolean alreadyExists; - String identifier = getIdentifier(dvObject); + String identifier = pid.asString(); try{ alreadyExists = doiDataCiteRegisterService.testDOIExists(identifier); } catch (Exception e){ @@ -43,7 +56,6 @@ public boolean alreadyExists(DvObject dvObject) { return alreadyExists; } - @Override public String createIdentifier(DvObject dvObject) throws Exception { diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java index ab622fc5b43..d21caf32411 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java @@ -51,22 +51,31 @@ public boolean registerWhenPublished() { @Override public boolean alreadyExists(DvObject dvObject) throws Exception { + if(dvObject==null) { + logger.severe("Null DvObject sent to alreadyExists()."); + return false; + } + return alreadyExists(dvObject.getGlobalId()); + } + + @Override + public boolean alreadyExists(GlobalId pid) throws Exception { logger.log(Level.FINE,"alreadyExists"); try { - HashMap result = ezidService.getMetadata(getIdentifier(dvObject)); + HashMap result = ezidService.getMetadata(pid.asString()); return result != null && !result.isEmpty(); // TODO just check for HTTP status code 200/404, sadly the status code is swept under the carpet } catch (EZIDException e ){ //No such identifier is treated as an exception //but if that is the case then we want to just return false - if(dvObject.getIdentifier() == null){ + if(pid.getIdentifier() == null){ return false; } if (e.getLocalizedMessage().contains("no such identifier")){ return false; } logger.log(Level.WARNING, "alreadyExists failed"); - logger.log(Level.WARNING, "getIdentifier(dvObject) {0}", getIdentifier(dvObject)); + logger.log(Level.WARNING, "getIdentifier(dvObject) {0}", pid.asString()); logger.log(Level.WARNING, "String {0}", e.toString()); logger.log(Level.WARNING, "localized message {0}", e.getLocalizedMessage()); logger.log(Level.WARNING, "cause", e.getCause()); diff --git a/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java index 71d25a146c1..47b4848d458 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java @@ -1567,7 +1567,7 @@ public boolean isGlobalIdUnique(String userIdentifier, DataFile datafile, Global .getResultList().isEmpty(); try{ - if (idServiceBean.alreadyExists(datafile)) { + if (idServiceBean.alreadyExists(new GlobalId(testProtocol, testAuthority, userIdentifier))) { u = false; } } catch (Exception e){ diff --git a/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java index b649831bf52..0d64c1050b8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java @@ -14,6 +14,8 @@ public interface GlobalIdServiceBean { static final Logger logger = Logger.getLogger(GlobalIdServiceBean.class.getCanonicalName()); boolean alreadyExists(DvObject dvo) throws Exception; + + boolean alreadyExists(GlobalId globalId) throws Exception; boolean registerWhenPublished(); diff --git a/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java index 30572f27b36..c13a50d1cf9 100644 --- a/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java @@ -323,6 +323,12 @@ public boolean alreadyExists(DvObject dvObject) throws Exception { return isHandleRegistered(handle); } + @Override + public boolean alreadyExists(GlobalId pid) throws Exception { + String handle = pid.getAuthority() + "/" + pid.getIdentifier(); + return isHandleRegistered(handle); + } + @Override public Map getIdentifierMetadata(DvObject dvObject) { throw new NotImplementedException(); diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/FakePidProviderServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/FakePidProviderServiceBean.java index 389e5b3d874..ce9e281e986 100644 --- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/FakePidProviderServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/FakePidProviderServiceBean.java @@ -2,6 +2,8 @@ import edu.harvard.iq.dataverse.AbstractGlobalIdServiceBean; import edu.harvard.iq.dataverse.DvObject; +import edu.harvard.iq.dataverse.GlobalId; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -15,6 +17,11 @@ public class FakePidProviderServiceBean extends AbstractGlobalIdServiceBean { public boolean alreadyExists(DvObject dvo) throws Exception { return true; } + + @Override + public boolean alreadyExists(GlobalId globalId) throws Exception { + return true; + } @Override public boolean registerWhenPublished() {