From ac5a485fb7fb77e85f77b31f6bc3336b93b068dc Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 28 Jun 2018 16:37:09 -0400 Subject: [PATCH 1/8] send relatedIdentifier to DataCite #4782 --- .../dataverse/DOIDataCiteRegisterService.java | 13 ++++++++++++ .../dataverse/datacite_metadata_template.xml | 3 +++ .../harvard/iq/dataverse/api/DataCiteIT.java | 7 ++++++- workingDataCiteMetadataTemplate-Files.xml | 20 ------------------- 4 files changed, 22 insertions(+), 21 deletions(-) delete mode 100644 workingDataCiteMetadataTemplate-Files.xml diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java index 6f35afe8838..aa67f037897 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java @@ -143,6 +143,13 @@ private String getMetadataFromDvObject(String identifier, HashMap creators; private String title; private String publisher; @@ -355,6 +363,7 @@ public String generateXML() { .replace("${title}", this.title) .replace("${publisher}", this.publisher) .replace("${publisherYear}", this.publisherYear) + .replace("${datasetIdentifier}", this.datasetIdentifier) .replace("${description}", this.description); StringBuilder creatorsElement = new StringBuilder(); for (DatasetAuthor author : authors) { @@ -418,6 +427,10 @@ public void setIdentifier(String identifier) { this.identifier = identifier; } + public void setDatasetIdentifier(String datasetIdentifier) { + this.datasetIdentifier = datasetIdentifier; + } + public List getCreators() { return creators; } diff --git a/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml b/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml index c11e18b49ee..c603c69d52b 100644 --- a/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml +++ b/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml @@ -10,6 +10,9 @@ ${publisher} ${publisherYear} + + ${datasetIdentifier} + ${description} diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DataCiteIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DataCiteIT.java index 858bdbfdfbc..05616abf3df 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DataCiteIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DataCiteIT.java @@ -10,7 +10,8 @@ * These tests will only work if you are using "DataCite" rather than "EZID" for * your :DoiProvider and have done all the other related setup to switch from * EZID, including setting JVM options. Look for DataCite in the dev guide for - * more tips. + * more tips. You should switch away from EZID for dev anyway because it's going + * away: https://www.cdlib.org/cdlinfo/2017/08/04/ezid-doi-service-is-evolving/ */ public class DataCiteIT { @@ -35,6 +36,10 @@ public void testCreateAndPublishDataset() { createDataset.prettyPrint(); String datasetPersistentId = UtilIT.getDatasetPersistentIdFromResponse(createDataset); + Response uploadFile = UtilIT.uploadRandomFile(datasetPersistentId, apiToken); + uploadFile.then().assertThat() + .statusCode(201); + Response publishDataverse = UtilIT.publishDataverseViaSword(dataverseAlias, apiToken); assertEquals(200, publishDataverse.getStatusCode()); diff --git a/workingDataCiteMetadataTemplate-Files.xml b/workingDataCiteMetadataTemplate-Files.xml deleted file mode 100644 index 7dc839c878a..00000000000 --- a/workingDataCiteMetadataTemplate-Files.xml +++ /dev/null @@ -1,20 +0,0 @@ - - ${identifier} - - ${creators} - - - ${title} - - ${publisher} - ${publisherYear} - - - ${datasetIdentifier} - - - ${description} - - \ No newline at end of file From e883110327eb92f3815225ec378e07ad698e83ef Mon Sep 17 00:00:00 2001 From: Benjamin Martinez Date: Fri, 13 Jul 2018 12:06:58 -0400 Subject: [PATCH 2/8] In the process of testing. This work isn't finished, I just needed to save them before I switched over to develop. #4782 --- .../dataverse/DOIDataCiteRegisterService.java | 54 +++++++++++++++++-- .../edu/harvard/iq/dataverse/DataFile.java | 2 +- .../dataverse/datacite_metadata_template.xml | 4 +- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java index aa67f037897..c402c47ffa7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java @@ -150,8 +150,8 @@ private String getMetadataFromDvObject(String identifier, HashMap metada } return retString; } + + public String setUpFileIdentifiers(DvObject dvObject) + { + StringBuilder sb = new StringBuilder(); + String fileIdentifiers; + + if(dvObject.isInstanceofDataset()){ + Dataset ds = (Dataset) dvObject; + + for(int i = 0; i < ds.getFiles().size(); i++) + sb.append(ds.getFiles().get(i).getIdentifier() + "|:|"); + + fileIdentifiers = sb.toString(); + } + else + fileIdentifiers = ""; + + return fileIdentifiers; + } + public boolean testDOIExists(String identifier) { boolean doiExists; @@ -274,6 +294,7 @@ class DataCiteMetadataTemplate { private static String template; static { + //use other template for files try (InputStream in = DataCiteMetadataTemplate.class.getResourceAsStream("datacite_metadata_template.xml")) { template = Util.readAndClose(in, "utf-8"); } catch (Exception e) { @@ -288,6 +309,8 @@ class DataCiteMetadataTemplate { private String xmlMetadata; private String identifier; private String datasetIdentifier; + //or possibly ……… + private List datafileIdentifiers; private List creators; private String title; private String publisher; @@ -297,6 +320,7 @@ class DataCiteMetadataTemplate { private List contacts; private List producers; + public List getProducers() { return producers; } @@ -331,12 +355,24 @@ public void setAuthors(List authors) { public DataCiteMetadataTemplate() { } + + + public List getDatafileIdentifiers() { + return datafileIdentifiers; + } + + public void setDatafileIdentifiers(List datafileIdentifiers) { + this.datafileIdentifiers = datafileIdentifiers; + } public DataCiteMetadataTemplate(String xmlMetaData) { this.xmlMetadata = xmlMetaData; Document doc = Jsoup.parseBodyFragment(xmlMetaData); Elements identifierElements = doc.select("identifier"); if (identifierElements.size() > 0) { + //Why do we only get the first element. Is it because + //there should be only one element in here? If so, why + //does identifierElements need to be an ArrayList? identifier = identifierElements.get(0).html(); } Elements creatorElements = doc.select("creatorName"); @@ -389,7 +425,7 @@ public String generateXML() { creatorsElement.append(""); } xmlMetadata = xmlMetadata.replace("${creators}", creatorsElement.toString()); - + StringBuilder contributorsElement = new StringBuilder(); for (String[] contact : this.getContacts()) { if (!contact[0].isEmpty()) { @@ -407,9 +443,21 @@ public String generateXML() { } contributorsElement.append(""); } + + StringBuilder fileIdentifiersElement = new StringBuilder(); + + for (String fileIdentifier : datafileIdentifiers){ + fileIdentifiersElement.append(""); + fileIdentifiersElement.append(fileIdentifier); + fileIdentifiersElement.append("${publisherYear} - ${datasetIdentifier} + + ${relatedIdentifiers} ${description} From fa081074748c70eee1956b8088148110dc254513 Mon Sep 17 00:00:00 2001 From: Benjamin Martinez Date: Mon, 23 Jul 2018 15:58:08 -0400 Subject: [PATCH 3/8] Some changes to how Dataset XML will be sent to DataCite. #4782 This a topic branch and should be merged to 4782-DataCite --- .../dataverse/DOIDataCiteRegisterService.java | 50 +++++++++++++++++-- .../iq/dataverse/DOIDataCiteServiceBean.java | 2 +- .../edu/harvard/iq/dataverse/DatasetPage.java | 4 +- .../dataverse/datacite_metadata_template.xml | 4 +- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java index c402c47ffa7..5518b1aa299 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java @@ -45,11 +45,14 @@ private DataCiteRESTfullClient openClient() throws IOException { } public String createIdentifierLocal(String identifier, HashMap metadata, DvObject dvObject) { + logger.info(identifier + "$$$$$"); + logger.info(dvObject.getAuthorString()); + logger.info(metadata.toString()); String xmlMetadata = getMetadataFromDvObject(identifier, metadata, dvObject); String status = metadata.get("_status").trim(); String target = metadata.get("_target"); String retString = ""; - DOIDataCiteRegisterCache rc = findByDOI(identifier); + DOIDataCiteRegisterCache rc = findByDOI(identifier); if (rc == null) { rc = new DOIDataCiteRegisterCache(); rc.setDoi(identifier); @@ -64,6 +67,8 @@ public String createIdentifierLocal(String identifier, HashMap m rc.setUrl(target); } retString = "success to reserved " + identifier; + + return retString; } @@ -150,7 +155,9 @@ private String getMetadataFromDvObject(String identifier, HashMap"); fileIdentifiersElement.append(fileIdentifier); fileIdentifiersElement.append("(); + for (DataFile dataFile : dataset.getFiles()) + { + datafileIdentifiers.add(dataFile.getIdentifier()); + int x = xmlMetadata.indexOf("") - 1; + + //Fails at line below. It goes through all this twice and since the "relatedIdentifier" line gets taken out the first time it is failing when it goes through the second time + xmlMetadata = xmlMetadata.replace("{relatedIdentifier}", dataFile.getIdentifier()); + xmlMetadata = xmlMetadata.substring(0, x) + "${relatedIdentifier}" + template.substring(x, template.length()-1); + + } + + xmlMetadata = xmlMetadata.replace("${relatedIdentifier}", ""); + + } + } + } public static String getTemplate() { diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java index 44a7e9efad9..b59021e8ac6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteServiceBean.java @@ -54,6 +54,7 @@ public String createIdentifier(DvObject dvObject) throws Exception { logger.log(Level.FINE,"createIdentifier"); if(dvObject.getIdentifier() == null || dvObject.getIdentifier().isEmpty() ){ dvObject = generateIdentifier(dvObject); + System.out.println(":)"); } String identifier = getIdentifier(dvObject); HashMap metadata = getMetadataForCreateIndicator(dvObject); @@ -67,7 +68,6 @@ public String createIdentifier(DvObject dvObject) throws Exception { logger.log(Level.WARNING, "String {0}", e.toString()); logger.log(Level.WARNING, "localized message {0}", e.getLocalizedMessage()); logger.log(Level.WARNING, "cause", e.getCause()); - logger.log(Level.WARNING, "message {0}", e.getMessage()); throw e; } } diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 851a98b0023..60602e2d50a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -1379,7 +1379,7 @@ private String init(boolean initFull) { // Set Working Version and Dataset by PersistentID dataset = datasetService.findByGlobalId(persistentId); if (dataset == null) { - logger.warning("No such dataset: "+persistentId); + logger.warning("++++No such dataset: "+persistentId); return permissionsWrapper.notFound(); } logger.fine("retrieved dataset, id="+dataset.getId()); @@ -1393,7 +1393,7 @@ private String init(boolean initFull) { // Set Working Version and Dataset by Datasaet Id and Version dataset = datasetService.find(dataset.getId()); if (dataset == null) { - logger.warning("No such dataset: "+dataset); + logger.warning("????No such dataset: "+dataset); return permissionsWrapper.notFound(); } //retrieveDatasetVersionResponse = datasetVersionService.retrieveDatasetVersionById(dataset.getId(), version); diff --git a/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml b/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml index 21b515e0c8c..73478330b4a 100644 --- a/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml +++ b/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml @@ -11,9 +11,7 @@ ${publisherYear} - - ${relatedIdentifiers} + ${relatedIdentifier} ${description} From f4368174929641831460fdd9a8be982e78b38dae Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Tue, 24 Jul 2018 10:51:43 -0400 Subject: [PATCH 4/8] #4782 related identifier metadata --- .../dataverse/DOIDataCiteRegisterService.java | 83 ++++++++++++------- .../dataverse/datacite_metadata_template.xml | 4 +- 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java index 5518b1aa299..57dbc34d552 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java @@ -451,51 +451,76 @@ public String generateXML(DvObject dvObject) { contributorsElement.append(""); } - StringBuilder fileIdentifiersElement = new StringBuilder(); + // StringBuilder fileIdentifiersElement = new StringBuilder(); - generateFileIdentifiers(dvObject); + // generateFileIdentifiers(dvObject); + String relIdentifiers = generateRelatedIdentifiers (dvObject); - if (datafileIdentifiers != null) { - for (String fileIdentifier : datafileIdentifiers){ - fileIdentifiersElement.append(""); - fileIdentifiersElement.append(fileIdentifier); - fileIdentifiersElement.append("(); + for (DataFile dataFile : dataset.getFiles()) { + String add = ""; + sb.append(""); + if (!dataFile.getGlobalId().isEmpty()) { + add = "" + dataFile.getGlobalId() + ""; + if (sb.toString().isEmpty()) { + sb.append(""); + } + sb.append(add); + } + + } + + if (!sb.toString().isEmpty()) { + sb.append(""); + } + } + } else if (dvObject.isInstanceofDataFile()){ + DataFile df = (DataFile) dvObject; + sb.append(""); + sb.append("" + df.getOwner().getGlobalId() + ""); + sb.append(""); + } + return sb.toString(); + } - public void generateFileIdentifiers(DvObject dvObject) - { - - if (dvObject.isInstanceofDataset()) - { + public void generateFileIdentifiers(DvObject dvObject) { + + if (dvObject.isInstanceofDataset()) { Dataset dataset = (Dataset) dvObject; - - if (!(dataset.getFiles().get(0).getIdentifier() == null)) - { - + + if (!dataset.getFiles().isEmpty() && !(dataset.getFiles().get(0).getIdentifier() == null)) { + //t = "hello" + dataset.getFiles().get(0); datafileIdentifiers = new ArrayList<>(); - for (DataFile dataFile : dataset.getFiles()) - { + for (DataFile dataFile : dataset.getFiles()) { datafileIdentifiers.add(dataFile.getIdentifier()); int x = xmlMetadata.indexOf("") - 1; - //Fails at line below. It goes through all this twice and since the "relatedIdentifier" line gets taken out the first time it is failing when it goes through the second time - xmlMetadata = xmlMetadata.replace("{relatedIdentifier}", dataFile.getIdentifier()); - xmlMetadata = xmlMetadata.substring(0, x) + "${relatedIdentifier}" + template.substring(x, template.length()-1); + xmlMetadata = xmlMetadata.replace("{relatedIdentifier}", dataFile.getIdentifier()); + xmlMetadata = xmlMetadata.substring(0, x) + "${relatedIdentifier}" + template.substring(x, template.length() - 1); } - - xmlMetadata = xmlMetadata.replace("${relatedIdentifier}", ""); - + + } else { + xmlMetadata = xmlMetadata.replace("${relatedIdentifier}", ""); } } } diff --git a/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml b/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml index 73478330b4a..ef26fe09bac 100644 --- a/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml +++ b/src/main/resources/edu/harvard/iq/dataverse/datacite_metadata_template.xml @@ -10,9 +10,7 @@ ${publisher} ${publisherYear} - - ${relatedIdentifier} - + ${relatedIdentifiers} ${description} From ca8e332ed943c466c4a3147c2fcd2687cca08958 Mon Sep 17 00:00:00 2001 From: Benjamin Martinez Date: Tue, 24 Jul 2018 14:28:17 -0400 Subject: [PATCH 5/8] Generates File DOIs prior to dataset publication #4782 --- .../command/impl/FinalizeDatasetPublicationCommand.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java index b54344e608b..7a3618ae413 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/FinalizeDatasetPublicationCommand.java @@ -170,9 +170,7 @@ private void publicizeExternalIdentifier(CommandContext ctxt) throws CommandExce String protocol = theDataset.getProtocol(); IdServiceBean idServiceBean = IdServiceBean.getBean(protocol, ctxt); try { - idServiceBean.publicizeIdentifier(theDataset); - theDataset.setGlobalIdCreateTime(new Date()); - theDataset.setIdentifierRegistered(true); + for (DataFile df : theDataset.getFiles()) { logger.fine("registering global id for file "+df.getId()); idServiceBean.publicizeIdentifier(df); @@ -181,6 +179,9 @@ private void publicizeExternalIdentifier(CommandContext ctxt) throws CommandExce // this merge() on an individual file below is unnecessary: //DataFile merged = ctxt.em().merge(df); } + idServiceBean.publicizeIdentifier(theDataset); + theDataset.setGlobalIdCreateTime(new Date()); + theDataset.setIdentifierRegistered(true); } catch (Throwable e) { //if publicize fails remove the lock for registration ctxt.datasets().removeDatasetLocks(theDataset.getId(), DatasetLock.Reason.pidRegister); From 91abbc558a60054898cc63af4c9bad9c331ef467 Mon Sep 17 00:00:00 2001 From: Benjamin Martinez Date: Wed, 25 Jul 2018 11:39:57 -0400 Subject: [PATCH 6/8] Closing changes. I basically just removed extra loggers and unnecessary comments #4782 --- .../dataverse/DOIDataCiteRegisterService.java | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java index 57dbc34d552..385e468e374 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java @@ -45,9 +45,7 @@ private DataCiteRESTfullClient openClient() throws IOException { } public String createIdentifierLocal(String identifier, HashMap metadata, DvObject dvObject) { - logger.info(identifier + "$$$$$"); - logger.info(dvObject.getAuthorString()); - logger.info(metadata.toString()); + String xmlMetadata = getMetadataFromDvObject(identifier, metadata, dvObject); String status = metadata.get("_status").trim(); String target = metadata.get("_target"); @@ -301,7 +299,6 @@ class DataCiteMetadataTemplate { private static String template; static { - //use other template for files try (InputStream in = DataCiteMetadataTemplate.class.getResourceAsStream("datacite_metadata_template.xml")) { template = Util.readAndClose(in, "utf-8"); } catch (Exception e) { @@ -316,7 +313,6 @@ class DataCiteMetadataTemplate { private String xmlMetadata; private String identifier; private String datasetIdentifier; - //or possibly ……… private List datafileIdentifiers; private List creators; private String title; @@ -377,9 +373,6 @@ public DataCiteMetadataTemplate(String xmlMetaData) { Document doc = Jsoup.parseBodyFragment(xmlMetaData); Elements identifierElements = doc.select("identifier"); if (identifierElements.size() > 0) { - //Why do we only get the first element. Is it because - //there should be only one element in here? If so, why - //does identifierElements need to be an ArrayList? identifier = identifierElements.get(0).html(); } Elements creatorElements = doc.select("creatorName"); @@ -451,15 +444,10 @@ public String generateXML(DvObject dvObject) { contributorsElement.append(""); } - // StringBuilder fileIdentifiersElement = new StringBuilder(); - - // generateFileIdentifiers(dvObject); String relIdentifiers = generateRelatedIdentifiers (dvObject); xmlMetadata = xmlMetadata.replace("${relatedIdentifiers}", relIdentifiers); - - xmlMetadata = xmlMetadata.replace("{$contributors}", contributorsElement.toString()); return xmlMetadata; } @@ -483,7 +471,6 @@ private String generateRelatedIdentifiers(DvObject dvObject) { } sb.append(add); } - } if (!sb.toString().isEmpty()) { @@ -507,12 +494,10 @@ public void generateFileIdentifiers(DvObject dvObject) { if (!dataset.getFiles().isEmpty() && !(dataset.getFiles().get(0).getIdentifier() == null)) { - //t = "hello" + dataset.getFiles().get(0); datafileIdentifiers = new ArrayList<>(); for (DataFile dataFile : dataset.getFiles()) { datafileIdentifiers.add(dataFile.getIdentifier()); int x = xmlMetadata.indexOf("") - 1; - //Fails at line below. It goes through all this twice and since the "relatedIdentifier" line gets taken out the first time it is failing when it goes through the second time xmlMetadata = xmlMetadata.replace("{relatedIdentifier}", dataFile.getIdentifier()); xmlMetadata = xmlMetadata.substring(0, x) + "${relatedIdentifier}" + template.substring(x, template.length() - 1); From eeea6f8e5e6e23e61d873b6c02e1b5364043c56e Mon Sep 17 00:00:00 2001 From: Benjamin Martinez Date: Thu, 26 Jul 2018 11:58:17 -0400 Subject: [PATCH 7/8] Some minor formatting and refactoring changes based on the comments left by @matthew-a-dunlap #4782 --- .../dataverse/DOIDataCiteRegisterService.java | 125 +++++++----------- .../edu/harvard/iq/dataverse/DataFile.java | 8 -- .../edu/harvard/iq/dataverse/DatasetPage.java | 4 +- 3 files changed, 51 insertions(+), 86 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java index c2bd85eaba9..e9a9027bc71 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java @@ -37,21 +37,21 @@ public class DOIDataCiteRegisterService { @PersistenceContext(unitName = "VDCNet-ejbPU") private EntityManager em; - + @EJB DataverseServiceBean dataverseService; private DataCiteRESTfullClient openClient() throws IOException { return new DataCiteRESTfullClient(System.getProperty("doi.baseurlstring"), System.getProperty("doi.username"), System.getProperty("doi.password")); } - + public String createIdentifierLocal(String identifier, Map metadata, DvObject dvObject) { - + String xmlMetadata = getMetadataFromDvObject(identifier, metadata, dvObject); String status = metadata.get("_status").trim(); String target = metadata.get("_target"); String retString = ""; - DOIDataCiteRegisterCache rc = findByDOI(identifier); + DOIDataCiteRegisterCache rc = findByDOI(identifier); if (rc == null) { rc = new DOIDataCiteRegisterCache(); rc.setDoi(identifier); @@ -66,11 +66,10 @@ public String createIdentifierLocal(String identifier, Map metad rc.setUrl(target); } retString = "success to reserved " + identifier; - - + return retString; } - + public String registerIdentifier(String identifier, Map metadata, DvObject dvObject) throws IOException { String retString = ""; String xmlMetadata = getMetadataFromDvObject(identifier, metadata, dvObject); @@ -91,43 +90,43 @@ public String registerIdentifier(String identifier, Map metadata } catch (UnsupportedEncodingException ex) { Logger.getLogger(DOIDataCiteRegisterService.class.getName()).log(Level.SEVERE, null, ex); } - } else{ + } else { try (DataCiteRESTfullClient client = openClient()) { retString = client.postMetadata(xmlMetadata); client.postUrl(identifier.substring(identifier.indexOf(":") + 1), target); } catch (UnsupportedEncodingException ex) { Logger.getLogger(DOIDataCiteRegisterService.class.getName()).log(Level.SEVERE, null, ex); - } + } } return retString; } - - public String deactivateIdentifier (String identifier, HashMap metadata, DvObject dvObject){ - String retString = ""; - DOIDataCiteRegisterCache rc = findByDOI(identifier); - try (DataCiteRESTfullClient client = openClient()) { - if (rc != null) { - rc.setStatus("unavailable"); - retString = client.inactiveDataset(identifier.substring(identifier.indexOf(":") + 1)); - } - } catch (IOException io) { + public String deactivateIdentifier(String identifier, HashMap metadata, DvObject dvObject) { + String retString = ""; + DOIDataCiteRegisterCache rc = findByDOI(identifier); + try (DataCiteRESTfullClient client = openClient()) { + if (rc != null) { + rc.setStatus("unavailable"); + retString = client.inactiveDataset(identifier.substring(identifier.indexOf(":") + 1)); } - return retString; + } catch (IOException io) { + + } + return retString; } - - private String getMetadataFromDvObject(String identifier, Map metadata,DvObject dvObject) { - + + private String getMetadataFromDvObject(String identifier, Map metadata, DvObject dvObject) { + Dataset dataset = null; - - if (dvObject instanceof Dataset){ + + if (dvObject instanceof Dataset) { dataset = (Dataset) dvObject; } else { dataset = (Dataset) dvObject.getOwner(); - } - + } + DataCiteMetadataTemplate metadataTemplate = new DataCiteMetadataTemplate(); - metadataTemplate.setIdentifier(identifier.substring(identifier.indexOf(':') + 1)); + metadataTemplate.setIdentifier(identifier.substring(identifier.indexOf(':') + 1)); metadataTemplate.setCreators(Util.getListFromStr(metadata.get("datacite.creator"))); metadataTemplate.setAuthors(dataset.getLatestVersion().getDatasetAuthors()); if (dvObject.isInstanceofDataset()) { @@ -135,28 +134,25 @@ private String getMetadataFromDvObject(String identifier, Map me } if (dvObject.isInstanceofDataFile()) { DataFile df = (DataFile) dvObject; - String fileDescription =df.getDescription(); - metadataTemplate.setDescription(fileDescription == null ? "" :fileDescription ); + String fileDescription = df.getDescription(); + metadataTemplate.setDescription(fileDescription == null ? "" : fileDescription); + String datasetPid = df.getOwner().getGlobalId().asString(); + metadataTemplate.setDatasetIdentifier(datasetPid); + } else { + metadataTemplate.setDatasetIdentifier(""); } + metadataTemplate.setContacts(dataset.getLatestVersion().getDatasetContacts()); metadataTemplate.setProducers(dataset.getLatestVersion().getDatasetProducers()); metadataTemplate.setTitle(dvObject.getDisplayName()); - String producerString = dataverseService.findRootDataverse().getName(); + String producerString = dataverseService.findRootDataverse().getName(); if (producerString.isEmpty()) { producerString = ":unav"; } metadataTemplate.setPublisher(producerString); metadataTemplate.setPublisherYear(metadata.get("datacite.publicationyear")); - if (dvObject.isInstanceofDataFile()) { - DataFile df = (DataFile) dvObject; - String datasetPid = df.getOwner().getGlobalId().asString(); - metadataTemplate.setDatasetIdentifier(datasetPid); - } else { - metadataTemplate.setDatasetIdentifier(""); - } - - - String xmlMetadata = metadataTemplate.generateXML(dvObject); + + String xmlMetadata = metadataTemplate.generateXML(dvObject); logger.log(Level.INFO, "XML to send to DataCite: {0}", xmlMetadata); return xmlMetadata; } @@ -200,14 +196,14 @@ public String modifyIdentifier(String identifier, HashMap metada try (DataCiteRESTfullClient client = openClient()) { retString = client.postMetadata(xmlMetadata); client.postUrl(identifier.substring(identifier.indexOf(":") + 1), target); - + } catch (UnsupportedEncodingException ex) { logger.log(Level.SEVERE, null, ex); - - } catch ( RuntimeException rte ) { + + } catch (RuntimeException rte) { logger.log(Level.SEVERE, "Error creating DOI at DataCite: {0}", rte.getMessage()); logger.log(Level.SEVERE, "Exception", rte); - + } } } else if (status.equals("unavailable")) { @@ -223,26 +219,6 @@ public String modifyIdentifier(String identifier, HashMap metada } return retString; } - - public String setUpFileIdentifiers(DvObject dvObject) - { - StringBuilder sb = new StringBuilder(); - String fileIdentifiers; - - if(dvObject.isInstanceofDataset()){ - Dataset ds = (Dataset) dvObject; - - for(int i = 0; i < ds.getFiles().size(); i++) - sb.append(ds.getFiles().get(i).getIdentifier() + "|:|"); - - fileIdentifiers = sb.toString(); - } - else - fileIdentifiers = ""; - - return fileIdentifiers; - } - public boolean testDOIExists(String identifier) { boolean doiExists; @@ -324,7 +300,6 @@ class DataCiteMetadataTemplate { private List contacts; private List producers; - public List getProducers() { return producers; } @@ -359,8 +334,7 @@ public void setAuthors(List authors) { public DataCiteMetadataTemplate() { } - - + public List getDatafileIdentifiers() { return datafileIdentifiers; } @@ -432,7 +406,7 @@ public String generateXML(DvObject dvObject) { creatorsElement.append(""); } xmlMetadata = xmlMetadata.replace("${creators}", creatorsElement.toString()); - + StringBuilder contributorsElement = new StringBuilder(); for (String[] contact : this.getContacts()) { if (!contact[0].isEmpty()) { @@ -450,9 +424,9 @@ public String generateXML(DvObject dvObject) { } contributorsElement.append(""); } - - String relIdentifiers = generateRelatedIdentifiers (dvObject); - + + String relIdentifiers = generateRelatedIdentifiers(dvObject); + xmlMetadata = xmlMetadata.replace("${relatedIdentifiers}", relIdentifiers); xmlMetadata = xmlMetadata.replace("{$contributors}", contributorsElement.toString()); @@ -484,16 +458,16 @@ private String generateRelatedIdentifiers(DvObject dvObject) { sb.append(""); } } - } else if (dvObject.isInstanceofDataFile()){ + } else if (dvObject.isInstanceofDataFile()) { DataFile df = (DataFile) dvObject; sb.append(""); sb.append("" + df.getOwner().getGlobalId() + ""); + + ">" + df.getOwner().getGlobalId() + ""); sb.append(""); } return sb.toString(); } - + public void generateFileIdentifiers(DvObject dvObject) { if (dvObject.isInstanceofDataset()) { @@ -516,7 +490,6 @@ public void generateFileIdentifiers(DvObject dvObject) { } } } - public static String getTemplate() { return template; diff --git a/src/main/java/edu/harvard/iq/dataverse/DataFile.java b/src/main/java/edu/harvard/iq/dataverse/DataFile.java index f65a1bd224c..a6395c94f84 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataFile.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataFile.java @@ -401,14 +401,6 @@ public void setOwner(Dataset dataset) { super.setOwner(dataset); } -// public String getStorageIdentifier() { -// return this.fileSystemName; -// } -// -// public void setStorageIdentifier(String storageifier) { -// this.fileSystemName = storageIdentifier; -// } - public String getDescription() { FileMetadata fmd = getLatestFileMetadata(); diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index 04fcf9d79d6..33b971c39ae 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -1378,7 +1378,7 @@ private String init(boolean initFull) { // Set Working Version and Dataset by PersistentID dataset = datasetService.findByGlobalId(persistentId); if (dataset == null) { - logger.warning("++++No such dataset: "+persistentId); + logger.warning("No such dataset: "+persistentId); return permissionsWrapper.notFound(); } logger.fine("retrieved dataset, id="+dataset.getId()); @@ -1392,7 +1392,7 @@ private String init(boolean initFull) { // Set Working Version and Dataset by Datasaet Id and Version dataset = datasetService.find(dataset.getId()); if (dataset == null) { - logger.warning("????No such dataset: "+dataset); + logger.warning("No such dataset: "+dataset); return permissionsWrapper.notFound(); } //retrieveDatasetVersionResponse = datasetVersionService.retrieveDatasetVersionById(dataset.getId(), version); From 995902bf0459081b997a07321bc8ae9c4c57181d Mon Sep 17 00:00:00 2001 From: Benjamin Martinez Date: Thu, 26 Jul 2018 15:33:16 -0400 Subject: [PATCH 8/8] Changed a logger message from INFO to FINE and then refactored the generateRelatedIdentifiers method so it used only a StringBuilder instead of strings and StringBuilder --- .../harvard/iq/dataverse/DOIDataCiteRegisterService.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java index e9a9027bc71..5df20b28241 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java +++ b/src/main/java/edu/harvard/iq/dataverse/DOIDataCiteRegisterService.java @@ -153,7 +153,7 @@ private String getMetadataFromDvObject(String identifier, Map me metadataTemplate.setPublisherYear(metadata.get("datacite.publicationyear")); String xmlMetadata = metadataTemplate.generateXML(dvObject); - logger.log(Level.INFO, "XML to send to DataCite: {0}", xmlMetadata); + logger.log(Level.FINE, "XML to send to DataCite: {0}", xmlMetadata); return xmlMetadata; } @@ -442,15 +442,11 @@ private String generateRelatedIdentifiers(DvObject dvObject) { datafileIdentifiers = new ArrayList<>(); for (DataFile dataFile : dataset.getFiles()) { - String add = ""; - sb.append(""); if (!dataFile.getGlobalId().asString().isEmpty()) { - add = "" + dataFile.getGlobalId() + ""; if (sb.toString().isEmpty()) { sb.append(""); } - sb.append(add); + sb.append("" + dataFile.getGlobalId() + ""); } }