From 0edd60c45583ab0fa9eb1ec93f5f790491c359a3 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Thu, 3 Jan 2019 12:21:55 -0500 Subject: [PATCH 1/4] 5427-refactor alreadyExists check, send new GlobalId when generating --- .../iq/dataverse/DOIDataCiteServiceBean.java | 17 +++++++++++++++-- .../iq/dataverse/DOIEZIdServiceBean.java | 16 +++++++++++++--- .../iq/dataverse/DataFileServiceBean.java | 2 +- .../iq/dataverse/GlobalIdServiceBean.java | 3 +++ .../iq/dataverse/HandlenetServiceBean.java | 7 +++++++ 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java index 2adecc63eb5..bf3efc73191 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java @@ -30,10 +30,24 @@ public boolean registerWhenPublished() { } @Override + @Deprecated 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 +57,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..6d91a96525b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java @@ -50,23 +50,33 @@ public boolean registerWhenPublished() { } @Override + @Deprecated 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..3da27b92501 100644 --- a/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java @@ -13,7 +13,10 @@ public interface GlobalIdServiceBean { static final Logger logger = Logger.getLogger(GlobalIdServiceBean.class.getCanonicalName()); + @Deprecated 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..88b8c486db6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java @@ -318,11 +318,18 @@ private String getHandleAuthority(String handlePrefix) { } @Override + @Deprecated public boolean alreadyExists(DvObject dvObject) throws Exception { String handle = getDvObjectHandle(dvObject); 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(); From 26f9c5a08bd3f37c55232a64a072b40cf099f757 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Thu, 3 Jan 2019 13:15:40 -0500 Subject: [PATCH 2/4] don't deprecate since used for Datasets --- .../java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java | 1 - src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java | 1 - src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java | 1 - src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java | 1 - 4 files changed, 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java index bf3efc73191..e4cafe56185 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java @@ -30,7 +30,6 @@ public boolean registerWhenPublished() { } @Override - @Deprecated public boolean alreadyExists(DvObject dvObject) { if(dvObject==null) { logger.severe("Null DvObject sent to alreadyExists()."); diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java index 6d91a96525b..d21caf32411 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIEZIdServiceBean.java @@ -50,7 +50,6 @@ public boolean registerWhenPublished() { } @Override - @Deprecated public boolean alreadyExists(DvObject dvObject) throws Exception { if(dvObject==null) { logger.severe("Null DvObject sent to alreadyExists()."); diff --git a/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java index 3da27b92501..0d64c1050b8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/GlobalIdServiceBean.java @@ -13,7 +13,6 @@ public interface GlobalIdServiceBean { static final Logger logger = Logger.getLogger(GlobalIdServiceBean.class.getCanonicalName()); - @Deprecated boolean alreadyExists(DvObject dvo) throws Exception; boolean alreadyExists(GlobalId globalId) throws Exception; diff --git a/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java index 88b8c486db6..c13a50d1cf9 100644 --- a/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/HandlenetServiceBean.java @@ -318,7 +318,6 @@ private String getHandleAuthority(String handlePrefix) { } @Override - @Deprecated public boolean alreadyExists(DvObject dvObject) throws Exception { String handle = getDvObjectHandle(dvObject); return isHandleRegistered(handle); From 919f89741f3ed2ac7fdc4ca5432fd95b578d30a6 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Thu, 3 Jan 2019 12:21:55 -0500 Subject: [PATCH 3/4] 5427-refactor alreadyExists check, send new GlobalId when generating --- .../iq/dataverse/DOIDataCiteServiceBean.java | 16 ++++++++++++++-- .../harvard/iq/dataverse/DOIEZIdServiceBean.java | 15 ++++++++++++--- .../iq/dataverse/DataFileServiceBean.java | 2 +- .../iq/dataverse/GlobalIdServiceBean.java | 2 ++ .../iq/dataverse/HandlenetServiceBean.java | 6 ++++++ 5 files changed, 35 insertions(+), 6 deletions(-) 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(); From b73b381d7e35f36affa6ad3181022b7d66d0f269 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Thu, 3 Jan 2019 13:38:04 -0500 Subject: [PATCH 4/4] update Fake provider --- .../dataverse/pidproviders/FakePidProviderServiceBean.java | 7 +++++++ 1 file changed, 7 insertions(+) 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() {