From 39840743b1fb90fe290e62682d749f0bf002b386 Mon Sep 17 00:00:00 2001 From: Philipp Conzett Date: Wed, 4 Jan 2023 16:50:37 +0100 Subject: [PATCH 1/9] Make Series multiple #9255 --- scripts/api/data/metadatablocks/citation.tsv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/api/data/metadatablocks/citation.tsv b/scripts/api/data/metadatablocks/citation.tsv index 1b1ff0ae819..5bfde83cbc3 100644 --- a/scripts/api/data/metadatablocks/citation.tsv +++ b/scripts/api/data/metadatablocks/citation.tsv @@ -66,7 +66,7 @@ dateOfCollectionStart Start Date The date when the data collection started YYYY-MM-DD date 62 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE dateOfCollection citation dateOfCollectionEnd End Date The date when the data collection ended YYYY-MM-DD date 63 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE dateOfCollection citation kindOfData Data Type The type of data included in the files (e.g. survey data, clinical data, or machine-readable text) text 64 TRUE FALSE TRUE TRUE FALSE FALSE citation http://rdf-vocabulary.ddialliance.org/discovery#kindOfData - series Series Information about the dataset series to which the Dataset belong none 65 : FALSE FALSE FALSE FALSE FALSE FALSE citation + series Series Information about the dataset series to which the Dataset belong none 65 : FALSE FALSE TRUE FALSE FALSE FALSE citation seriesName Name The name of the dataset series text 66 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE series citation seriesInformation Information Can include 1) a history of the series and 2) a summary of features that apply to the series textbox 67 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE series citation software Software Information about the software used to generate the Dataset none 68 , FALSE FALSE TRUE FALSE FALSE FALSE citation https://www.w3.org/TR/prov-o/#wasGeneratedBy From 0bfde5fcf182455631a901559d8b09c2872c8b24 Mon Sep 17 00:00:00 2001 From: Philipp Conzett Date: Thu, 5 Jan 2023 06:40:43 +0100 Subject: [PATCH 2/9] Added release notes for PR #9256 Please feel free not to use these notes and just list the change under Complete List of Changes. --- doc/release-notes/9256-series.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 doc/release-notes/9256-series.md diff --git a/doc/release-notes/9256-series.md b/doc/release-notes/9256-series.md new file mode 100644 index 00000000000..c4d6465bd71 --- /dev/null +++ b/doc/release-notes/9256-series.md @@ -0,0 +1,5 @@ +## Metadata field Series now repeatable +This enhancement allows depositors to define multiple instances of the metadata field Series in the Citation Metadata block. + +## Major Use Cases and Infrastructure Enhancements +* Data contained in a dataset may belong to multiple series. Making the field Series repeatable will make it possible to reflect this fact in the dataset metadata. (Issue #9255, PR #9256) \ No newline at end of file From 7851dd4829f6051374300a9b7dd16dc4ccb6d903 Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Thu, 23 Mar 2023 16:51:06 -0400 Subject: [PATCH 3/9] #9255 changes for solr, et. --- conf/solr/8.11.1/schema.xml | 6 +-- doc/release-notes/9256-series.md | 37 ++++++++++++++++++- .../source/_static/api/ddi_dataset.xml | 4 +- .../api/imports/ImportDDIServiceBean.java | 13 +++++++ .../dataset-create-new-all-ddi-fields.json | 2 +- 5 files changed, 55 insertions(+), 7 deletions(-) diff --git a/conf/solr/8.11.1/schema.xml b/conf/solr/8.11.1/schema.xml index f11938621fc..c5105466bac 100644 --- a/conf/solr/8.11.1/schema.xml +++ b/conf/solr/8.11.1/schema.xml @@ -364,9 +364,9 @@ - - - + + + diff --git a/doc/release-notes/9256-series.md b/doc/release-notes/9256-series.md index c4d6465bd71..6be44b82da8 100644 --- a/doc/release-notes/9256-series.md +++ b/doc/release-notes/9256-series.md @@ -2,4 +2,39 @@ This enhancement allows depositors to define multiple instances of the metadata field Series in the Citation Metadata block. ## Major Use Cases and Infrastructure Enhancements -* Data contained in a dataset may belong to multiple series. Making the field Series repeatable will make it possible to reflect this fact in the dataset metadata. (Issue #9255, PR #9256) \ No newline at end of file +* Data contained in a dataset may belong to multiple series. Making the field Series repeatable will make it possible to reflect this fact in the dataset metadata. (Issue #9255, PR #9256) + +### Additional Upgrade Steps + +Update the Citation metadata block: + +wget https://github.com/IQSS/dataverse/releases/download/v5.14/citation.tsv +curl http://localhost:8080/api/admin/datasetfield/load -X POST --data-binary @citation.tsv -H "Content-type: text/tab-separated-values" + +## Additional Release Steps + +1. Replace Solr schema.xml to allow multiple series to be used. See specific instructions below for those installations without custom metadata blocks (1a) and those with custom metadata blocks (1b). + +1a. + +For installations without Custom Metadata Blocks: + +-stop solr instance (usually service solr stop, depending on solr installation/OS, see the Installation Guide + +-replace schema.xml + +cp /tmp/dvinstall/schema.xml /usr/local/solr/solr-8.11.1/server/solr/collection1/conf + +-start solr instance (usually service solr start, depending on solr/OS) + +1b. + +For installations with Custom Metadata Blocks: + +-stop solr instance (usually service solr stop, depending on solr installation/OS, see the Installation Guide + +edit the following line to your schema.xml (to indicate that series is now multiValued='true"): + + + +restart solr instance (usually service solr start, depending on solr/OS) \ No newline at end of file diff --git a/doc/sphinx-guides/source/_static/api/ddi_dataset.xml b/doc/sphinx-guides/source/_static/api/ddi_dataset.xml index 679f82a3d8a..d74f9ab7e9a 100644 --- a/doc/sphinx-guides/source/_static/api/ddi_dataset.xml +++ b/doc/sphinx-guides/source/_static/api/ddi_dataset.xml @@ -52,8 +52,8 @@ 1002-01-01 - SeriesName - SeriesInformation + SeriesName One + SeriesName Two diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index d9433832309..e8e99dfcd2d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -1268,7 +1268,20 @@ private void parseVersionNumber(DatasetVersionDTO dvDTO, String versionNumber) { private void processSerStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { FieldDTO seriesName=null; + + FieldDTO seriesInformation=null; + List> series = new ArrayList<>(); + /* + SEK - start here 3/27 update series for multiple values + see ddi_dataset.xml for sample xml + if (xmlr.getLocalName().equals("contact")) { + HashSet set = new HashSet<>(); + addToSet(set, "datasetContactEmail", xmlr.getAttributeValue(null, "email")); + addToSet(set, "datasetContactAffiliation", xmlr.getAttributeValue(null, "affiliation")); + addToSet(set, "datasetContactName", parseText(xmlr)); + datasetContacts.add(set); + */ for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { if (xmlr.getLocalName().equals("serName")) { diff --git a/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json b/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json index 1b327c15496..14e7d71d7e3 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json +++ b/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json @@ -653,7 +653,7 @@ }, { "typeName": "series", - "multiple": false, + "multiple": true, "typeClass": "compound", "value": { "seriesName": { From e6e1091cf44200cc21ace5d34877f457f86802ff Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Fri, 31 Mar 2023 14:01:36 -0400 Subject: [PATCH 4/9] #9255 update ddi import for multiple series --- .../api/imports/ImportDDIServiceBean.java | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index e8e99dfcd2d..6647baf6be9 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -1266,37 +1266,26 @@ private void parseVersionNumber(DatasetVersionDTO dvDTO, String versionNumber) { } - private void processSerStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { - FieldDTO seriesName=null; - - - FieldDTO seriesInformation=null; - List> series = new ArrayList<>(); - /* - SEK - start here 3/27 update series for multiple values - see ddi_dataset.xml for sample xml - if (xmlr.getLocalName().equals("contact")) { - HashSet set = new HashSet<>(); - addToSet(set, "datasetContactEmail", xmlr.getAttributeValue(null, "email")); - addToSet(set, "datasetContactAffiliation", xmlr.getAttributeValue(null, "affiliation")); - addToSet(set, "datasetContactName", parseText(xmlr)); - datasetContacts.add(set); - */ - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + private void processSerStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { + + List> series = new ArrayList<>(); + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { - if (xmlr.getLocalName().equals("serName")) { - seriesName = FieldDTO.createPrimitiveFieldDTO("seriesName", parseText(xmlr)); - - } else if (xmlr.getLocalName().equals("serInfo")) { - seriesInformation=FieldDTO.createPrimitiveFieldDTO("seriesInformation", parseText(xmlr) ); + if (xmlr.getLocalName().equals("series")) { + HashSet set = new HashSet<>(); + addToSet(set, "seriesInformation", xmlr.getAttributeValue(null, "information")); + addToSet(set, "seriesName", parseText(xmlr)); + series.add(set); } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("serStmt")) { - citation.getFields().add(FieldDTO.createCompoundFieldDTO("series",seriesName,seriesInformation )); + if (!series.isEmpty()) { + citation.addField(FieldDTO.createMultipleCompoundFieldDTO("series", series)); + } return; } } - } + } } private void processDistStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { From 593d55d9d5e368aaadaa25c0c5b4f2280452e6ae Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Mon, 3 Apr 2023 14:03:52 -0400 Subject: [PATCH 5/9] #9255 mutlple series names for citation --- .../harvard/iq/dataverse/DataCitation.java | 28 +++++++++++++------ .../harvard/iq/dataverse/DatasetVersion.java | 9 ++---- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DataCitation.java b/src/main/java/edu/harvard/iq/dataverse/DataCitation.java index e84d7fc487c..30e03046822 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataCitation.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataCitation.java @@ -57,7 +57,7 @@ public class DataCitation { private String publisher; private boolean direct; private List funders; - private String seriesTitle; + private List seriesTitles; private String description; private List datesOfCollection; private List keywords; @@ -135,7 +135,7 @@ private void getCommonValuesFrom(DatasetVersion dsv) { datesOfCollection = dsv.getDatesOfCollection(); title = dsv.getTitle(); - seriesTitle = dsv.getSeriesTitle(); + seriesTitles = dsv.getSeriesTitles(); keywords = dsv.getKeywords(); languages = dsv.getLanguages(); spatialCoverages = dsv.getSpatialCoverages(); @@ -330,8 +330,10 @@ public void writeAsRISCitation(OutputStream os) throws IOException { out.write("TY - DATA" + "\r\n"); out.write("T1 - " + getTitle() + "\r\n"); } - if (seriesTitle != null) { - out.write("T3 - " + seriesTitle + "\r\n"); + if (seriesTitles != null) { + for (String seriesTitle : seriesTitles) { + out.write("T3 - " + seriesTitle + "\r\n"); + } } /* Removing abstract/description per Request from G. King in #3759 if(description!=null) { @@ -505,12 +507,22 @@ private void createEndNoteXML(XMLStreamWriter xmlw) throws XMLStreamException { xmlw.writeCharacters(title); xmlw.writeEndElement(); // title } - - if (seriesTitle != null) { - xmlw.writeStartElement("tertiary-title"); - xmlw.writeCharacters(seriesTitle); + + /* + If I say just !"isEmpty" for series titles I get a failure + on testToEndNoteString_withoutTitleAndAuthor + with a null pointer on build -SEK 3/31/23 + */ + if (seriesTitles != null && !seriesTitles.isEmpty() ) { + xmlw.writeStartElement("tertiary-titles"); + for (String seriesTitle : seriesTitles){ + xmlw.writeStartElement("tertiary-title"); + xmlw.writeCharacters(seriesTitle); + xmlw.writeEndElement(); // tertiary-title + } xmlw.writeEndElement(); // tertiary-title } + xmlw.writeEndElement(); // titles xmlw.writeStartElement("section"); diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java index a043d110473..b4d9ff6e014 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java @@ -1366,17 +1366,14 @@ public List getUniqueGrantAgencyValues() { } /** - * @return String containing the version's series title + * @return List of Strings containing the version's series title(s) */ - public String getSeriesTitle() { + public List getSeriesTitles() { List seriesNames = getCompoundChildFieldValues(DatasetFieldConstant.series, DatasetFieldConstant.seriesName); - if (seriesNames.size() > 1) { - logger.warning("More than one series title found for datasetVersion: " + this.id); - } if (!seriesNames.isEmpty()) { - return seriesNames.get(0); + return seriesNames; } else { return null; } From 0316dc5cde346c136db5e315ec2367086860de97 Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Wed, 5 Apr 2023 12:25:37 -0400 Subject: [PATCH 6/9] #9255 fix exporters test data --- .../dataverse/export/ddi/DdiExportUtil.java | 25 ++++++++-------- .../export/openaire/OpenAireExportUtil.java | 29 +++++++------------ .../dataverse/export/dataset-all-defaults.txt | 6 ++-- .../dataset-create-new-all-ddi-fields.json | 4 ++- 4 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java b/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java index c78bb02d5c5..d62b7d0e594 100644 --- a/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/export/ddi/DdiExportUtil.java @@ -1173,33 +1173,34 @@ private static void writeSeriesElement(XMLStreamWriter xmlw, DatasetVersionDTO d for (Map.Entry entry : datasetVersionDTO.getMetadataBlocks().entrySet()) { String key = entry.getKey(); MetadataBlockDTO value = entry.getValue(); - if ("citation".equals(key)) { + if ("citation".equals(key)) { for (FieldDTO fieldDTO : value.getFields()) { if (DatasetFieldConstant.series.equals(fieldDTO.getTypeName())) { - xmlw.writeStartElement("serStmt"); String seriesName = ""; String seriesInformation = ""; - Set foo = fieldDTO.getSingleCompound(); + for (HashSet foo : fieldDTO.getMultipleCompound()) { + xmlw.writeStartElement("serStmt"); for (Iterator iterator = foo.iterator(); iterator.hasNext();) { FieldDTO next = iterator.next(); if (DatasetFieldConstant.seriesName.equals(next.getTypeName())) { - seriesName = next.getSinglePrimitive(); + seriesName = next.getSinglePrimitive(); } if (DatasetFieldConstant.seriesInformation.equals(next.getTypeName())) { - seriesInformation = next.getSinglePrimitive(); + seriesInformation = next.getSinglePrimitive(); } } - if (!seriesName.isEmpty()){ - xmlw.writeStartElement("serName"); + if (!seriesName.isEmpty()) { + xmlw.writeStartElement("serName"); xmlw.writeCharacters(seriesName); - xmlw.writeEndElement(); //grantno + xmlw.writeEndElement(); //serName } - if (!seriesInformation.isEmpty()){ - xmlw.writeStartElement("serInfo"); + if (!seriesInformation.isEmpty()) { + xmlw.writeStartElement("serInfo"); xmlw.writeCharacters(seriesInformation); - xmlw.writeEndElement(); //grantno + xmlw.writeEndElement(); //serInfo } - xmlw.writeEndElement(); //serStmt + xmlw.writeEndElement(); //serStmt + } } } } diff --git a/src/main/java/edu/harvard/iq/dataverse/export/openaire/OpenAireExportUtil.java b/src/main/java/edu/harvard/iq/dataverse/export/openaire/OpenAireExportUtil.java index e8dfed96281..25b4ffed3d1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/export/openaire/OpenAireExportUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/export/openaire/OpenAireExportUtil.java @@ -1266,26 +1266,17 @@ public static void writeDescriptionsElement(XMLStreamWriter xmlw, DatasetVersion if (DatasetFieldConstant.series.equals(fieldDTO.getTypeName())) { // String seriesName = null; String seriesInformation = null; - - Set fieldDTOs = fieldDTO.getSingleCompound(); - for (Iterator iterator = fieldDTOs.iterator(); iterator.hasNext();) { - FieldDTO next = iterator.next(); - /*if (DatasetFieldConstant.seriesName.equals(next.getTypeName())) { - seriesName = next.getSinglePrimitive(); - }*/ - if (DatasetFieldConstant.seriesInformation.equals(next.getTypeName())) { - seriesInformation = next.getSinglePrimitive(); + for (HashSet fieldDTOs : fieldDTO.getMultipleCompound()) { + for (Iterator iterator = fieldDTOs.iterator(); iterator.hasNext();) { + FieldDTO next = iterator.next(); + if (DatasetFieldConstant.seriesInformation.equals(next.getTypeName())) { + seriesInformation = next.getSinglePrimitive(); + } + } + if (StringUtils.isNotBlank(seriesInformation)) { + description_check = writeOpenTag(xmlw, "descriptions", description_check); + writeDescriptionElement(xmlw, "SeriesInformation", seriesInformation, language); } - } - - /*if (StringUtils.isNotBlank(seriesName)){ - contributor_check = writeOpenTag(xmlw, "descriptions", description_check); - - writeDescriptionElement(xmlw, "SeriesInformation", seriesName); - }*/ - if (StringUtils.isNotBlank(seriesInformation)) { - description_check = writeOpenTag(xmlw, "descriptions", description_check); - writeDescriptionElement(xmlw, "SeriesInformation", seriesInformation, language); } } } diff --git a/src/test/java/edu/harvard/iq/dataverse/export/dataset-all-defaults.txt b/src/test/java/edu/harvard/iq/dataverse/export/dataset-all-defaults.txt index a3f0dffc767..f5aaefad64f 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/dataset-all-defaults.txt +++ b/src/test/java/edu/harvard/iq/dataverse/export/dataset-all-defaults.txt @@ -694,9 +694,10 @@ }, { "typeName": "series", - "multiple": false, + "multiple": true, "typeClass": "compound", - "value": { + "value": [ + { "seriesName": { "typeName": "seriesName", "multiple": false, @@ -710,6 +711,7 @@ "value": "SeriesInformation" } } + ] }, { "typeName": "software", diff --git a/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json b/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json index 14e7d71d7e3..b59034edab8 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json +++ b/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json @@ -655,7 +655,8 @@ "typeName": "series", "multiple": true, "typeClass": "compound", - "value": { + "value": [ + { "seriesName": { "typeName": "seriesName", "multiple": false, @@ -669,6 +670,7 @@ "value": "SeriesInformation" } } + ] }, { "typeName": "software", From 0d1403c1fcafbfb469b8515a22494a51924163dd Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Thu, 6 Apr 2023 10:41:02 -0400 Subject: [PATCH 7/9] #9255 fix import dto --- .../source/_static/api/ddi_dataset.xml | 8 ++++++-- .../api/imports/ImportDDIServiceBean.java | 20 +++++++++---------- .../iq/dataverse/api/DataversesIT.java | 2 +- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/doc/sphinx-guides/source/_static/api/ddi_dataset.xml b/doc/sphinx-guides/source/_static/api/ddi_dataset.xml index d74f9ab7e9a..3b155fc7e55 100644 --- a/doc/sphinx-guides/source/_static/api/ddi_dataset.xml +++ b/doc/sphinx-guides/source/_static/api/ddi_dataset.xml @@ -52,8 +52,12 @@ 1002-01-01 - SeriesName One - SeriesName Two + SeriesName One + SeriesInformation One + + + SeriesName Two + SeriesInformation Two diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index 6647baf6be9..39b9ddbcf5f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -1267,20 +1267,20 @@ private void parseVersionNumber(DatasetVersionDTO dvDTO, String versionNumber) { } private void processSerStmt(XMLStreamReader xmlr, MetadataBlockDTO citation) throws XMLStreamException { - - List> series = new ArrayList<>(); - for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { + FieldDTO seriesInformation = null; + FieldDTO seriesName = null; + for (int event = xmlr.next(); event != XMLStreamConstants.END_DOCUMENT; event = xmlr.next()) { if (event == XMLStreamConstants.START_ELEMENT) { - if (xmlr.getLocalName().equals("series")) { - HashSet set = new HashSet<>(); - addToSet(set, "seriesInformation", xmlr.getAttributeValue(null, "information")); - addToSet(set, "seriesName", parseText(xmlr)); - series.add(set); + if (xmlr.getLocalName().equals("serInfo")) { + seriesInformation = FieldDTO.createPrimitiveFieldDTO("seriesInformation", parseText(xmlr)); + } + if (xmlr.getLocalName().equals("serName")) { + seriesName = FieldDTO.createPrimitiveFieldDTO("seriesName", parseText(xmlr)); } } else if (event == XMLStreamConstants.END_ELEMENT) { if (xmlr.getLocalName().equals("serStmt")) { - if (!series.isEmpty()) { - citation.addField(FieldDTO.createMultipleCompoundFieldDTO("series", series)); + if (seriesInformation != null || seriesName != null) { + citation.addField(FieldDTO.createMultipleCompoundFieldDTO("series", seriesName, seriesInformation )); } return; } diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java index 75215bb700e..819a182872a 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java @@ -567,7 +567,7 @@ public void testImportDDI() throws IOException, InterruptedException { // destroyDataset() line lately) Thread.sleep(1000L); - + Integer datasetIdIntRelease = JsonPath.from(importDDIRelease.body().asString()).getInt("data.id"); Response destroyDatasetResponseRelease = UtilIT.destroyDataset(datasetIdIntRelease, apiToken); assertEquals(200, destroyDatasetResponseRelease.getStatusCode()); From 8747cb47bb90a96bf12f7cb0596442f0d9e6d4e2 Mon Sep 17 00:00:00 2001 From: Leonid Andreev Date: Wed, 26 Apr 2023 15:06:48 -0400 Subject: [PATCH 8/9] trying to check in the updated copies of the control json and ddi "all fields" files, with the series made multiple. #9255 --- .../dataset-create-new-all-ddi-fields.json | 38 +++++++++++++------ .../iq/dataverse/export/ddi/exportfull.xml | 8 +++- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json b/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json index 4eff889a8e8..cf8fea222c9 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json +++ b/src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-create-new-all-ddi-fields.json @@ -657,19 +657,33 @@ "typeClass": "compound", "value": [ { - "seriesName": { - "typeName": "seriesName", - "multiple": false, - "typeClass": "primitive", - "value": "SeriesName" + "seriesName": { + "typeName": "seriesName", + "multiple": false, + "typeClass": "primitive", + "value": "SeriesName1" + }, + "seriesInformation": { + "typeName": "seriesInformation", + "multiple": false, + "typeClass": "primitive", + "value": "SeriesInformation1" + } }, - "seriesInformation": { - "typeName": "seriesInformation", - "multiple": false, - "typeClass": "primitive", - "value": "SeriesInformation" - } - } + { + "seriesName": { + "typeName": "seriesName", + "multiple": false, + "typeClass": "primitive", + "value": "SeriesName2" + }, + "seriesInformation": { + "typeName": "seriesInformation", + "multiple": false, + "typeClass": "primitive", + "value": "SeriesInformation2" + } + } ] }, { diff --git a/src/test/java/edu/harvard/iq/dataverse/export/ddi/exportfull.xml b/src/test/java/edu/harvard/iq/dataverse/export/ddi/exportfull.xml index 3d6bed32eb8..6e2ccfd5545 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/ddi/exportfull.xml +++ b/src/test/java/edu/harvard/iq/dataverse/export/ddi/exportfull.xml @@ -53,8 +53,12 @@ 1004-01-01 - SeriesName - SeriesInformation + SeriesName1 + SeriesInformation1 + + + SeriesName2 + SeriesInformation2 From ec695080d77dff497445f2b159afa57103892673 Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Tue, 2 May 2023 12:16:18 -0400 Subject: [PATCH 9/9] #9255 fix custom update to schema.xml release note --- doc/release-notes/9256-series.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/release-notes/9256-series.md b/doc/release-notes/9256-series.md index 6be44b82da8..97419af4616 100644 --- a/doc/release-notes/9256-series.md +++ b/doc/release-notes/9256-series.md @@ -33,8 +33,10 @@ For installations with Custom Metadata Blocks: -stop solr instance (usually service solr stop, depending on solr installation/OS, see the Installation Guide -edit the following line to your schema.xml (to indicate that series is now multiValued='true"): +edit the following lines to your schema.xml (to indicate that series and its components are now multiValued='true"): + + -restart solr instance (usually service solr start, depending on solr/OS) \ No newline at end of file +-restart solr instance (usually service solr start, depending on solr/OS) \ No newline at end of file