From 207fd1e1aa79354706b3499ee74524ae4b50b104 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 15 Feb 2022 13:38:22 -0500 Subject: [PATCH 01/46] add i18n indexing of CVV Conflicts: src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java --- .../harvard/iq/dataverse/SettingsWrapper.java | 53 +++---------------- .../iq/dataverse/search/IndexServiceBean.java | 12 ++++- .../settings/SettingsServiceBean.java | 48 +++++++++++++++++ 3 files changed, 65 insertions(+), 48 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java b/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java index ec06e6bb91a..d7bf37dcefb 100644 --- a/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java +++ b/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java @@ -331,37 +331,20 @@ public Boolean isHasDropBoxKey() { public boolean isLocalesConfigured() { if (configuredLocales == null) { - initLocaleSettings(); + configuredLocales = new LinkedHashMap<>(); + settingsService.initLocaleSettings(configuredLocales); } return configuredLocales.size() > 1; } public Map getConfiguredLocales() { if (configuredLocales == null) { - initLocaleSettings(); + configuredLocales = new LinkedHashMap<>(); + settingsService.initLocaleSettings(configuredLocales); } return configuredLocales; } - private void initLocaleSettings() { - - configuredLocales = new LinkedHashMap<>(); - - try { - JSONArray entries = new JSONArray(getValueForKey(SettingsServiceBean.Key.Languages, "[]")); - for (Object obj : entries) { - JSONObject entry = (JSONObject) obj; - String locale = entry.getString("locale"); - String title = entry.getString("title"); - - configuredLocales.put(locale, title); - } - } catch (JSONException e) { - //e.printStackTrace(); - // do we want to know? - probably not - } - } - public boolean isDoiInstallation() { String protocol = getValueForKey(SettingsServiceBean.Key.Protocol); if ("doi".equals(protocol)) { @@ -488,31 +471,9 @@ public void validateEmbargoDate(FacesContext context, UIComponent component, Obj Map languageMap = null; - Map getBaseMetadataLanguageMap(boolean refresh) { - if (languageMap == null || refresh) { - languageMap = new HashMap(); - - /* If MetadataLanaguages is set, use it. - * If not, we can't assume anything and should avoid assuming a metadata language - */ - String mlString = getValueForKey(SettingsServiceBean.Key.MetadataLanguages,""); - - if(mlString.isEmpty()) { - mlString="[]"; - } - JsonReader jsonReader = Json.createReader(new StringReader(mlString)); - JsonArray languages = jsonReader.readArray(); - for(JsonValue jv: languages) { - JsonObject lang = (JsonObject) jv; - languageMap.put(lang.getString("locale"), lang.getString("title")); - } - } - return languageMap; - } - public Map getMetadataLanguages(DvObjectContainer target) { Map currentMap = new HashMap(); - currentMap.putAll(getBaseMetadataLanguageMap(true)); + currentMap.putAll(settingsService.getBaseMetadataLanguageMap(languageMap, true)); languageMap.put(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE, getDefaultMetadataLanguageLabel(target)); return languageMap; } @@ -532,7 +493,7 @@ private String getDefaultMetadataLanguageLabel(DvObjectContainer target) { mlCode = getDefaultMetadataLanguage(); } // Get the label for the language code found - mlLabel = getBaseMetadataLanguageMap(false).get(mlCode); + mlLabel = settingsService.getBaseMetadataLanguageMap(languageMap, false).get(mlCode); } if(fromAncestor) { mlLabel = mlLabel + " " + BundleUtil.getStringFromBundle("dataverse.inherited"); @@ -543,7 +504,7 @@ private String getDefaultMetadataLanguageLabel(DvObjectContainer target) { } public String getDefaultMetadataLanguage() { - Map mdMap = getBaseMetadataLanguageMap(false); + Map mdMap = settingsService.getBaseMetadataLanguageMap(languageMap, false); if(mdMap.size()>=1) { if(mdMap.size()==1) { //One entry - it's the default diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java index e4844156271..d05e227b9ce 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java @@ -804,7 +804,12 @@ private String addOrUpdateDataset(IndexableDataset indexableDataset, Set d if(datasetVersion.getExternalStatusLabel()!=null) { solrInputDocument.addField(SearchFields.EXTERNAL_STATUS, datasetVersion.getExternalStatusLabel()); } - + Set langs = new HashSet(); + langs.addAll(settingsService.getBaseMetadataLanguageMap(new HashMap(), true).keySet()); + Map configuredLocales = new LinkedHashMap<>(); + settingsService.initLocaleSettings(configuredLocales); + langs.addAll(configuredLocales.keySet()); + Map cvocMap = datasetFieldService.getCVocConf(false); for (DatasetField dsf : datasetVersion.getFlatDatasetFields()) { @@ -892,7 +897,10 @@ private String addOrUpdateDataset(IndexableDataset indexableDataset, Set d if (controlledVocabularyValue.getStrValue().equals(DatasetField.NA_VALUE)) { continue; } - solrInputDocument.addField(solrFieldSearchable, controlledVocabularyValue.getStrValue()); + // Index in all used languages (display and metadata languages + for(String locale: langs) { + solrInputDocument.addField(solrFieldSearchable, controlledVocabularyValue.getLocaleStrValue(locale)); + } if (dsfType.getSolrField().isFacetable()) { solrInputDocument.addField(solrFieldFacetable, controlledVocabularyValue.getStrValue()); } diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java index efa944cf633..6fa0b958c70 100644 --- a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java @@ -9,12 +9,22 @@ import javax.ejb.Stateless; import javax.inject.Named; import javax.json.Json; +import javax.json.JsonArray; import javax.json.JsonObject; +import javax.json.JsonReader; +import javax.json.JsonValue; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + import java.io.StringReader; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -730,5 +740,43 @@ public Set listAll() { return new HashSet<>(em.createNamedQuery("Setting.findAll", Setting.class).getResultList()); } + public Map getBaseMetadataLanguageMap(Map languageMap, boolean refresh) { + if (languageMap == null || refresh) { + languageMap = new HashMap(); + + /* If MetadataLanaguages is set, use it. + * If not, we can't assume anything and should avoid assuming a metadata language + */ + String mlString = getValueForKey(SettingsServiceBean.Key.MetadataLanguages,""); + + if(mlString.isEmpty()) { + mlString="[]"; + } + JsonReader jsonReader = Json.createReader(new StringReader(mlString)); + JsonArray languages = jsonReader.readArray(); + for(JsonValue jv: languages) { + JsonObject lang = (JsonObject) jv; + languageMap.put(lang.getString("locale"), lang.getString("title")); + } + } + return languageMap; + } + public void initLocaleSettings(Map configuredLocales) { + + try { + JSONArray entries = new JSONArray(getValueForKey(SettingsServiceBean.Key.Languages, "[]")); + for (Object obj : entries) { + JSONObject entry = (JSONObject) obj; + String locale = entry.getString("locale"); + String title = entry.getString("title"); + + configuredLocales.put(locale, title); + } + } catch (JSONException e) { + //e.printStackTrace(); + // do we want to know? - probably not + } + } + } From b93913b3c6c61c67b3b5f3359c05b6b32c592563 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 17 Feb 2022 14:34:24 -0500 Subject: [PATCH 02/46] i18n indexing for subject field/dataset cvv --- .../harvard/iq/dataverse/SettingsWrapper.java | 17 ++++++++++++----- .../iq/dataverse/search/IndexServiceBean.java | 14 +++++++------- .../dataverse/settings/SettingsServiceBean.java | 11 +++++++++++ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java b/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java index d7bf37dcefb..dcbec37fd7e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java +++ b/src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java @@ -471,11 +471,18 @@ public void validateEmbargoDate(FacesContext context, UIComponent component, Obj Map languageMap = null; + Map getBaseMetadataLanguageMap(boolean refresh) { + if (languageMap == null || refresh) { + languageMap = settingsService.getBaseMetadataLanguageMap(languageMap, true); + } + return languageMap; + } + public Map getMetadataLanguages(DvObjectContainer target) { Map currentMap = new HashMap(); - currentMap.putAll(settingsService.getBaseMetadataLanguageMap(languageMap, true)); - languageMap.put(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE, getDefaultMetadataLanguageLabel(target)); - return languageMap; + currentMap.putAll(getBaseMetadataLanguageMap(false)); + currentMap.put(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE, getDefaultMetadataLanguageLabel(target)); + return currentMap; } private String getDefaultMetadataLanguageLabel(DvObjectContainer target) { @@ -493,7 +500,7 @@ private String getDefaultMetadataLanguageLabel(DvObjectContainer target) { mlCode = getDefaultMetadataLanguage(); } // Get the label for the language code found - mlLabel = settingsService.getBaseMetadataLanguageMap(languageMap, false).get(mlCode); + mlLabel = getBaseMetadataLanguageMap(false).get(mlCode); } if(fromAncestor) { mlLabel = mlLabel + " " + BundleUtil.getStringFromBundle("dataverse.inherited"); @@ -504,7 +511,7 @@ private String getDefaultMetadataLanguageLabel(DvObjectContainer target) { } public String getDefaultMetadataLanguage() { - Map mdMap = settingsService.getBaseMetadataLanguageMap(languageMap, false); + Map mdMap = getBaseMetadataLanguageMap(false); if(mdMap.size()>=1) { if(mdMap.size()==1) { //One entry - it's the default diff --git a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java index d05e227b9ce..7fbeb3ae0f5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/IndexServiceBean.java @@ -247,10 +247,14 @@ public Future indexDataverse(Dataverse dataverse, boolean processPaths) solrInputDocument.addField(SearchFields.AFFILIATION, dataverse.getAffiliation()); solrInputDocument.addField(SearchFields.DATAVERSE_AFFILIATION, dataverse.getAffiliation()); } + Set langs = settingsService.getConfiguredLanguages(); for (ControlledVocabularyValue dataverseSubject : dataverse.getDataverseSubjects()) { String subject = dataverseSubject.getStrValue(); if (!subject.equals(DatasetField.NA_VALUE)) { - solrInputDocument.addField(SearchFields.DATAVERSE_SUBJECT, subject); + // Index in all used languages (display and metadata languages + for(String locale: langs) { + solrInputDocument.addField(SearchFields.DATAVERSE_SUBJECT, dataverseSubject.getLocaleStrValue(locale)); + } // collapse into shared "subject" field used as a facet solrInputDocument.addField(SearchFields.SUBJECT, subject); } @@ -804,12 +808,8 @@ private String addOrUpdateDataset(IndexableDataset indexableDataset, Set d if(datasetVersion.getExternalStatusLabel()!=null) { solrInputDocument.addField(SearchFields.EXTERNAL_STATUS, datasetVersion.getExternalStatusLabel()); } - Set langs = new HashSet(); - langs.addAll(settingsService.getBaseMetadataLanguageMap(new HashMap(), true).keySet()); - Map configuredLocales = new LinkedHashMap<>(); - settingsService.initLocaleSettings(configuredLocales); - langs.addAll(configuredLocales.keySet()); - + + Set langs = settingsService.getConfiguredLanguages(); Map cvocMap = datasetFieldService.getCVocConf(false); for (DatasetField dsf : datasetVersion.getFlatDatasetFields()) { diff --git a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java index 6fa0b958c70..e13ea806dc7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/settings/SettingsServiceBean.java @@ -23,6 +23,7 @@ import java.io.StringReader; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -778,5 +779,15 @@ public void initLocaleSettings(Map configuredLocales) { // do we want to know? - probably not } } + + + public Set getConfiguredLanguages() { + Set langs = new HashSet(); + langs.addAll(getBaseMetadataLanguageMap(new HashMap(), true).keySet()); + Map configuredLocales = new LinkedHashMap<>(); + initLocaleSettings(configuredLocales); + langs.addAll(configuredLocales.keySet()); + return langs; + } } From c935b82ff3b2575681d076fb62d9fc23ef6704c2 Mon Sep 17 00:00:00 2001 From: ErykKul Date: Thu, 17 Mar 2022 09:32:57 +0100 Subject: [PATCH 03/46] fixed unmarshaling van LocalDateTime error in the DDIExporterTest.java --- .../harvard/iq/dataverse/export/DDIExporterTest.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java index 8ce823eb600..2518e2ca335 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java @@ -1,6 +1,6 @@ package edu.harvard.iq.dataverse.export; -import com.google.gson.Gson; +import com.google.gson.*; import edu.harvard.iq.dataverse.ControlledVocabularyValue; import edu.harvard.iq.dataverse.DatasetFieldType; import edu.harvard.iq.dataverse.DatasetFieldType.FieldType; @@ -17,10 +17,15 @@ import java.io.File; import java.io.IOException; import java.io.StringReader; +import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -42,7 +47,10 @@ public class DDIExporterTest { private static final SettingsServiceBean settingsService = Mockito.mock(SettingsServiceBean.class); private static final LicenseServiceBean licenseService = Mockito.mock(LicenseServiceBean.class); private static final MockDatasetFieldSvc datasetFieldTypeSvc = new MockDatasetFieldSvc(); - private static final Gson gson = new Gson(); + private static final Gson gson = new GsonBuilder().registerTypeAdapter(LocalDate.class, (JsonDeserializer) (JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) -> { + Instant instant = Instant.ofEpochMilli(json.getAsJsonPrimitive().getAsLong()); + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + }).create(); /* * Setup and teardown mocks for BrandingUtil for atomicity. From 7ecfa66147b030e729d7a13ba490aa8205672330 Mon Sep 17 00:00:00 2001 From: ErykKul Date: Mon, 21 Mar 2022 14:51:30 +0100 Subject: [PATCH 04/46] dropdowns with at least 10 items are searchable now with contains matching --- src/main/webapp/metadataFragment.xhtml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/webapp/metadataFragment.xhtml b/src/main/webapp/metadataFragment.xhtml index 88d66148a56..31739c8fb8a 100755 --- a/src/main/webapp/metadataFragment.xhtml +++ b/src/main/webapp/metadataFragment.xhtml @@ -247,7 +247,7 @@
+ id="unique1" required="#{dsf.required and datasetPage}" rendered="#{!dsf.datasetFieldType.allowMultiples}" filter="#{(dsf.datasetFieldType.controlledVocabularyValues.size() lt 10) ? 'false':'true'}" filterMatchMode="contains"> @@ -259,7 +259,7 @@ --> @@ -314,7 +314,7 @@
+ rendered="#{!subdsf.datasetFieldType.allowMultiples}" filter="#{(subdsf.datasetFieldType.controlledVocabularyValues.size() lt 10) ? 'false':'true'}" filterMatchMode="contains" > @@ -332,7 +332,9 @@ --> + rendered="#{subdsf.datasetFieldType.allowMultiples}" label="#{bundle.select}" multiple="true" + filter="#{(subdsf.datasetFieldType.controlledVocabularyValues.size() lt 10) ? 'false':'true'}" filterMatchMode="contains" + showHeader="#{(subdsf.datasetFieldType.controlledVocabularyValues.size() lt 10) ? 'false':'true'}"> From 9eb48b70c39b5ecc144e6f18241a26e44aabee3e Mon Sep 17 00:00:00 2001 From: ErykKul Date: Tue, 22 Mar 2022 11:17:00 +0100 Subject: [PATCH 05/46] Revert "fixed unmarshaling van LocalDateTime error in the DDIExporterTest.java" This reverts commit c935b82ff3b2575681d076fb62d9fc23ef6704c2. --- .../harvard/iq/dataverse/export/DDIExporterTest.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java index 2518e2ca335..8ce823eb600 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java @@ -1,6 +1,6 @@ package edu.harvard.iq.dataverse.export; -import com.google.gson.*; +import com.google.gson.Gson; import edu.harvard.iq.dataverse.ControlledVocabularyValue; import edu.harvard.iq.dataverse.DatasetFieldType; import edu.harvard.iq.dataverse.DatasetFieldType.FieldType; @@ -17,15 +17,10 @@ import java.io.File; import java.io.IOException; import java.io.StringReader; -import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -47,10 +42,7 @@ public class DDIExporterTest { private static final SettingsServiceBean settingsService = Mockito.mock(SettingsServiceBean.class); private static final LicenseServiceBean licenseService = Mockito.mock(LicenseServiceBean.class); private static final MockDatasetFieldSvc datasetFieldTypeSvc = new MockDatasetFieldSvc(); - private static final Gson gson = new GsonBuilder().registerTypeAdapter(LocalDate.class, (JsonDeserializer) (JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) -> { - Instant instant = Instant.ofEpochMilli(json.getAsJsonPrimitive().getAsLong()); - return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); - }).create(); + private static final Gson gson = new Gson(); /* * Setup and teardown mocks for BrandingUtil for atomicity. From 15074157bd625543715100ea23db3adb345fd2b1 Mon Sep 17 00:00:00 2001 From: ErykKul Date: Tue, 22 Mar 2022 11:58:35 +0100 Subject: [PATCH 06/46] Revert "Revert "fixed unmarshaling van LocalDateTime error in the DDIExporterTest.java"" This reverts commit 9eb48b70c39b5ecc144e6f18241a26e44aabee3e. --- .../harvard/iq/dataverse/export/DDIExporterTest.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java index 8ce823eb600..2518e2ca335 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java @@ -1,6 +1,6 @@ package edu.harvard.iq.dataverse.export; -import com.google.gson.Gson; +import com.google.gson.*; import edu.harvard.iq.dataverse.ControlledVocabularyValue; import edu.harvard.iq.dataverse.DatasetFieldType; import edu.harvard.iq.dataverse.DatasetFieldType.FieldType; @@ -17,10 +17,15 @@ import java.io.File; import java.io.IOException; import java.io.StringReader; +import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -42,7 +47,10 @@ public class DDIExporterTest { private static final SettingsServiceBean settingsService = Mockito.mock(SettingsServiceBean.class); private static final LicenseServiceBean licenseService = Mockito.mock(LicenseServiceBean.class); private static final MockDatasetFieldSvc datasetFieldTypeSvc = new MockDatasetFieldSvc(); - private static final Gson gson = new Gson(); + private static final Gson gson = new GsonBuilder().registerTypeAdapter(LocalDate.class, (JsonDeserializer) (JsonElement json, Type type, JsonDeserializationContext jsonDeserializationContext) -> { + Instant instant = Instant.ofEpochMilli(json.getAsJsonPrimitive().getAsLong()); + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + }).create(); /* * Setup and teardown mocks for BrandingUtil for atomicity. From ddae50f916dc550b6dd5488bf609afd5c855035e Mon Sep 17 00:00:00 2001 From: ErykKul Date: Tue, 22 Mar 2022 12:07:07 +0100 Subject: [PATCH 07/46] expanded wildcard in gson imports --- .../edu/harvard/iq/dataverse/export/DDIExporterTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java index 2518e2ca335..c9446d7c414 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java @@ -1,6 +1,10 @@ package edu.harvard.iq.dataverse.export; -import com.google.gson.*; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; import edu.harvard.iq.dataverse.ControlledVocabularyValue; import edu.harvard.iq.dataverse.DatasetFieldType; import edu.harvard.iq.dataverse.DatasetFieldType.FieldType; From aab8a77d669040da74f3e988a158c0006d5d5520 Mon Sep 17 00:00:00 2001 From: Kaitlin Newson Date: Mon, 28 Mar 2022 14:32:13 -0400 Subject: [PATCH 08/46] Add starter content to the excel ingest page, minor formatting on R page --- .../source/user/tabulardataingest/excel.rst | 21 +++++++++++++++++-- .../source/user/tabulardataingest/rdata.rst | 11 +++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/doc/sphinx-guides/source/user/tabulardataingest/excel.rst b/doc/sphinx-guides/source/user/tabulardataingest/excel.rst index b82cc45bfde..585c5b52a6b 100644 --- a/doc/sphinx-guides/source/user/tabulardataingest/excel.rst +++ b/doc/sphinx-guides/source/user/tabulardataingest/excel.rst @@ -1,10 +1,27 @@ Excel +++++++ +Microsoft Excel files (XLSX format). + .. contents:: |toctitle| :local: -Excel files (**New** in Dataverse Software 4.0!) +Supported Formats +------------------ + +Only the newer XLSX Excel files are supported. We are not planning to add support for the old-style, binary XLS files. + +Limitations +----------- + +If an Excel file has multiple sheets, only the first sheet of the file will be ingested. The other sheets will be available when a user downloads the original Excel file. To have all sheets of an Excel file ingested and searchable at the variable level, upload each sheet as an individual file in your dataset. + +Ingest Errors +------------- + +You may encounter ingest errors after uploading an Excel file if the file is formatted in a way that can't be ingested by the Dataverse software. For example, line breaks in a cell, blank cells, single cells that span multiple rows, missing headers, or other kinds of inconsistent formatting can lead to ingest errors. -Note: only the "new", XLSX Excel files are supported. We are not planning to add support for the old-style, binary XLS files. +Example Data +------------ +`An example of an Excel file that successfully ingests `_ can be found in the Dataverse Sample Data GitHub repository . diff --git a/doc/sphinx-guides/source/user/tabulardataingest/rdata.rst b/doc/sphinx-guides/source/user/tabulardataingest/rdata.rst index d8f3b23cf66..91810543803 100644 --- a/doc/sphinx-guides/source/user/tabulardataingest/rdata.rst +++ b/doc/sphinx-guides/source/user/tabulardataingest/rdata.rst @@ -6,20 +6,19 @@ Support for R (.RData) files has been introduced in DVN 3.5. .. contents:: |toctitle| :local: -Overview. +Overview =========== - R has been increasingly popular in the research/academic community, owing to the fact that it is free and open-source (unlike SPSS and STATA). Consequently, there is an increasing amount of data available exclusively in R format. -Data Formatting Requirements. +Data Formatting Requirements ============================== -The data must be formatted as an R dataframe (data.frame()). If an -.RData file contains multiple dataframes, only the 1st one will be +The data must be formatted as an R dataframe (``data.frame()``). If an +.RData file contains multiple dataframes, only the first one will be ingested (this may change in the future). Data Types, compared to other supported formats (Stat, SPSS) @@ -82,7 +81,7 @@ Boolean values R Boolean (logical) values are supported. -Limitations of R, as compared to SPSS and STATA. +Limitations of R, as compared to SPSS and STATA ------------------------------------------------ Most noticeably, R lacks a standard mechanism for defining descriptive From 8dae2b7e1f461d63e61f990c62b1b008cefbe227 Mon Sep 17 00:00:00 2001 From: Kaitlin Newson Date: Mon, 28 Mar 2022 14:42:58 -0400 Subject: [PATCH 09/46] bullet list --- .../source/user/tabulardataingest/excel.rst | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/sphinx-guides/source/user/tabulardataingest/excel.rst b/doc/sphinx-guides/source/user/tabulardataingest/excel.rst index 585c5b52a6b..0013b4eaf88 100644 --- a/doc/sphinx-guides/source/user/tabulardataingest/excel.rst +++ b/doc/sphinx-guides/source/user/tabulardataingest/excel.rst @@ -19,9 +19,14 @@ If an Excel file has multiple sheets, only the first sheet of the file will be i Ingest Errors ------------- -You may encounter ingest errors after uploading an Excel file if the file is formatted in a way that can't be ingested by the Dataverse software. For example, line breaks in a cell, blank cells, single cells that span multiple rows, missing headers, or other kinds of inconsistent formatting can lead to ingest errors. +You may encounter ingest errors after uploading an Excel file if the file is formatted in a way that can't be ingested by the Dataverse software. Ingest errors can be caused by a variety of formatting inconsistencies, including: + +* line breaks in a cell +* blank cells +* single cells that span multiple rows +* missing headers Example Data ------------ -`An example of an Excel file that successfully ingests `_ can be found in the Dataverse Sample Data GitHub repository . +`An example of an Excel file that successfully ingests `_ is available in the Dataverse Sample Data GitHub repository. From 20ea5e8c070d213126da5d7192fdf88cf07796aa Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Tue, 29 Mar 2022 20:31:07 -0400 Subject: [PATCH 10/46] Refactor/fix popup logic --- .../harvard/iq/dataverse/util/FileUtil.java | 76 ++++++++----------- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java index 62d576193f6..6f6fa895d36 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java @@ -1471,73 +1471,61 @@ public static String getCiteDataFileFilename(String fileTitle, FileCitationExten * elaborate on the text "This file cannot be downloaded publicly." */ public static boolean isDownloadPopupRequired(DatasetVersion datasetVersion) { - // Each of these conditions is sufficient reason to have to - // present the user with the popup: - if (datasetVersion == null) { - logger.fine("Download popup required because datasetVersion is null."); - return false; - } - //0. if version is draft then Popup "not required" - if (!datasetVersion.isReleased()) { - logger.fine("Download popup required because datasetVersion has not been released."); - return false; - } - // 1. License and Terms of Use: - if (datasetVersion.getTermsOfUseAndAccess() != null) { - License license = datasetVersion.getTermsOfUseAndAccess().getLicense(); - if ((license == null && StringUtils.isNotBlank(datasetVersion.getTermsOfUseAndAccess().getTermsOfUse())) - || (license != null && !license.isDefault())) { - logger.fine("Download popup required because of license or terms of use."); - return true; - } - - // 2. Terms of Access: - if (!(datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess() == null) && !datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess().equals("")) { - logger.fine("Download popup required because of terms of access."); - return true; - } + logger.fine("Checking if download popup is required."); + Boolean answer = popupDueToStateOrTerms(datasetVersion); + if (answer != null) { + return answer; } - // 3. Guest Book: if (datasetVersion.getDataset() != null && datasetVersion.getDataset().getGuestbook() != null && datasetVersion.getDataset().getGuestbook().isEnabled() && datasetVersion.getDataset().getGuestbook().getDataverse() != null) { logger.fine("Download popup required because of guestbook."); return true; } - logger.fine("Download popup is not required."); return false; } - public static boolean isRequestAccessPopupRequired(DatasetVersion datasetVersion){ - // Each of these conditions is sufficient reason to have to - // present the user with the popup: + public static boolean isRequestAccessPopupRequired(DatasetVersion datasetVersion) { + + Boolean answer = popupDueToStateOrTerms(datasetVersion); + if (answer != null) { + return answer; + } + logger.fine("Request access popup is not required."); + return false; + } + + private static Boolean popupDueToStateOrTerms(DatasetVersion datasetVersion) { + Boolean answer = null; + // Each of these conditions is sufficient reason to have to + // present the user with the popup: if (datasetVersion == null) { - logger.fine("Download popup required because datasetVersion is null."); - return false; + logger.fine("Popup required because datasetVersion is null."); + answer = false; } - //0. if version is draft then Popup "not required" + // 0. if version is draft then Popup "not required" if (!datasetVersion.isReleased()) { - logger.fine("Download popup required because datasetVersion has not been released."); - return false; + logger.fine("Popup required because datasetVersion has not been released."); + answer = false; } // 1. License and Terms of Use: if (datasetVersion.getTermsOfUseAndAccess() != null) { - if (!datasetVersion.getTermsOfUseAndAccess().getLicense().isDefault() + License license = datasetVersion.getTermsOfUseAndAccess().getLicense(); + if ((license != null && !license.isDefault()) && !(datasetVersion.getTermsOfUseAndAccess().getTermsOfUse() == null - || datasetVersion.getTermsOfUseAndAccess().getTermsOfUse().equals(""))) { - logger.fine("Download popup required because of license or terms of use."); - return true; + || datasetVersion.getTermsOfUseAndAccess().getTermsOfUse().equals(""))) { + logger.fine("{opup required because of license or terms of use."); + answer = true; } // 2. Terms of Access: if (!(datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess() == null) && !datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess().equals("")) { - logger.fine("Download popup required because of terms of access."); - return true; + logger.fine("Popup required because of terms of access."); + answer = true; } - } + return answer; - logger.fine("Download popup is not required."); - return false; + } } /** From 6152b63890e3f1ed6824f092e6004d516f4a0cb8 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Tue, 29 Mar 2022 20:47:12 -0400 Subject: [PATCH 11/46] fix return - not clear why Eclipse didn't flag this --- src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java index 6f6fa895d36..b5ba114410d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java @@ -1523,9 +1523,8 @@ private static Boolean popupDueToStateOrTerms(DatasetVersion datasetVersion) { logger.fine("Popup required because of terms of access."); answer = true; } - return answer; - } + return answer; } /** From da5e7aa5e465a40cbdc3f1da9efa49ad502bb230 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Wed, 30 Mar 2022 09:22:02 -0400 Subject: [PATCH 12/46] Use download popup's license test code, cleanup --- .../harvard/iq/dataverse/util/FileUtil.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java index b5ba114410d..4b451d92a75 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java @@ -1496,35 +1496,34 @@ public static boolean isRequestAccessPopupRequired(DatasetVersion datasetVersion } private static Boolean popupDueToStateOrTerms(DatasetVersion datasetVersion) { - Boolean answer = null; + // Each of these conditions is sufficient reason to have to // present the user with the popup: if (datasetVersion == null) { logger.fine("Popup required because datasetVersion is null."); - answer = false; + return false; } // 0. if version is draft then Popup "not required" if (!datasetVersion.isReleased()) { logger.fine("Popup required because datasetVersion has not been released."); - answer = false; + return false; } // 1. License and Terms of Use: if (datasetVersion.getTermsOfUseAndAccess() != null) { License license = datasetVersion.getTermsOfUseAndAccess().getLicense(); - if ((license != null && !license.isDefault()) - && !(datasetVersion.getTermsOfUseAndAccess().getTermsOfUse() == null - || datasetVersion.getTermsOfUseAndAccess().getTermsOfUse().equals(""))) { - logger.fine("{opup required because of license or terms of use."); - answer = true; + if ((license == null && StringUtils.isNotBlank(datasetVersion.getTermsOfUseAndAccess().getTermsOfUse())) + || (license != null && !license.isDefault())) { + logger.fine("Download popup required because of license or terms of use."); + return true; } // 2. Terms of Access: if (!(datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess() == null) && !datasetVersion.getTermsOfUseAndAccess().getTermsOfAccess().equals("")) { logger.fine("Popup required because of terms of access."); - answer = true; + return true; } } - return answer; + return null; } /** From 3597d9d2a40a6e375ac09bb618274000bd51fbbf Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 11:59:44 -0400 Subject: [PATCH 13/46] Revert "Update 8127-citation-field-improvements.md" #8556 This reverts commit 0272629dcbd995f87ffb5c8218080a29d24057dc. --- .../8127-citation-field-improvements.md | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/doc/release-notes/8127-citation-field-improvements.md b/doc/release-notes/8127-citation-field-improvements.md index ca6a891f595..c6d9b079543 100644 --- a/doc/release-notes/8127-citation-field-improvements.md +++ b/doc/release-notes/8127-citation-field-improvements.md @@ -1,16 +1,6 @@ -### Improvements to fields that appear in the Citation metadata block - -Grammar, style and consistency improvements have been made to the titles, tooltip description text, and watermarks of metadata fields that appear in the Citation metadata block. - -This includes fields that dataset depositors can edit in the Citation Metadata accordion (i.e. fields controlled by the citation.tsv and citation.properties files) and fields whose values are system-generated, such as the Dataset Persistent ID, Previous Dataset Persistent ID, and Publication Date fields (controlled by the bundles.properties file). - -The changes should provide clearer information to curators, depositors, and people looking for data about what the fields are for. - -A new page in the Style Guides called "Text" has also been added. The new page includes a section called "Metadata Text Guidelines" with a link to a Google Doc where the guidelines are being maintained for now since we expect them to be revised frequently. - ### Additional Upgrade Steps -Update the Citation metadata block: +1. Reload Citation Metadata Block: -- `wget https://github.com/IQSS/dataverse/releases/download/v#.##/citation.tsv` -- `curl http://localhost:8080/api/admin/datasetfield/load -X POST --data-binary @citation.tsv -H "Content-type: text/tab-separated-values"` \ No newline at end of file + `wget https://github.com/IQSS/dataverse/releases/download/v#.##/citation.tsv` + `curl http://localhost:8080/api/admin/datasetfield/load -X POST --data-binary @citation.tsv -H "Content-type: text/tab-separated-values"` \ No newline at end of file From 1cf82380ffa7f5d0b5c4879354e645359dc2d783 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:00:31 -0400 Subject: [PATCH 14/46] Revert "Create 8127-citation-field-improvements.md" #8556 This reverts commit 8c30101f740fa45a7a0151de573ef78bceb94b98. --- doc/release-notes/8127-citation-field-improvements.md | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 doc/release-notes/8127-citation-field-improvements.md diff --git a/doc/release-notes/8127-citation-field-improvements.md b/doc/release-notes/8127-citation-field-improvements.md deleted file mode 100644 index c6d9b079543..00000000000 --- a/doc/release-notes/8127-citation-field-improvements.md +++ /dev/null @@ -1,6 +0,0 @@ -### Additional Upgrade Steps - -1. Reload Citation Metadata Block: - - `wget https://github.com/IQSS/dataverse/releases/download/v#.##/citation.tsv` - `curl http://localhost:8080/api/admin/datasetfield/load -X POST --data-binary @citation.tsv -H "Content-type: text/tab-separated-values"` \ No newline at end of file From 976f7339905c3e2f251c11eff922422c6ead5c49 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:01:18 -0400 Subject: [PATCH 15/46] Revert "Realigning #controlledVocabulary column headers" #8556 This reverts commit 6177cd9347ff70cc8b1bdf22dbc197cf6efab8c6. --- 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 a6c7a611fc3..5bf572fc6bc 100644 --- a/scripts/api/data/metadatablocks/citation.tsv +++ b/scripts/api/data/metadatablocks/citation.tsv @@ -79,7 +79,7 @@ originOfSources Origin of Historical Sources For historical sources, the origin and any rules followed in establishing them as sources textbox 75 FALSE FALSE FALSE FALSE FALSE FALSE citation characteristicOfSources Characteristic of Sources Characteristics not already noted elsewhere textbox 76 FALSE FALSE FALSE FALSE FALSE FALSE citation accessToSources Documentation and Access to Sources 1) Methods or procedures for accessing data sources and 2) any special permissions needed for access textbox 77 FALSE FALSE FALSE FALSE FALSE FALSE citation -#controlledVocabulary DatasetField Value identifier displayOrder + #controlledVocabulary DatasetField Value identifier displayOrder subject Agricultural Sciences D01 0 subject Arts and Humanities D0 1 subject Astronomy and Astrophysics D1 2 From b7eda36511c69f067985c9ba35c2656d2519656e Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:01:48 -0400 Subject: [PATCH 16/46] Revert "Updating link to the Google Doc that has the guidelines" #8556 This reverts commit ef426e35005964264f940516d1ea9a2494b9bcfd. --- doc/sphinx-guides/source/style/text.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/style/text.rst b/doc/sphinx-guides/source/style/text.rst index 8eccc430a0b..4794db3453a 100644 --- a/doc/sphinx-guides/source/style/text.rst +++ b/doc/sphinx-guides/source/style/text.rst @@ -11,4 +11,4 @@ Metadata Text Guidelines `Bootstrap `__ provides a responsive, fluid, 12-column grid system that we use to organize our page layouts. -These guidelines are maintained in `a Google Doc `__ as we expect to make frequent changes to them. We welcome comments in the Google Doc. \ No newline at end of file +These guidelines are maintained in `a Google Doc `__ as we expect to make frequent changes to them. We welcome comments in the Google Doc. \ No newline at end of file From 767eee5987e0aa1f7739acd6b7596f04e82fc5d5 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:02:17 -0400 Subject: [PATCH 17/46] Revert "Update text.rst" #8556 This reverts commit 86f5f74f31bd00ab975beeb3793d3111b0265b1f. --- doc/sphinx-guides/source/style/text.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/style/text.rst b/doc/sphinx-guides/source/style/text.rst index 4794db3453a..635eb5228c7 100644 --- a/doc/sphinx-guides/source/style/text.rst +++ b/doc/sphinx-guides/source/style/text.rst @@ -7,7 +7,7 @@ Here we describe the guidelines that help us provide helpful, clear and consiste :local: Metadata Text Guidelines -======================== +======================= `Bootstrap `__ provides a responsive, fluid, 12-column grid system that we use to organize our page layouts. From a9129907ccdedf302fffbd44de9e4a14df110f9c Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:02:45 -0400 Subject: [PATCH 18/46] Revert "Update metadatacustomization.rst" #8556 This reverts commit 745b9340d06e8f1866a99d0fd24e037243bec511. --- doc/sphinx-guides/source/admin/metadatacustomization.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/sphinx-guides/source/admin/metadatacustomization.rst b/doc/sphinx-guides/source/admin/metadatacustomization.rst index 710e9000d97..b7d0086e221 100644 --- a/doc/sphinx-guides/source/admin/metadatacustomization.rst +++ b/doc/sphinx-guides/source/admin/metadatacustomization.rst @@ -574,8 +574,6 @@ The scripts required can be hosted locally or retrieved dynamically from https:/ Tips from the Dataverse Community --------------------------------- -When creating new metadatablocks, please review the :doc:`/style/text` section of the Style Guide, which includes guidance about naming metadata fields and writing text for metadata tooltips. - If there are tips that you feel are omitted from this document, please open an issue at https://github.com/IQSS/dataverse/issues and consider making a pull request to make improvements. You can find this document at https://github.com/IQSS/dataverse/blob/develop/doc/sphinx-guides/source/admin/metadatacustomization.rst Alternatively, you are welcome to request "edit" access to this "Tips for Dataverse Software metadata blocks from the community" Google doc: https://docs.google.com/document/d/1XpblRw0v0SvV-Bq6njlN96WyHJ7tqG0WWejqBdl7hE0/edit?usp=sharing From a149b88da1fa452cf165b81ecde30c4244560540 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:03:18 -0400 Subject: [PATCH 19/46] Revert "Adding Text page to the Style Guide's table of contents" #8556 This reverts commit cc47538408b7e490492a83e097387f97fe848007. --- doc/sphinx-guides/source/style/index.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/sphinx-guides/source/style/index.rst b/doc/sphinx-guides/source/style/index.rst index 0e93716e146..ba6995e1b53 100755 --- a/doc/sphinx-guides/source/style/index.rst +++ b/doc/sphinx-guides/source/style/index.rst @@ -14,4 +14,3 @@ This style guide is meant to help developers implement clear and appropriate UI foundations patterns - text From db4db8dd38d49df88c6e1e69761338f47469b60b Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:03:51 -0400 Subject: [PATCH 20/46] Revert "Creating Text page for textual style guides, with metadata text guidelines section" #8556 This reverts commit 896cc45974a2b3eed13cca258e8f368370af8bc6. --- doc/sphinx-guides/source/style/text.rst | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 doc/sphinx-guides/source/style/text.rst diff --git a/doc/sphinx-guides/source/style/text.rst b/doc/sphinx-guides/source/style/text.rst deleted file mode 100644 index 635eb5228c7..00000000000 --- a/doc/sphinx-guides/source/style/text.rst +++ /dev/null @@ -1,14 +0,0 @@ -Text -++++ - -Here we describe the guidelines that help us provide helpful, clear and consistent textual information to users. - -.. contents:: |toctitle| - :local: - -Metadata Text Guidelines -======================= - -`Bootstrap `__ provides a responsive, fluid, 12-column grid system that we use to organize our page layouts. - -These guidelines are maintained in `a Google Doc `__ as we expect to make frequent changes to them. We welcome comments in the Google Doc. \ No newline at end of file From 59fe3f8beabc4724e43470bfecdd81e1efd2b827 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:04:11 -0400 Subject: [PATCH 21/46] Revert "Update index.rst" #8556 This reverts commit 16bc1fafd4fe525e337a2de64f988478b18b177b. --- doc/sphinx-guides/source/style/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/style/index.rst b/doc/sphinx-guides/source/style/index.rst index ba6995e1b53..dfe1d52194e 100755 --- a/doc/sphinx-guides/source/style/index.rst +++ b/doc/sphinx-guides/source/style/index.rst @@ -6,7 +6,7 @@ Style Guide =========== -This style guide is meant to help developers implement clear and appropriate UI elements consistent with the Dataverse Project's standards. +This style guide is meant to help developers implement clear and appropriate UI elements consistent with the Dataverse Project's standards. This is a test. **Contents:** From 2edb7e3f1c3db9ee2d537ec3978b7a841251b208 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:04:38 -0400 Subject: [PATCH 22/46] Revert "Testing" #8556 This reverts commit 1c27f0756c90d616422d1601a2bb05834d113b9c. --- doc/sphinx-guides/source/style/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/style/index.rst b/doc/sphinx-guides/source/style/index.rst index dfe1d52194e..ba6995e1b53 100755 --- a/doc/sphinx-guides/source/style/index.rst +++ b/doc/sphinx-guides/source/style/index.rst @@ -6,7 +6,7 @@ Style Guide =========== -This style guide is meant to help developers implement clear and appropriate UI elements consistent with the Dataverse Project's standards. This is a test. +This style guide is meant to help developers implement clear and appropriate UI elements consistent with the Dataverse Project's standards. **Contents:** From 4a9cb8e56a85079515c7d8f1b65de165276a903d Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:05:01 -0400 Subject: [PATCH 23/46] Revert "Update citation.properties" #8556 This reverts commit f701aad246f1e03aea33d898b86cf9c50788581f. --- .../java/propertyFiles/citation.properties | 256 +++++++++--------- 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/src/main/java/propertyFiles/citation.properties b/src/main/java/propertyFiles/citation.properties index 3f2c2a17852..70cb98a98e4 100644 --- a/src/main/java/propertyFiles/citation.properties +++ b/src/main/java/propertyFiles/citation.properties @@ -4,15 +4,15 @@ datasetfieldtype.title.title=Title datasetfieldtype.subtitle.title=Subtitle datasetfieldtype.alternativeTitle.title=Alternative Title datasetfieldtype.alternativeURL.title=Alternative URL -datasetfieldtype.otherId.title=Other Identifier +datasetfieldtype.otherId.title=Other ID datasetfieldtype.otherIdAgency.title=Agency datasetfieldtype.otherIdValue.title=Identifier datasetfieldtype.author.title=Author datasetfieldtype.authorName.title=Name datasetfieldtype.authorAffiliation.title=Affiliation -datasetfieldtype.authorIdentifierScheme.title=Identifier Type +datasetfieldtype.authorIdentifierScheme.title=Identifier Scheme datasetfieldtype.authorIdentifier.title=Identifier -datasetfieldtype.datasetContact.title=Point of Contact +datasetfieldtype.datasetContact.title=Contact datasetfieldtype.datasetContactName.title=Name datasetfieldtype.datasetContactAffiliation.title=Affiliation datasetfieldtype.datasetContactEmail.title=E-mail @@ -22,49 +22,49 @@ datasetfieldtype.dsDescriptionDate.title=Date datasetfieldtype.subject.title=Subject datasetfieldtype.keyword.title=Keyword datasetfieldtype.keywordValue.title=Term -datasetfieldtype.keywordVocabulary.title=Controlled Vocabulary Name -datasetfieldtype.keywordVocabularyURI.title=Controlled Vocabulary URL +datasetfieldtype.keywordVocabulary.title=Vocabulary +datasetfieldtype.keywordVocabularyURI.title=Vocabulary URL datasetfieldtype.topicClassification.title=Topic Classification datasetfieldtype.topicClassValue.title=Term -datasetfieldtype.topicClassVocab.title=Controlled Vocabulary Name -datasetfieldtype.topicClassVocabURI.title=Controlled Vocabulary URL +datasetfieldtype.topicClassVocab.title=Vocabulary +datasetfieldtype.topicClassVocabURI.title=Vocabulary URL datasetfieldtype.publication.title=Related Publication datasetfieldtype.publicationCitation.title=Citation -datasetfieldtype.publicationIDType.title=Identifier Type -datasetfieldtype.publicationIDNumber.title=Identifier +datasetfieldtype.publicationIDType.title=ID Type +datasetfieldtype.publicationIDNumber.title=ID Number datasetfieldtype.publicationURL.title=URL datasetfieldtype.notesText.title=Notes datasetfieldtype.language.title=Language datasetfieldtype.producer.title=Producer datasetfieldtype.producerName.title=Name datasetfieldtype.producerAffiliation.title=Affiliation -datasetfieldtype.producerAbbreviation.title=Abbreviated Name +datasetfieldtype.producerAbbreviation.title=Abbreviation datasetfieldtype.producerURL.title=URL datasetfieldtype.producerLogoURL.title=Logo URL datasetfieldtype.productionDate.title=Production Date -datasetfieldtype.productionPlace.title=Production Location +datasetfieldtype.productionPlace.title=Production Place datasetfieldtype.contributor.title=Contributor datasetfieldtype.contributorType.title=Type datasetfieldtype.contributorName.title=Name -datasetfieldtype.grantNumber.title=Funding Information -datasetfieldtype.grantNumberAgency.title=Agency -datasetfieldtype.grantNumberValue.title=Identifier +datasetfieldtype.grantNumber.title=Grant Information +datasetfieldtype.grantNumberAgency.title=Grant Agency +datasetfieldtype.grantNumberValue.title=Grant Number datasetfieldtype.distributor.title=Distributor datasetfieldtype.distributorName.title=Name datasetfieldtype.distributorAffiliation.title=Affiliation -datasetfieldtype.distributorAbbreviation.title=Abbreviated Name +datasetfieldtype.distributorAbbreviation.title=Abbreviation datasetfieldtype.distributorURL.title=URL datasetfieldtype.distributorLogoURL.title=Logo URL datasetfieldtype.distributionDate.title=Distribution Date datasetfieldtype.depositor.title=Depositor datasetfieldtype.dateOfDeposit.title=Deposit Date -datasetfieldtype.timePeriodCovered.title=Time Period -datasetfieldtype.timePeriodCoveredStart.title=Start Date -datasetfieldtype.timePeriodCoveredEnd.title=End Date +datasetfieldtype.timePeriodCovered.title=Time Period Covered +datasetfieldtype.timePeriodCoveredStart.title=Start +datasetfieldtype.timePeriodCoveredEnd.title=End datasetfieldtype.dateOfCollection.title=Date of Collection -datasetfieldtype.dateOfCollectionStart.title=Start Date -datasetfieldtype.dateOfCollectionEnd.title=End Date -datasetfieldtype.kindOfData.title=Data Type +datasetfieldtype.dateOfCollectionStart.title=Start +datasetfieldtype.dateOfCollectionEnd.title=End +datasetfieldtype.kindOfData.title=Kind of Data datasetfieldtype.series.title=Series datasetfieldtype.seriesName.title=Name datasetfieldtype.seriesInformation.title=Information @@ -72,106 +72,106 @@ datasetfieldtype.software.title=Software datasetfieldtype.softwareName.title=Name datasetfieldtype.softwareVersion.title=Version datasetfieldtype.relatedMaterial.title=Related Material -datasetfieldtype.relatedDatasets.title=Related Dataset -datasetfieldtype.otherReferences.title=Other Reference -datasetfieldtype.dataSources.title=Data Source -datasetfieldtype.originOfSources.title=Origin of Historical Sources -datasetfieldtype.characteristicOfSources.title=Characteristic of Sources +datasetfieldtype.relatedDatasets.title=Related Datasets +datasetfieldtype.otherReferences.title=Other References +datasetfieldtype.dataSources.title=Data Sources +datasetfieldtype.originOfSources.title=Origin of Sources +datasetfieldtype.characteristicOfSources.title=Characteristic of Sources Noted datasetfieldtype.accessToSources.title=Documentation and Access to Sources -datasetfieldtype.title.description=The main title of the Dataset -datasetfieldtype.subtitle.description=A secondary title that amplifies or states certain limitations on the main title -datasetfieldtype.alternativeTitle.description=Either 1) a title commonly used to refer to the Dataset or 2) an abbreviation of the main title -datasetfieldtype.alternativeURL.description=Another URL where one can view or access the data in the Dataset, e.g. a project or personal webpage -datasetfieldtype.otherId.description=Another unique identifier for the Dataset (e.g. producer's or another repository's identifier) -datasetfieldtype.otherIdAgency.description=The name of the agency that generated the other identifier -datasetfieldtype.otherIdValue.description=Another identifier uniquely identifies the Dataset -datasetfieldtype.author.description=The entity, e.g. a person or organization, that created the Dataset -datasetfieldtype.authorName.description=The name of the author, such as the person's name or the name of an organization -datasetfieldtype.authorAffiliation.description=The name of the entity affiliated with the author, e.g. an organization's name -datasetfieldtype.authorIdentifierScheme.description=The type of identifier that uniquely identifies the author (e.g. ORCID, ISNI) -datasetfieldtype.authorIdentifier.description=Uniquely identifies the author when paired with an identifier type -datasetfieldtype.datasetContact.description=The entity, e.g. a person or organization, that users of the Dataset can contact with questions -datasetfieldtype.datasetContactName.description=The name of the point of contact, e.g. the person's name or the name of an organization -datasetfieldtype.datasetContactAffiliation.description=The name of the entity affiliated with the point of contact, e.g. an organization's name -datasetfieldtype.datasetContactEmail.description=The point of contact's email address -datasetfieldtype.dsDescription.description=A summary describing the purpose, nature, and scope of the Dataset -datasetfieldtype.dsDescriptionValue.description=A summary describing the purpose, nature, and scope of the Dataset -datasetfieldtype.dsDescriptionDate.description=The date when the description was added to the Dataset. If the Dataset contains more than one description, e.g. the data producer supplied one description and the data repository supplied another, this date is used to distinguish between the descriptions -datasetfieldtype.subject.description=The area of study relevant to the Dataset -datasetfieldtype.keyword.description=A key term that describes an important aspect of the Dataset and information about any controlled vocabulary used -datasetfieldtype.keywordValue.description=A key term that describes important aspects of the Dataset -datasetfieldtype.keywordVocabulary.description=The controlled vocabulary used for the keyword term (e.g. LCSH, MeSH) -datasetfieldtype.keywordVocabularyURI.description=The URL where one can access information about the term's controlled vocabulary -datasetfieldtype.topicClassification.description=Indicates a broad, important topic or subject that the Dataset covers and information about any controlled vocabulary used -datasetfieldtype.topicClassValue.description=A topic or subject term -datasetfieldtype.topicClassVocab.description=The controlled vocabulary used for the keyword term (e.g. LCSH, MeSH) -datasetfieldtype.topicClassVocabURI.description=The URL where one can access information about the term's controlled vocabulary -datasetfieldtype.publication.description=The article or report that uses the data in the Dataset. The full list of related publications will be displayed on the metadata tab -datasetfieldtype.publicationCitation.description=The full bibliographic citation for the related publication -datasetfieldtype.publicationIDType.description=The type of identifier that uniquely identifies a related publication -datasetfieldtype.publicationIDNumber.description=The identifier for a related publication -datasetfieldtype.publicationURL.description=The URL form of the identifier entered in the Identifier field, e.g. the DOI URL if a DOI was entered in the Identifier field. Used to display what was entered in the ID Type and ID Number fields as a link. If what was entered in the Identifier field has no URL form, the URL of the publication webpage is used, e.g. a journal article webpage -datasetfieldtype.notesText.description=Additional information about the Dataset -datasetfieldtype.language.description=A language that the Dataset's files is written in -datasetfieldtype.producer.description=The entity, such a person or organization, managing the finances or other administrative processes involved in the creation of the Dataset -datasetfieldtype.producerName.description=The name of the entity, e.g. the person's name or the name of an organization -datasetfieldtype.producerAffiliation.description=The name of the entity affiliated with the producer, e.g. an organization's name -datasetfieldtype.producerAbbreviation.description=The producer's abbreviated name (e.g. IQSS, ICPSR) -datasetfieldtype.producerURL.description=The URL of the producer's website -datasetfieldtype.producerLogoURL.description=The URL of the producer's logo -datasetfieldtype.productionDate.description=The date when the data were produced (not distributed, published, or archived) -datasetfieldtype.productionPlace.description=The location where the data and any related materials were produced or collected -datasetfieldtype.contributor.description=The entity, such as a person or organization, responsible for collecting, managing, or otherwise contributing to the development of the Dataset -datasetfieldtype.contributorType.description=Indicates the type of contribution made to the dataset -datasetfieldtype.contributorName.description=The name of the contributor, e.g. the person's name or the name of an organization -datasetfieldtype.grantNumber.description=Information about the Dataset's financial support -datasetfieldtype.grantNumberAgency.description=The agency that provided financial support for the Dataset -datasetfieldtype.grantNumberValue.description=The grant identifier or contract identifier of the agency that provided financial support for the Dataset -datasetfieldtype.distributor.description=The entity, such as a person or organization, designated to generate copies of the Dataset, including any editions or revisions -datasetfieldtype.distributorName.description=The name of the entity, e.g. the person's name or the name of an organization -datasetfieldtype.distributorAffiliation.description=The name of the entity affiliated with the distributor, e.g. an organization's name -datasetfieldtype.distributorAbbreviation.description=The distributor's abbreviated name (e.g. IQSS, ICPSR) -datasetfieldtype.distributorURL.description=The URL of the distributor's webpage -datasetfieldtype.distributorLogoURL.description=The URL of the distributor's logo image, used to show the image on the Dataset's page -datasetfieldtype.distributionDate.description=The date when the Dataset was made available for distribution/presentation -datasetfieldtype.depositor.description=The entity, such as a person or organization, that deposited the Dataset in the repository -datasetfieldtype.dateOfDeposit.description=The date when the Dataset was deposited into the repository -datasetfieldtype.timePeriodCovered.description=The time period that the data refer to. Also known as span. This is the time period covered by the data, not the dates of coding, collecting data, or making documents machine-readable -datasetfieldtype.timePeriodCoveredStart.description=The start date of the time period that the data refer to -datasetfieldtype.timePeriodCoveredEnd.description=The end date of the time period that the data refer to -datasetfieldtype.dateOfCollection.description=The dates when the data were collected or generated -datasetfieldtype.dateOfCollectionStart.description=The date when the data collection started -datasetfieldtype.dateOfCollectionEnd.description=The date when the data collection ended -datasetfieldtype.kindOfData.description=The type of data included in the files (e.g. survey data, clinical data, or machine-readable text) -datasetfieldtype.series.description=Information about the dataset series to which the Dataset belong -datasetfieldtype.seriesName.description=The name of the dataset series -datasetfieldtype.seriesInformation.description=Can include 1) a history of the series and 2) a summary of features that apply to the series -datasetfieldtype.software.description=Information about the software used to generate the Dataset -datasetfieldtype.softwareName.description=The name of software used to generate the Dataset -datasetfieldtype.softwareVersion.description=The version of the software used to generate the Dataset, e.g. 4.11 -datasetfieldtype.relatedMaterial.description=Information, such as a persistent ID or citation, about the material related to the Dataset, such as appendices or sampling information available outside of the Dataset -datasetfieldtype.relatedDatasets.description=Information, such as a persistent ID or citation, about a related dataset, such as previous research on the Dataset's subject -datasetfieldtype.otherReferences.description=Information, such as a persistent ID or citation, about another type of resource that provides background or supporting material to the Dataset -datasetfieldtype.dataSources.description=Information, such as a persistent ID or citation, about sources of the Dataset (e.g. a book, article, serial, or machine-readable data file) -datasetfieldtype.originOfSources.description=For historical sources, the origin and any rules followed in establishing them as sources -datasetfieldtype.characteristicOfSources.description=Characteristics not already noted elsewhere -datasetfieldtype.accessToSources.description=1) Methods or procedures for accessing data sources and 2) any special permissions needed for access -datasetfieldtype.title.watermark= +datasetfieldtype.title.description=Full title by which the Dataset is known. +datasetfieldtype.subtitle.description=A secondary title used to amplify or state certain limitations on the main title. +datasetfieldtype.alternativeTitle.description=A title by which the work is commonly referred, or an abbreviation of the title. +datasetfieldtype.alternativeURL.description=A URL where the dataset can be viewed, such as a personal or project website. +datasetfieldtype.otherId.description=Another unique identifier that identifies this Dataset (e.g., producer's or another repository's number). +datasetfieldtype.otherIdAgency.description=Name of agency which generated this identifier. +datasetfieldtype.otherIdValue.description=Other identifier that corresponds to this Dataset. +datasetfieldtype.author.description=The person(s), corporate body(ies), or agency(ies) responsible for creating the work. +datasetfieldtype.authorName.description=The author's Family Name, Given Name or the name of the organization responsible for this Dataset. +datasetfieldtype.authorAffiliation.description=The organization with which the author is affiliated. +datasetfieldtype.authorIdentifierScheme.description=Name of the identifier scheme (ORCID, ISNI). +datasetfieldtype.authorIdentifier.description=Uniquely identifies an individual author or organization, according to various schemes. +datasetfieldtype.datasetContact.description=The contact(s) for this Dataset. +datasetfieldtype.datasetContactName.description=The contact's Family Name, Given Name or the name of the organization. +datasetfieldtype.datasetContactAffiliation.description=The organization with which the contact is affiliated. +datasetfieldtype.datasetContactEmail.description=The e-mail address(es) of the contact(s) for the Dataset. This will not be displayed. +datasetfieldtype.dsDescription.description=A summary describing the purpose, nature, and scope of the Dataset. +datasetfieldtype.dsDescriptionValue.description=A summary describing the purpose, nature, and scope of the Dataset. +datasetfieldtype.dsDescriptionDate.description=In cases where a Dataset contains more than one description (for example, one might be supplied by the data producer and another prepared by the data repository where the data are deposited), the date attribute is used to distinguish between the two descriptions. The date attribute follows the ISO convention of YYYY-MM-DD. +datasetfieldtype.subject.description=Domain-specific Subject Categories that are topically relevant to the Dataset. +datasetfieldtype.keyword.description=Key terms that describe important aspects of the Dataset. +datasetfieldtype.keywordValue.description=Key terms that describe important aspects of the Dataset. Can be used for building keyword indexes and for classification and retrieval purposes. A controlled vocabulary can be employed. The vocab attribute is provided for specification of the controlled vocabulary in use, such as LCSH, MeSH, or others. The vocabURI attribute specifies the location for the full controlled vocabulary. +datasetfieldtype.keywordVocabulary.description=For the specification of the keyword controlled vocabulary in use, such as LCSH, MeSH, or others. +datasetfieldtype.keywordVocabularyURI.description=Keyword vocabulary URL points to the web presence that describes the keyword vocabulary, if appropriate. Enter an absolute URL where the keyword vocabulary web site is found, such as http://www.my.org. +datasetfieldtype.topicClassification.description=The classification field indicates the broad important topic(s) and subjects that the data cover. Library of Congress subject terms may be used here. +datasetfieldtype.topicClassValue.description=Topic or Subject term that is relevant to this Dataset. +datasetfieldtype.topicClassVocab.description=Provided for specification of the controlled vocabulary in use, e.g., LCSH, MeSH, etc. +datasetfieldtype.topicClassVocabURI.description=Specifies the URL location for the full controlled vocabulary. +datasetfieldtype.publication.description=Publications that use the data from this Dataset. The full list of Related Publications will be displayed on the metadata tab. +datasetfieldtype.publicationCitation.description=The full bibliographic citation for this related publication. +datasetfieldtype.publicationIDType.description=The type of digital identifier used for this publication (e.g., Digital Object Identifier (DOI)). +datasetfieldtype.publicationIDNumber.description=The identifier for the selected ID type. +datasetfieldtype.publicationURL.description=Link to the publication web page (e.g., journal article page, archive record page, or other). +datasetfieldtype.notesText.description=Additional important information about the Dataset. +datasetfieldtype.language.description=Language of the Dataset +datasetfieldtype.producer.description=Person or organization with the financial or administrative responsibility over this Dataset +datasetfieldtype.producerName.description=Producer name +datasetfieldtype.producerAffiliation.description=The organization with which the producer is affiliated. +datasetfieldtype.producerAbbreviation.description=The abbreviation by which the producer is commonly known. (ex. IQSS, ICPSR) +datasetfieldtype.producerURL.description=Producer URL points to the producer's web presence, if appropriate. Enter an absolute URL where the producer's web site is found, such as http://www.my.org. +datasetfieldtype.producerLogoURL.description=URL for the producer's logo, which points to this producer's web-accessible logo image. Enter an absolute URL where the producer's logo image is found, such as http://www.my.org/images/logo.gif. +datasetfieldtype.productionDate.description=Date when the data collection or other materials were produced (not distributed, published or archived). +datasetfieldtype.productionPlace.description=The location where the data collection and any other related materials were produced. +datasetfieldtype.contributor.description=The organization or person responsible for either collecting, managing, or otherwise contributing in some form to the development of the resource. +datasetfieldtype.contributorType.description=The type of contributor of the resource. +datasetfieldtype.contributorName.description=The Family Name, Given Name or organization name of the contributor. +datasetfieldtype.grantNumber.description=Grant Information +datasetfieldtype.grantNumberAgency.description=Grant Number Agency +datasetfieldtype.grantNumberValue.description=The grant or contract number of the project that sponsored the effort. +datasetfieldtype.distributor.description=The organization designated by the author or producer to generate copies of the particular work including any necessary editions or revisions. +datasetfieldtype.distributorName.description=Distributor name +datasetfieldtype.distributorAffiliation.description=The organization with which the distributor contact is affiliated. +datasetfieldtype.distributorAbbreviation.description=The abbreviation by which this distributor is commonly known (e.g., IQSS, ICPSR). +datasetfieldtype.distributorURL.description=Distributor URL points to the distributor's web presence, if appropriate. Enter an absolute URL where the distributor's web site is found, such as http://www.my.org. +datasetfieldtype.distributorLogoURL.description=URL of the distributor's logo, which points to this distributor's web-accessible logo image. Enter an absolute URL where the distributor's logo image is found, such as http://www.my.org/images/logo.gif. +datasetfieldtype.distributionDate.description=Date that the work was made available for distribution/presentation. +datasetfieldtype.depositor.description=The person (Family Name, Given Name) or the name of the organization that deposited this Dataset to the repository. +datasetfieldtype.dateOfDeposit.description=Date that the Dataset was deposited into the repository. +datasetfieldtype.timePeriodCovered.description=Time period to which the data refer. This item reflects the time period covered by the data, not the dates of coding or making documents machine-readable or the dates the data were collected. Also known as span. +datasetfieldtype.timePeriodCoveredStart.description=Start date which reflects the time period covered by the data, not the dates of coding or making documents machine-readable or the dates the data were collected. +datasetfieldtype.timePeriodCoveredEnd.description=End date which reflects the time period covered by the data, not the dates of coding or making documents machine-readable or the dates the data were collected. +datasetfieldtype.dateOfCollection.description=Contains the date(s) when the data were collected. +datasetfieldtype.dateOfCollectionStart.description=Date when the data collection started. +datasetfieldtype.dateOfCollectionEnd.description=Date when the data collection ended. +datasetfieldtype.kindOfData.description=Type of data included in the file: survey data, census/enumeration data, aggregate data, clinical data, event/transaction data, program source code, machine-readable text, administrative records data, experimental data, psychological test, textual data, coded textual, coded documents, time budget diaries, observation data/ratings, process-produced data, or other. +datasetfieldtype.series.description=Information about the Dataset series. +datasetfieldtype.seriesName.description=Name of the dataset series to which the Dataset belongs. +datasetfieldtype.seriesInformation.description=History of the series and summary of those features that apply to the series as a whole. +datasetfieldtype.software.description=Information about the software used to generate the Dataset. +datasetfieldtype.softwareName.description=Name of software used to generate the Dataset. +datasetfieldtype.softwareVersion.description=Version of the software used to generate the Dataset. +datasetfieldtype.relatedMaterial.description=Any material related to this Dataset. +datasetfieldtype.relatedDatasets.description=Any Datasets that are related to this Dataset, such as previous research on this subject. +datasetfieldtype.otherReferences.description=Any references that would serve as background or supporting material to this Dataset. +datasetfieldtype.dataSources.description=List of books, articles, serials, or machine-readable data files that served as the sources of the data collection. +datasetfieldtype.originOfSources.description=For historical materials, information about the origin of the sources and the rules followed in establishing the sources should be specified. +datasetfieldtype.characteristicOfSources.description=Assessment of characteristics and source material. +datasetfieldtype.accessToSources.description=Level of documentation of the original sources. +datasetfieldtype.title.watermark=Enter title... datasetfieldtype.subtitle.watermark= datasetfieldtype.alternativeTitle.watermark= -datasetfieldtype.alternativeURL.watermark=https:// +datasetfieldtype.alternativeURL.watermark=Enter full URL, starting with http:// datasetfieldtype.otherId.watermark= datasetfieldtype.otherIdAgency.watermark= datasetfieldtype.otherIdValue.watermark= datasetfieldtype.author.watermark= -datasetfieldtype.authorName.watermark=1) Family Name, Given Name or 2) Organization XYZ -datasetfieldtype.authorAffiliation.watermark=Organization XYZ +datasetfieldtype.authorName.watermark=FamilyName, GivenName or Organization +datasetfieldtype.authorAffiliation.watermark= datasetfieldtype.authorIdentifierScheme.watermark= datasetfieldtype.authorIdentifier.watermark= datasetfieldtype.datasetContact.watermark= -datasetfieldtype.datasetContactName.watermark=1) FamilyName, GivenName or 2) Organization -datasetfieldtype.datasetContactAffiliation.watermark=Organization XYZ -datasetfieldtype.datasetContactEmail.watermark=name@email.xyz +datasetfieldtype.datasetContactName.watermark=FamilyName, GivenName or Organization +datasetfieldtype.datasetContactAffiliation.watermark= +datasetfieldtype.datasetContactEmail.watermark= datasetfieldtype.dsDescription.watermark= datasetfieldtype.dsDescriptionValue.watermark= datasetfieldtype.dsDescriptionDate.watermark=YYYY-MM-DD @@ -179,40 +179,40 @@ datasetfieldtype.subject.watermark= datasetfieldtype.keyword.watermark= datasetfieldtype.keywordValue.watermark= datasetfieldtype.keywordVocabulary.watermark= -datasetfieldtype.keywordVocabularyURI.watermark=https:// +datasetfieldtype.keywordVocabularyURI.watermark=Enter full URL, starting with http:// datasetfieldtype.topicClassification.watermark= datasetfieldtype.topicClassValue.watermark= datasetfieldtype.topicClassVocab.watermark= -datasetfieldtype.topicClassVocabURI.watermark=https:// +datasetfieldtype.topicClassVocabURI.watermark=Enter full URL, starting with http:// datasetfieldtype.publication.watermark= datasetfieldtype.publicationCitation.watermark= datasetfieldtype.publicationIDType.watermark= datasetfieldtype.publicationIDNumber.watermark= -datasetfieldtype.publicationURL.watermark=https:// +datasetfieldtype.publicationURL.watermark=Enter full URL, starting with http:// datasetfieldtype.notesText.watermark= datasetfieldtype.language.watermark= datasetfieldtype.producer.watermark= -datasetfieldtype.producerName.watermark=1) FamilyName, GivenName or 2) Organization -datasetfieldtype.producerAffiliation.watermark=Organization XYZ +datasetfieldtype.producerName.watermark=FamilyName, GivenName or Organization +datasetfieldtype.producerAffiliation.watermark= datasetfieldtype.producerAbbreviation.watermark= -datasetfieldtype.producerURL.watermark=https:// -datasetfieldtype.producerLogoURL.watermark=https:// +datasetfieldtype.producerURL.watermark=Enter full URL, starting with http:// +datasetfieldtype.producerLogoURL.watermark=Enter full URL for image, starting with http:// datasetfieldtype.productionDate.watermark=YYYY-MM-DD datasetfieldtype.productionPlace.watermark= datasetfieldtype.contributor.watermark= datasetfieldtype.contributorType.watermark= -datasetfieldtype.contributorName.watermark=1) FamilyName, GivenName or 2) Organization +datasetfieldtype.contributorName.watermark=FamilyName, GivenName or Organization datasetfieldtype.grantNumber.watermark= -datasetfieldtype.grantNumberAgency.watermark=Organization XYZ +datasetfieldtype.grantNumberAgency.watermark= datasetfieldtype.grantNumberValue.watermark= datasetfieldtype.distributor.watermark= -datasetfieldtype.distributorName.watermark=1) FamilyName, GivenName or 2) Organization -datasetfieldtype.distributorAffiliation.watermark=Organization XYZ +datasetfieldtype.distributorName.watermark=FamilyName, GivenName or Organization +datasetfieldtype.distributorAffiliation.watermark= datasetfieldtype.distributorAbbreviation.watermark= -datasetfieldtype.distributorURL.watermark=https:// -datasetfieldtype.distributorLogoURL.watermark=https:// +datasetfieldtype.distributorURL.watermark=Enter full URL, starting with http:// +datasetfieldtype.distributorLogoURL.watermark=Enter full URL for image, starting with http:// datasetfieldtype.distributionDate.watermark=YYYY-MM-DD -datasetfieldtype.depositor.watermark=1) FamilyName, GivenName or 2) Organization +datasetfieldtype.depositor.watermark= datasetfieldtype.dateOfDeposit.watermark=YYYY-MM-DD datasetfieldtype.timePeriodCovered.watermark= datasetfieldtype.timePeriodCoveredStart.watermark=YYYY-MM-DD @@ -343,7 +343,7 @@ controlledvocabulary.language.galician=Galician controlledvocabulary.language.georgian=Georgian controlledvocabulary.language.german=German controlledvocabulary.language.greek_(modern)=Greek (modern) -controlledvocabulary.language.guarani=Guaraní +controlledvocabulary.language.guarani=Guaraní controlledvocabulary.language.gujarati=Gujarati controlledvocabulary.language.haitian,_haitian_creole=Haitian, Haitian Creole controlledvocabulary.language.hausa=Hausa @@ -403,7 +403,7 @@ controlledvocabulary.language.navajo,_navaho=Navajo, Navaho controlledvocabulary.language.northern_ndebele=Northern Ndebele controlledvocabulary.language.nepali=Nepali controlledvocabulary.language.ndonga=Ndonga -controlledvocabulary.language.norwegian_bokmal=Norwegian BokmÃ¥l +controlledvocabulary.language.norwegian_bokmal=Norwegian Bokmål controlledvocabulary.language.norwegian_nynorsk=Norwegian Nynorsk controlledvocabulary.language.norwegian=Norwegian controlledvocabulary.language.nuosu=Nuosu @@ -465,7 +465,7 @@ controlledvocabulary.language.urdu=Urdu controlledvocabulary.language.uzbek=Uzbek controlledvocabulary.language.venda=Venda controlledvocabulary.language.vietnamese=Vietnamese -controlledvocabulary.language.volapuk=Volapük +controlledvocabulary.language.volapuk=Volapük controlledvocabulary.language.walloon=Walloon controlledvocabulary.language.welsh=Welsh controlledvocabulary.language.wolof=Wolof From afa78200218145c982eeab7d13cb00dc08e6aadc Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:05:26 -0400 Subject: [PATCH 24/46] Revert "Update Bundle.properties" #8556 This reverts commit 1d1a4decdc3652787326dc6eb3518f5e64c278b0. --- src/main/java/propertyFiles/Bundle.properties | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index 4c0938ee33f..9895cffe0e7 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -878,8 +878,9 @@ advanced.search.files.variableName=Variable Name advanced.search.files.variableName.tip=The name of the variable's column in the data frame. advanced.search.files.variableLabel=Variable Label advanced.search.files.variableLabel.tip=A short description of the variable. -advanced.search.datasets.persistentId=Persistent Identifier -advanced.search.datasets.persistentId.tip=The dataset's unique persistent identifier,either a DOI or Handle +advanced.search.datasets.persistentId.tip=The persistent identifier for the dataset. +advanced.search.datasets.persistentId=Dataset Persistent ID +advanced.search.datasets.persistentId.tip=The unique persistent identifier for a dataset, which can be a Handle or DOI in Dataverse. advanced.search.files.fileTags=File Tags advanced.search.files.fileTags.tip=Terms such "Documentation", "Data", or "Code" that have been applied to files. @@ -1513,15 +1514,15 @@ dataset.message.termsFailure=The dataset terms could not be updated. dataset.message.label.fileAccess=File Access dataset.message.publicInstall=Files are stored on a publicly accessible storage server. dataset.metadata.publicationDate=Publication Date -dataset.metadata.publicationDate.tip=The date when the Dataset is published in this repository +dataset.metadata.publicationDate.tip=The publication date of a dataset. dataset.metadata.citationDate=Citation Date dataset.metadata.citationDate.tip=The citation date of a dataset, determined by the longest embargo on any file in version 1.0. dataset.metadata.publicationYear=Publication Year dataset.metadata.publicationYear.tip=The publication year of a dataset. -dataset.metadata.persistentId=Persistent Identifier -dataset.metadata.persistentId.tip=The dataset's unique persistent identifier, either a DOI or Handle -dataset.metadata.alternativePersistentId=Previous Persistent Identifier -dataset.metadata.alternativePersistentId.tip=A previously used persistent identifier for the Dataset, either a DOI or Handle +dataset.metadata.persistentId=Dataset Persistent ID +dataset.metadata.persistentId.tip=The unique persistent identifier for a dataset, which can be a Handle or DOI in Dataverse. +dataset.metadata.alternativePersistentId=Previous Dataset Persistent ID +dataset.metadata.alternativePersistentId.tip=A previously used persistent identifier for a dataset, which can be a Handle or DOI in Dataverse. file.metadata.preview=Preview file.metadata.filetags=File Tags file.metadata.persistentId=File Persistent ID From 58c9cc7cecfdd25ae744c935d8e145976e74d5ce Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 12:05:45 -0400 Subject: [PATCH 25/46] Revert "Update citation.tsv" #8556 This reverts commit 5008143b0b0b6101c09e6130e72e4a32a19808bc. --- scripts/api/data/metadatablocks/citation.tsv | 274 +++++++++---------- 1 file changed, 137 insertions(+), 137 deletions(-) diff --git a/scripts/api/data/metadatablocks/citation.tsv b/scripts/api/data/metadatablocks/citation.tsv index 5bf572fc6bc..375a8c67cec 100644 --- a/scripts/api/data/metadatablocks/citation.tsv +++ b/scripts/api/data/metadatablocks/citation.tsv @@ -1,141 +1,141 @@ -#metadataBlock name dataverseAlias displayName blockURI - citation Citation Metadata https://dataverse.org/schema/citation/ +#metadataBlock name dataverseAlias displayName blockURI + citation Citation Metadata https://dataverse.org/schema/citation/ #datasetField name title description watermark fieldType displayOrder displayFormat advancedSearchField allowControlledVocabulary allowmultiples facetable displayoncreate required parent metadatablock_id termURI - title Title The main title of the Dataset text 0 TRUE FALSE FALSE FALSE TRUE TRUE citation http://purl.org/dc/terms/title - subtitle Subtitle A secondary title that amplifies or states certain limitations on the main title text 1 FALSE FALSE FALSE FALSE FALSE FALSE citation - alternativeTitle Alternative Title Either 1) a title commonly used to refer to the Dataset or 2) an abbreviation of the main title text 2 FALSE FALSE FALSE FALSE FALSE FALSE citation http://purl.org/dc/terms/alternative - alternativeURL Alternative URL Another URL where one can view or access the data in the Dataset, e.g. a project or personal webpage https:// url 3 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE citation https://schema.org/distribution - otherId Other Identifier Another unique identifier for the Dataset (e.g. producer's or another repository's identifier) none 4 : FALSE FALSE TRUE FALSE FALSE FALSE citation - otherIdAgency Agency The name of the agency that generated the other identifier text 5 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE otherId citation - otherIdValue Identifier Another identifier uniquely identifies the Dataset text 6 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE otherId citation - author Author The entity, e.g. a person or organization, that created the Dataset none 7 FALSE FALSE TRUE FALSE TRUE TRUE citation http://purl.org/dc/terms/creator - authorName Name The name of the author, such as the person's name or the name of an organization 1) Family Name, Given Name or 2) Organization XYZ text 8 #VALUE TRUE FALSE FALSE TRUE TRUE TRUE author citation - authorAffiliation Affiliation The name of the entity affiliated with the author, e.g. an organization's name Organization XYZ text 9 (#VALUE) TRUE FALSE FALSE TRUE TRUE FALSE author citation - authorIdentifierScheme Identifier Type The type of identifier that uniquely identifies the author (e.g. ORCID, ISNI) text 10 - #VALUE: FALSE TRUE FALSE FALSE TRUE FALSE author citation http://purl.org/spar/datacite/AgentIdentifierScheme - authorIdentifier Identifier Uniquely identifies the author when paired with an identifier type text 11 #VALUE FALSE FALSE FALSE FALSE TRUE FALSE author citation http://purl.org/spar/datacite/AgentIdentifier - datasetContact Point of Contact The entity, e.g. a person or organization, that users of the Dataset can contact with questions none 12 FALSE FALSE TRUE FALSE TRUE TRUE citation - datasetContactName Name The name of the point of contact, e.g. the person's name or the name of an organization 1) FamilyName, GivenName or 2) Organization text 13 #VALUE FALSE FALSE FALSE FALSE TRUE FALSE datasetContact citation - datasetContactAffiliation Affiliation The name of the entity affiliated with the point of contact, e.g. an organization's name Organization XYZ text 14 (#VALUE) FALSE FALSE FALSE FALSE TRUE FALSE datasetContact citation - datasetContactEmail E-mail The point of contact's email address name@email.xyz email 15 #EMAIL FALSE FALSE FALSE FALSE TRUE TRUE datasetContact citation - dsDescription Description A summary describing the purpose, nature, and scope of the Dataset none 16 FALSE FALSE TRUE FALSE TRUE TRUE citation - dsDescriptionValue Text A summary describing the purpose, nature, and scope of the Dataset textbox 17 #VALUE TRUE FALSE FALSE FALSE TRUE TRUE dsDescription citation - dsDescriptionDate Date The date when the description was added to the Dataset. If the Dataset contains more than one description, e.g. the data producer supplied one description and the data repository supplied another, this date is used to distinguish between the descriptions YYYY-MM-DD date 18 (#VALUE) FALSE FALSE FALSE FALSE TRUE FALSE dsDescription citation - subject Subject The area of study relevant to the Dataset text 19 TRUE TRUE TRUE TRUE TRUE TRUE citation http://purl.org/dc/terms/subject - keyword Keyword A key term that describes an important aspect of the Dataset and information about any controlled vocabulary used none 20 FALSE FALSE TRUE FALSE TRUE FALSE citation - keywordValue Term A key term that describes important aspects of the Dataset text 21 #VALUE TRUE FALSE FALSE TRUE TRUE FALSE keyword citation - keywordVocabulary Controlled Vocabulary Name The controlled vocabulary used for the keyword term (e.g. LCSH, MeSH) text 22 (#VALUE) FALSE FALSE FALSE FALSE TRUE FALSE keyword citation - keywordVocabularyURI Controlled Vocabulary URL The URL where one can access information about the term's controlled vocabulary https:// url 23 #VALUE FALSE FALSE FALSE FALSE TRUE FALSE keyword citation - topicClassification Topic Classification Indicates a broad, important topic or subject that the Dataset covers and information about any controlled vocabulary used none 24 FALSE FALSE TRUE FALSE FALSE FALSE citation - topicClassValue Term A topic or subject term text 25 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE topicClassification citation - topicClassVocab Controlled Vocabulary Name The controlled vocabulary used for the keyword term (e.g. LCSH, MeSH) text 26 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE topicClassification citation - topicClassVocabURI Controlled Vocabulary URL The URL where one can access information about the term's controlled vocabulary https:// url 27 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE topicClassification citation - publication Related Publication The article or report that uses the data in the Dataset. The full list of related publications will be displayed on the metadata tab none 28 FALSE FALSE TRUE FALSE TRUE FALSE citation http://purl.org/dc/terms/isReferencedBy - publicationCitation Citation The full bibliographic citation for the related publication textbox 29 #VALUE TRUE FALSE FALSE FALSE TRUE FALSE publication citation http://purl.org/dc/terms/bibliographicCitation - publicationIDType Identifier Type The type of identifier that uniquely identifies a related publication text 30 #VALUE: TRUE TRUE FALSE FALSE TRUE FALSE publication citation http://purl.org/spar/datacite/ResourceIdentifierScheme - publicationIDNumber Identifier The identifier for a related publication text 31 #VALUE TRUE FALSE FALSE FALSE TRUE FALSE publication citation http://purl.org/spar/datacite/ResourceIdentifier - publicationURL URL The URL form of the identifier entered in the Identifier field, e.g. the DOI URL if a DOI was entered in the Identifier field. Used to display what was entered in the ID Type and ID Number fields as a link. If what was entered in the Identifier field has no URL form, the URL of the publication webpage is used, e.g. a journal article webpage https:// url 32 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE publication citation https://schema.org/distribution - notesText Notes Additional information about the Dataset textbox 33 FALSE FALSE FALSE FALSE TRUE FALSE citation - language Language A language that the Dataset's files is written in text 34 TRUE TRUE TRUE TRUE FALSE FALSE citation http://purl.org/dc/terms/language - producer Producer The entity, such a person or organization, managing the finances or other administrative processes involved in the creation of the Dataset none 35 FALSE FALSE TRUE FALSE FALSE FALSE citation - producerName Name The name of the entity, e.g. the person's name or the name of an organization 1) FamilyName, GivenName or 2) Organization text 36 #VALUE TRUE FALSE FALSE TRUE FALSE TRUE producer citation - producerAffiliation Affiliation The name of the entity affiliated with the producer, e.g. an organization's name Organization XYZ text 37 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE producer citation - producerAbbreviation Abbreviated Name The producer's abbreviated name (e.g. IQSS, ICPSR) text 38 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE producer citation - producerURL URL The URL of the producer's website https:// url 39 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE producer citation - producerLogoURL Logo URL The URL of the producer's logo https:// url 40
FALSE FALSE FALSE FALSE FALSE FALSE producer citation - productionDate Production Date The date when the data were produced (not distributed, published, or archived) YYYY-MM-DD date 41 TRUE FALSE FALSE TRUE FALSE FALSE citation - productionPlace Production Location The location where the data and any related materials were produced or collected text 42 FALSE FALSE FALSE FALSE FALSE FALSE citation - contributor Contributor The entity, such as a person or organization, responsible for collecting, managing, or otherwise contributing to the development of the Dataset none 43 : FALSE FALSE TRUE FALSE FALSE FALSE citation http://purl.org/dc/terms/contributor - contributorType Type Indicates the type of contribution made to the dataset text 44 #VALUE TRUE TRUE FALSE TRUE FALSE FALSE contributor citation - contributorName Name The name of the contributor, e.g. the person's name or the name of an organization 1) FamilyName, GivenName or 2) Organization text 45 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE contributor citation - grantNumber Funding Information Information about the Dataset's financial support none 46 : FALSE FALSE TRUE FALSE FALSE FALSE citation https://schema.org/sponsor - grantNumberAgency Agency The agency that provided financial support for the Dataset Organization XYZ text 47 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE grantNumber citation - grantNumberValue Identifier The grant identifier or contract identifier of the agency that provided financial support for the Dataset text 48 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE grantNumber citation - distributor Distributor The entity, such as a person or organization, designated to generate copies of the Dataset, including any editions or revisions none 49 FALSE FALSE TRUE FALSE FALSE FALSE citation - distributorName Name The name of the entity, e.g. the person's name or the name of an organization 1) FamilyName, GivenName or 2) Organization text 50 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE distributor citation - distributorAffiliation Affiliation The name of the entity affiliated with the distributor, e.g. an organization's name Organization XYZ text 51 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE distributor citation - distributorAbbreviation Abbreviated Name The distributor's abbreviated name (e.g. IQSS, ICPSR) text 52 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE distributor citation - distributorURL URL The URL of the distributor's webpage https:// url 53 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE distributor citation - distributorLogoURL Logo URL The URL of the distributor's logo image, used to show the image on the Dataset's page https:// url 54
FALSE FALSE FALSE FALSE FALSE FALSE distributor citation - distributionDate Distribution Date The date when the Dataset was made available for distribution/presentation YYYY-MM-DD date 55 TRUE FALSE FALSE TRUE FALSE FALSE citation - depositor Depositor The entity, such as a person or organization, that deposited the Dataset in the repository 1) FamilyName, GivenName or 2) Organization text 56 FALSE FALSE FALSE FALSE FALSE FALSE citation - dateOfDeposit Deposit Date The date when the Dataset was deposited into the repository YYYY-MM-DD date 57 FALSE FALSE FALSE TRUE FALSE FALSE citation http://purl.org/dc/terms/dateSubmitted - timePeriodCovered Time Period The time period that the data refer to. Also known as span. This is the time period covered by the data, not the dates of coding, collecting data, or making documents machine-readable none 58 ; FALSE FALSE TRUE FALSE FALSE FALSE citation https://schema.org/temporalCoverage - timePeriodCoveredStart Start Date The start date of the time period that the data refer to YYYY-MM-DD date 59 #NAME: #VALUE TRUE FALSE FALSE TRUE FALSE FALSE timePeriodCovered citation - timePeriodCoveredEnd End Date The end date of the time period that the data refer to YYYY-MM-DD date 60 #NAME: #VALUE TRUE FALSE FALSE TRUE FALSE FALSE timePeriodCovered citation - dateOfCollection Date of Collection The dates when the data were collected or generated none 61 ; FALSE FALSE TRUE FALSE FALSE FALSE citation - 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 - 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 - softwareName Name The name of software used to generate the Dataset text 69 #VALUE FALSE TRUE FALSE FALSE FALSE FALSE software citation - softwareVersion Version The version of the software used to generate the Dataset, e.g. 4.11 text 70 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE software citation - relatedMaterial Related Material Information, such as a persistent ID or citation, about the material related to the Dataset, such as appendices or sampling information available outside of the Dataset textbox 71 FALSE FALSE TRUE FALSE FALSE FALSE citation - relatedDatasets Related Dataset Information, such as a persistent ID or citation, about a related dataset, such as previous research on the Dataset's subject textbox 72 FALSE FALSE TRUE FALSE FALSE FALSE citation http://purl.org/dc/terms/relation - otherReferences Other Reference Information, such as a persistent ID or citation, about another type of resource that provides background or supporting material to the Dataset text 73 FALSE FALSE TRUE FALSE FALSE FALSE citation http://purl.org/dc/terms/references - dataSources Data Source Information, such as a persistent ID or citation, about sources of the Dataset (e.g. a book, article, serial, or machine-readable data file) textbox 74 FALSE FALSE TRUE FALSE FALSE FALSE citation https://www.w3.org/TR/prov-o/#wasDerivedFrom - originOfSources Origin of Historical Sources For historical sources, the origin and any rules followed in establishing them as sources textbox 75 FALSE FALSE FALSE FALSE FALSE FALSE citation - characteristicOfSources Characteristic of Sources Characteristics not already noted elsewhere textbox 76 FALSE FALSE FALSE FALSE FALSE FALSE citation - accessToSources Documentation and Access to Sources 1) Methods or procedures for accessing data sources and 2) any special permissions needed for access textbox 77 FALSE FALSE FALSE FALSE FALSE FALSE citation - #controlledVocabulary DatasetField Value identifier displayOrder - subject Agricultural Sciences D01 0 - subject Arts and Humanities D0 1 - subject Astronomy and Astrophysics D1 2 - subject Business and Management D2 3 - subject Chemistry D3 4 - subject Computer and Information Science D7 5 - subject Earth and Environmental Sciences D4 6 - subject Engineering D5 7 - subject Law D8 8 - subject Mathematical Sciences D9 9 - subject Medicine, Health and Life Sciences D6 10 - subject Physics D10 11 - subject Social Sciences D11 12 - subject Other D12 13 - publicationIDType ark 0 - publicationIDType arXiv 1 - publicationIDType bibcode 2 - publicationIDType doi 3 - publicationIDType ean13 4 - publicationIDType eissn 5 - publicationIDType handle 6 - publicationIDType isbn 7 - publicationIDType issn 8 - publicationIDType istc 9 - publicationIDType lissn 10 - publicationIDType lsid 11 - publicationIDType pmid 12 - publicationIDType purl 13 - publicationIDType upc 14 - publicationIDType url 15 - publicationIDType urn 16 - contributorType Data Collector 0 - contributorType Data Curator 1 - contributorType Data Manager 2 - contributorType Editor 3 - contributorType Funder 4 - contributorType Hosting Institution 5 - contributorType Project Leader 6 - contributorType Project Manager 7 - contributorType Project Member 8 - contributorType Related Person 9 - contributorType Researcher 10 - contributorType Research Group 11 - contributorType Rights Holder 12 - contributorType Sponsor 13 - contributorType Supervisor 14 - contributorType Work Package Leader 15 - contributorType Other 16 - authorIdentifierScheme ORCID 0 - authorIdentifierScheme ISNI 1 - authorIdentifierScheme LCNA 2 - authorIdentifierScheme VIAF 3 - authorIdentifierScheme GND 4 - authorIdentifierScheme DAI 5 - authorIdentifierScheme ResearcherID 6 - authorIdentifierScheme ScopusID 7 + title Title Full title by which the Dataset is known. Enter title... text 0 TRUE FALSE FALSE FALSE TRUE TRUE citation http://purl.org/dc/terms/title + subtitle Subtitle A secondary title used to amplify or state certain limitations on the main title. text 1 FALSE FALSE FALSE FALSE FALSE FALSE citation + alternativeTitle Alternative Title A title by which the work is commonly referred, or an abbreviation of the title. text 2 FALSE FALSE FALSE FALSE FALSE FALSE citation http://purl.org/dc/terms/alternative + alternativeURL Alternative URL A URL where the dataset can be viewed, such as a personal or project website. Enter full URL, starting with http:// url 3 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE citation https://schema.org/distribution + otherId Other ID Another unique identifier that identifies this Dataset (e.g., producer's or another repository's number). none 4 : FALSE FALSE TRUE FALSE FALSE FALSE citation + otherIdAgency Agency Name of agency which generated this identifier. text 5 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE otherId citation + otherIdValue Identifier Other identifier that corresponds to this Dataset. text 6 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE otherId citation + author Author The person(s), corporate body(ies), or agency(ies) responsible for creating the work. none 7 FALSE FALSE TRUE FALSE TRUE TRUE citation http://purl.org/dc/terms/creator + authorName Name The author's Family Name, Given Name or the name of the organization responsible for this Dataset. FamilyName, GivenName or Organization text 8 #VALUE TRUE FALSE FALSE TRUE TRUE TRUE author citation + authorAffiliation Affiliation The organization with which the author is affiliated. text 9 (#VALUE) TRUE FALSE FALSE TRUE TRUE FALSE author citation + authorIdentifierScheme Identifier Scheme Name of the identifier scheme (ORCID, ISNI). text 10 - #VALUE: FALSE TRUE FALSE FALSE TRUE FALSE author citation http://purl.org/spar/datacite/AgentIdentifierScheme + authorIdentifier Identifier Uniquely identifies an individual author or organization, according to various schemes. text 11 #VALUE FALSE FALSE FALSE FALSE TRUE FALSE author citation http://purl.org/spar/datacite/AgentIdentifier + datasetContact Contact The contact(s) for this Dataset. none 12 FALSE FALSE TRUE FALSE TRUE TRUE citation + datasetContactName Name The contact's Family Name, Given Name or the name of the organization. FamilyName, GivenName or Organization text 13 #VALUE FALSE FALSE FALSE FALSE TRUE FALSE datasetContact citation + datasetContactAffiliation Affiliation The organization with which the contact is affiliated. text 14 (#VALUE) FALSE FALSE FALSE FALSE TRUE FALSE datasetContact citation + datasetContactEmail E-mail The e-mail address(es) of the contact(s) for the Dataset. This will not be displayed. email 15 #EMAIL FALSE FALSE FALSE FALSE TRUE TRUE datasetContact citation + dsDescription Description A summary describing the purpose, nature, and scope of the Dataset. none 16 FALSE FALSE TRUE FALSE TRUE TRUE citation + dsDescriptionValue Text A summary describing the purpose, nature, and scope of the Dataset. textbox 17 #VALUE TRUE FALSE FALSE FALSE TRUE TRUE dsDescription citation + dsDescriptionDate Date In cases where a Dataset contains more than one description (for example, one might be supplied by the data producer and another prepared by the data repository where the data are deposited), the date attribute is used to distinguish between the two descriptions. The date attribute follows the ISO convention of YYYY-MM-DD. YYYY-MM-DD date 18 (#VALUE) FALSE FALSE FALSE FALSE TRUE FALSE dsDescription citation + subject Subject Domain-specific Subject Categories that are topically relevant to the Dataset. text 19 TRUE TRUE TRUE TRUE TRUE TRUE citation http://purl.org/dc/terms/subject + keyword Keyword Key terms that describe important aspects of the Dataset. none 20 FALSE FALSE TRUE FALSE TRUE FALSE citation + keywordValue Term Key terms that describe important aspects of the Dataset. Can be used for building keyword indexes and for classification and retrieval purposes. A controlled vocabulary can be employed. The vocab attribute is provided for specification of the controlled vocabulary in use, such as LCSH, MeSH, or others. The vocabURI attribute specifies the location for the full controlled vocabulary. text 21 #VALUE TRUE FALSE FALSE TRUE TRUE FALSE keyword citation + keywordVocabulary Vocabulary For the specification of the keyword controlled vocabulary in use, such as LCSH, MeSH, or others. text 22 (#VALUE) FALSE FALSE FALSE FALSE TRUE FALSE keyword citation + keywordVocabularyURI Vocabulary URL Keyword vocabulary URL points to the web presence that describes the keyword vocabulary, if appropriate. Enter an absolute URL where the keyword vocabulary web site is found, such as http://www.my.org. Enter full URL, starting with http:// url 23 #VALUE FALSE FALSE FALSE FALSE TRUE FALSE keyword citation + topicClassification Topic Classification The classification field indicates the broad important topic(s) and subjects that the data cover. Library of Congress subject terms may be used here. none 24 FALSE FALSE TRUE FALSE FALSE FALSE citation + topicClassValue Term Topic or Subject term that is relevant to this Dataset. text 25 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE topicClassification citation + topicClassVocab Vocabulary Provided for specification of the controlled vocabulary in use, e.g., LCSH, MeSH, etc. text 26 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE topicClassification citation + topicClassVocabURI Vocabulary URL Specifies the URL location for the full controlled vocabulary. Enter full URL, starting with http:// url 27 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE topicClassification citation + publication Related Publication Publications that use the data from this Dataset. The full list of Related Publications will be displayed on the metadata tab. none 28 FALSE FALSE TRUE FALSE TRUE FALSE citation http://purl.org/dc/terms/isReferencedBy + publicationCitation Citation The full bibliographic citation for this related publication. textbox 29 #VALUE TRUE FALSE FALSE FALSE TRUE FALSE publication citation http://purl.org/dc/terms/bibliographicCitation + publicationIDType ID Type The type of digital identifier used for this publication (e.g., Digital Object Identifier (DOI)). text 30 #VALUE: TRUE TRUE FALSE FALSE TRUE FALSE publication citation http://purl.org/spar/datacite/ResourceIdentifierScheme + publicationIDNumber ID Number The identifier for the selected ID type. text 31 #VALUE TRUE FALSE FALSE FALSE TRUE FALSE publication citation http://purl.org/spar/datacite/ResourceIdentifier + publicationURL URL Link to the publication web page (e.g., journal article page, archive record page, or other). Enter full URL, starting with http:// url 32 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE publication citation https://schema.org/distribution + notesText Notes Additional important information about the Dataset. textbox 33 FALSE FALSE FALSE FALSE TRUE FALSE citation + language Language Language of the Dataset text 34 TRUE TRUE TRUE TRUE FALSE FALSE citation http://purl.org/dc/terms/language + producer Producer Person or organization with the financial or administrative responsibility over this Dataset none 35 FALSE FALSE TRUE FALSE FALSE FALSE citation + producerName Name Producer name FamilyName, GivenName or Organization text 36 #VALUE TRUE FALSE FALSE TRUE FALSE TRUE producer citation + producerAffiliation Affiliation The organization with which the producer is affiliated. text 37 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE producer citation + producerAbbreviation Abbreviation The abbreviation by which the producer is commonly known. (ex. IQSS, ICPSR) text 38 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE producer citation + producerURL URL Producer URL points to the producer's web presence, if appropriate. Enter an absolute URL where the producer's web site is found, such as http://www.my.org. Enter full URL, starting with http:// url 39 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE producer citation + producerLogoURL Logo URL URL for the producer's logo, which points to this producer's web-accessible logo image. Enter an absolute URL where the producer's logo image is found, such as http://www.my.org/images/logo.gif. Enter full URL for image, starting with http:// url 40
FALSE FALSE FALSE FALSE FALSE FALSE producer citation + productionDate Production Date Date when the data collection or other materials were produced (not distributed, published or archived). YYYY-MM-DD date 41 TRUE FALSE FALSE TRUE FALSE FALSE citation + productionPlace Production Place The location where the data collection and any other related materials were produced. text 42 FALSE FALSE FALSE FALSE FALSE FALSE citation + contributor Contributor The organization or person responsible for either collecting, managing, or otherwise contributing in some form to the development of the resource. none 43 : FALSE FALSE TRUE FALSE FALSE FALSE citation http://purl.org/dc/terms/contributor + contributorType Type The type of contributor of the resource. text 44 #VALUE TRUE TRUE FALSE TRUE FALSE FALSE contributor citation + contributorName Name The Family Name, Given Name or organization name of the contributor. FamilyName, GivenName or Organization text 45 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE contributor citation + grantNumber Grant Information Grant Information none 46 : FALSE FALSE TRUE FALSE FALSE FALSE citation https://schema.org/sponsor + grantNumberAgency Grant Agency Grant Number Agency text 47 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE grantNumber citation + grantNumberValue Grant Number The grant or contract number of the project that sponsored the effort. text 48 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE grantNumber citation + distributor Distributor The organization designated by the author or producer to generate copies of the particular work including any necessary editions or revisions. none 49 FALSE FALSE TRUE FALSE FALSE FALSE citation + distributorName Name Distributor name FamilyName, GivenName or Organization text 50 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE distributor citation + distributorAffiliation Affiliation The organization with which the distributor contact is affiliated. text 51 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE distributor citation + distributorAbbreviation Abbreviation The abbreviation by which this distributor is commonly known (e.g., IQSS, ICPSR). text 52 (#VALUE) FALSE FALSE FALSE FALSE FALSE FALSE distributor citation + distributorURL URL Distributor URL points to the distributor's web presence, if appropriate. Enter an absolute URL where the distributor's web site is found, such as http://www.my.org. Enter full URL, starting with http:// url 53 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE distributor citation + distributorLogoURL Logo URL URL of the distributor's logo, which points to this distributor's web-accessible logo image. Enter an absolute URL where the distributor's logo image is found, such as http://www.my.org/images/logo.gif. Enter full URL for image, starting with http:// url 54
FALSE FALSE FALSE FALSE FALSE FALSE distributor citation + distributionDate Distribution Date Date that the work was made available for distribution/presentation. YYYY-MM-DD date 55 TRUE FALSE FALSE TRUE FALSE FALSE citation + depositor Depositor The person (Family Name, Given Name) or the name of the organization that deposited this Dataset to the repository. text 56 FALSE FALSE FALSE FALSE FALSE FALSE citation + dateOfDeposit Deposit Date Date that the Dataset was deposited into the repository. YYYY-MM-DD date 57 FALSE FALSE FALSE TRUE FALSE FALSE citation http://purl.org/dc/terms/dateSubmitted + timePeriodCovered Time Period Covered Time period to which the data refer. This item reflects the time period covered by the data, not the dates of coding or making documents machine-readable or the dates the data were collected. Also known as span. none 58 ; FALSE FALSE TRUE FALSE FALSE FALSE citation https://schema.org/temporalCoverage + timePeriodCoveredStart Start Start date which reflects the time period covered by the data, not the dates of coding or making documents machine-readable or the dates the data were collected. YYYY-MM-DD date 59 #NAME: #VALUE TRUE FALSE FALSE TRUE FALSE FALSE timePeriodCovered citation + timePeriodCoveredEnd End End date which reflects the time period covered by the data, not the dates of coding or making documents machine-readable or the dates the data were collected. YYYY-MM-DD date 60 #NAME: #VALUE TRUE FALSE FALSE TRUE FALSE FALSE timePeriodCovered citation + dateOfCollection Date of Collection Contains the date(s) when the data were collected. none 61 ; FALSE FALSE TRUE FALSE FALSE FALSE citation + dateOfCollectionStart Start Date when the data collection started. YYYY-MM-DD date 62 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE dateOfCollection citation + dateOfCollectionEnd End Date when the data collection ended. YYYY-MM-DD date 63 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE dateOfCollection citation + kindOfData Kind of Data Type of data included in the file: survey data, census/enumeration data, aggregate data, clinical data, event/transaction data, program source code, machine-readable text, administrative records data, experimental data, psychological test, textual data, coded textual, coded documents, time budget diaries, observation data/ratings, process-produced data, or other. text 64 TRUE FALSE TRUE TRUE FALSE FALSE citation http://rdf-vocabulary.ddialliance.org/discovery#kindOfData + series Series Information about the Dataset series. none 65 : FALSE FALSE FALSE FALSE FALSE FALSE citation + seriesName Name Name of the dataset series to which the Dataset belongs. text 66 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE series citation + seriesInformation Information History of the series and summary of those features that apply to the series as a whole. 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 + softwareName Name Name of software used to generate the Dataset. text 69 #VALUE FALSE TRUE FALSE FALSE FALSE FALSE software citation + softwareVersion Version Version of the software used to generate the Dataset. text 70 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE software citation + relatedMaterial Related Material Any material related to this Dataset. textbox 71 FALSE FALSE TRUE FALSE FALSE FALSE citation + relatedDatasets Related Datasets Any Datasets that are related to this Dataset, such as previous research on this subject. textbox 72 FALSE FALSE TRUE FALSE FALSE FALSE citation http://purl.org/dc/terms/relation + otherReferences Other References Any references that would serve as background or supporting material to this Dataset. text 73 FALSE FALSE TRUE FALSE FALSE FALSE citation http://purl.org/dc/terms/references + dataSources Data Sources List of books, articles, serials, or machine-readable data files that served as the sources of the data collection. textbox 74 FALSE FALSE TRUE FALSE FALSE FALSE citation https://www.w3.org/TR/prov-o/#wasDerivedFrom + originOfSources Origin of Sources For historical materials, information about the origin of the sources and the rules followed in establishing the sources should be specified. textbox 75 FALSE FALSE FALSE FALSE FALSE FALSE citation + characteristicOfSources Characteristic of Sources Noted Assessment of characteristics and source material. textbox 76 FALSE FALSE FALSE FALSE FALSE FALSE citation + accessToSources Documentation and Access to Sources Level of documentation of the original sources. textbox 77 FALSE FALSE FALSE FALSE FALSE FALSE citation +#controlledVocabulary DatasetField Value identifier displayOrder + subject Agricultural Sciences D01 0 + subject Arts and Humanities D0 1 + subject Astronomy and Astrophysics D1 2 + subject Business and Management D2 3 + subject Chemistry D3 4 + subject Computer and Information Science D7 5 + subject Earth and Environmental Sciences D4 6 + subject Engineering D5 7 + subject Law D8 8 + subject Mathematical Sciences D9 9 + subject Medicine, Health and Life Sciences D6 10 + subject Physics D10 11 + subject Social Sciences D11 12 + subject Other D12 13 + publicationIDType ark 0 + publicationIDType arXiv 1 + publicationIDType bibcode 2 + publicationIDType doi 3 + publicationIDType ean13 4 + publicationIDType eissn 5 + publicationIDType handle 6 + publicationIDType isbn 7 + publicationIDType issn 8 + publicationIDType istc 9 + publicationIDType lissn 10 + publicationIDType lsid 11 + publicationIDType pmid 12 + publicationIDType purl 13 + publicationIDType upc 14 + publicationIDType url 15 + publicationIDType urn 16 + contributorType Data Collector 0 + contributorType Data Curator 1 + contributorType Data Manager 2 + contributorType Editor 3 + contributorType Funder 4 + contributorType Hosting Institution 5 + contributorType Project Leader 6 + contributorType Project Manager 7 + contributorType Project Member 8 + contributorType Related Person 9 + contributorType Researcher 10 + contributorType Research Group 11 + contributorType Rights Holder 12 + contributorType Sponsor 13 + contributorType Supervisor 14 + contributorType Work Package Leader 15 + contributorType Other 16 + authorIdentifierScheme ORCID 0 + authorIdentifierScheme ISNI 1 + authorIdentifierScheme LCNA 2 + authorIdentifierScheme VIAF 3 + authorIdentifierScheme GND 4 + authorIdentifierScheme DAI 5 + authorIdentifierScheme ResearcherID 6 + authorIdentifierScheme ScopusID 7 language Abkhaz 0 language Afar 1 aar language Afrikaans 2 afr From 576a72395d09d00a9390195c1fd6d21fb563aa0f Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Wed, 30 Mar 2022 13:02:18 -0400 Subject: [PATCH 26/46] logging/comment updates per review --- .../java/edu/harvard/iq/dataverse/util/FileUtil.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java index 4b451d92a75..8d3d63da99d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/FileUtil.java @@ -1495,17 +1495,22 @@ public static boolean isRequestAccessPopupRequired(DatasetVersion datasetVersion return false; } + /* Code shared by isDownloadPopupRequired and isRequestAccessPopupRequired. + * + * Returns Boolean to allow null = no decision. This allows the isDownloadPopupRequired method to then add another check w.r.t. guestbooks before returning its value. + * + */ private static Boolean popupDueToStateOrTerms(DatasetVersion datasetVersion) { // Each of these conditions is sufficient reason to have to // present the user with the popup: if (datasetVersion == null) { - logger.fine("Popup required because datasetVersion is null."); + logger.fine("Popup not required because datasetVersion is null."); return false; } // 0. if version is draft then Popup "not required" if (!datasetVersion.isReleased()) { - logger.fine("Popup required because datasetVersion has not been released."); + logger.fine("Popup not required because datasetVersion has not been released."); return false; } // 1. License and Terms of Use: @@ -1513,7 +1518,7 @@ private static Boolean popupDueToStateOrTerms(DatasetVersion datasetVersion) { License license = datasetVersion.getTermsOfUseAndAccess().getLicense(); if ((license == null && StringUtils.isNotBlank(datasetVersion.getTermsOfUseAndAccess().getTermsOfUse())) || (license != null && !license.isDefault())) { - logger.fine("Download popup required because of license or terms of use."); + logger.fine("Popup required because of license or terms of use."); return true; } @@ -1523,6 +1528,7 @@ private static Boolean popupDueToStateOrTerms(DatasetVersion datasetVersion) { return true; } } + //No decision based on the criteria above return null; } From 3cfe06231ea0d26151a68c939bedaec2b8c5b406 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 30 Mar 2022 17:15:30 -0400 Subject: [PATCH 27/46] remove NONE as a license for SWORD, show available licenses #8551 --- .../source/api/sword-atom-entry.xml | 4 +- doc/sphinx-guides/source/api/sword.rst | 4 +- .../api/datadeposit/SwordServiceBean.java | 9 ++- .../edu/harvard/iq/dataverse/api/SwordIT.java | 63 +++++++++++++++++++ .../edu/harvard/iq/dataverse/api/UtilIT.java | 29 ++++++++- 5 files changed, 103 insertions(+), 6 deletions(-) diff --git a/doc/sphinx-guides/source/api/sword-atom-entry.xml b/doc/sphinx-guides/source/api/sword-atom-entry.xml index d47a3dd4f56..8d73653e93e 100755 --- a/doc/sphinx-guides/source/api/sword-atom-entry.xml +++ b/doc/sphinx-guides/source/api/sword-atom-entry.xml @@ -27,8 +27,8 @@ United States Canada - NONE - Downloader will not use the Materials in any way prohibited by applicable laws. + CC0 1.0 + Peets, J., & Stumptown, J. (2013). Roasting at Home. New England Journal of Coffee, 3(1), 22-34. diff --git a/doc/sphinx-guides/source/api/sword.rst b/doc/sphinx-guides/source/api/sword.rst index d853994f073..6c31dca4263 100755 --- a/doc/sphinx-guides/source/api/sword.rst +++ b/doc/sphinx-guides/source/api/sword.rst @@ -80,7 +80,7 @@ New features as of v1.1 - "Contributor" can now be populated and the "Type" (Editor, Funder, Researcher, etc.) can be specified with an XML attribute. For example: ``CaffeineForAll`` -- "License" can now be set with ``dcterms:license`` and the possible values are "CC0" and "NONE". "License" interacts with "Terms of Use" (``dcterms:rights``) in that if you include ``dcterms:rights`` in the XML, the license will be set to "NONE". If you don't include ``dcterms:rights``, the license will default to "CC0". It is invalid to specify "CC0" as a license and also include ``dcterms:rights``; an error will be returned. For backwards compatibility, ``dcterms:rights`` is allowed to be blank (i.e. ````) but blank values will not be persisted to the database and the license will be set to "NONE". +- "License" can now be set with ``dcterms:license`` and the possible values determined by the installation ("CC0 1.0" and "CC BY 4.0" by default). "License" interacts with "Terms of Use" (``dcterms:rights``) in that if you include ``dcterms:rights`` in the XML, the license will be "Custom Dataset Terms". If you don't include ``dcterms:rights``, the default license will be used. It is invalid to specify a license and also include ``dcterms:rights``; an error will be returned. For backwards compatibility, ``dcterms:rights`` is allowed to be blank (i.e. ````) but blank values will not be persisted to the database and the license will be set to "Custom Dataset Terms". - "Contact E-mail" is automatically populated from dataset owner's email. @@ -143,7 +143,7 @@ Dublin Core Terms (DC Terms) Qualified Mapping - Dataverse Project DB Element Cr +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ |dcterms:coverage | otherGeographicCoverage | | General information on the geographic coverage of the Dataset. | +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|dcterms:license | license | | Set the license to CC0 (default in a Dataverse installation for new Datasets), otherwise enter "NONE" and fill in the dcterms:rights field. | +|dcterms:license | license | | Set the license. Alternatively, use the dcterms:rights field instead. | +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ |dcterms:rights | termsofuse | | If not using CC0, enter any terms of use or restrictions for the Dataset. | +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java index 7e45381d410..7e7f17e58a5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java @@ -12,6 +12,7 @@ import edu.harvard.iq.dataverse.license.License; import edu.harvard.iq.dataverse.license.LicenseServiceBean; import edu.harvard.iq.dataverse.util.BundleUtil; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -186,7 +187,13 @@ public void setDatasetLicenseAndTermsOfUse(DatasetVersion datasetVersionToMutate setTermsOfUse(datasetVersionToMutate, dcterms, null); } else { License licenseToSet = licenseServiceBean.getByNameOrUri(licenseProvided); - if (licenseToSet == null) throw new SwordError("Couldn't find an active license with: " + licenseProvided); + if (licenseToSet == null) { + List licenses = new ArrayList<>(); + for (License license : licenseServiceBean.listAllActive()) { + licenses.add(license.getName()); + } + throw new SwordError("Couldn't find an active license with: " + licenseProvided + ". Valid licenses: " + licenses); + } terms.setLicense(licenseToSet); setTermsOfUse(datasetVersionToMutate, dcterms, licenseToSet); } diff --git a/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java b/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java index ea6709cb915..a77924f6114 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java @@ -5,6 +5,9 @@ import com.jayway.restassured.response.Response; import edu.harvard.iq.dataverse.GlobalId; import edu.harvard.iq.dataverse.api.datadeposit.SwordConfigurationImpl; +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; import java.util.List; import java.util.Map; @@ -638,6 +641,66 @@ public void testCreateDatasetPublishDestroy() { } + + @Test + public void testLicenses() { + + Response createUser = UtilIT.createRandomUser(); + String username = UtilIT.getUsernameFromResponse(createUser); + String apiToken = UtilIT.getApiTokenFromResponse(createUser); + + Response createDataverse = UtilIT.createRandomDataverse(apiToken); + createDataverse.prettyPrint(); + createDataverse.then().assertThat() + .statusCode(CREATED.getStatusCode()); + String dataverseAlias = UtilIT.getAliasFromResponse(createDataverse); + + String title = "License to Kill"; + String description = "Spies in 1989"; + String license = "NONE"; + Response failToCreateDataset1 = UtilIT.createDatasetViaSwordApi(dataverseAlias, title, description, license, apiToken); + failToCreateDataset1.prettyPrint(); + // As of 5.10 and PR #7920, you cannot pass NONE as a license. + failToCreateDataset1.then().assertThat() + .statusCode(BAD_REQUEST.getStatusCode()); + + String rights = "Call me"; + Response failToCreateDataset2 = UtilIT.createDatasetViaSwordApi(dataverseAlias, title, description, license, rights, apiToken); + failToCreateDataset2.prettyPrint(); + // You can't pass both license and rights + failToCreateDataset2.then().assertThat() + .statusCode(BAD_REQUEST.getStatusCode()); + + license = "CC0 1.0"; + Response createDataset = UtilIT.createDatasetViaSwordApi(dataverseAlias, title, description, license, apiToken); + createDataset.prettyPrint(); + createDataset.then().assertThat() + .statusCode(CREATED.getStatusCode()); + + } + + @Test + public void testXmlExampleInGuides() throws IOException { + + Response createUser = UtilIT.createRandomUser(); + String username = UtilIT.getUsernameFromResponse(createUser); + String apiToken = UtilIT.getApiTokenFromResponse(createUser); + + Response createDataverse = UtilIT.createRandomDataverse(apiToken); + createDataverse.prettyPrint(); + createDataverse.then().assertThat() + .statusCode(CREATED.getStatusCode()); + String dataverseAlias = UtilIT.getAliasFromResponse(createDataverse); + + File exampleFile = new File("doc/sphinx-guides/source/api/sword-atom-entry.xml"); + String xmlIn = new String(java.nio.file.Files.readAllBytes(Paths.get(exampleFile.getAbsolutePath()))); + Response createDataset = UtilIT.createDatasetViaSwordApiFromXML(dataverseAlias, xmlIn, apiToken); + createDataset.prettyPrint(); + createDataset.then().assertThat() + .statusCode(CREATED.getStatusCode()); + + } + /** * This test requires the root dataverse to have been published already. * diff --git a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java index 23672c45916..7b9b5f3b129 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java @@ -436,7 +436,18 @@ static Response createDatasetViaSwordApi(String dataverseToCreateDatasetIn, Stri return createDatasetViaSwordApiFromXML(dataverseToCreateDatasetIn, xmlIn, apiToken); } - private static Response createDatasetViaSwordApiFromXML(String dataverseToCreateDatasetIn, String xmlIn, String apiToken) { + static Response createDatasetViaSwordApi(String dataverseToCreateDatasetIn, String title, String description, String license, String apiToken) { + String nullRights = null; + String xmlIn = getDatasetXml(title, "Lastname, Firstname", description, license, nullRights); + return createDatasetViaSwordApiFromXML(dataverseToCreateDatasetIn, xmlIn, apiToken); + } + + static Response createDatasetViaSwordApi(String dataverseToCreateDatasetIn, String title, String description, String license, String rights, String apiToken) { + String xmlIn = getDatasetXml(title, "Lastname, Firstname", description, license, rights); + return createDatasetViaSwordApiFromXML(dataverseToCreateDatasetIn, xmlIn, apiToken); + } + + public static Response createDatasetViaSwordApiFromXML(String dataverseToCreateDatasetIn, String xmlIn, String apiToken) { Response createDatasetResponse = given() .auth().basic(apiToken, EMPTY_STRING) .body(xmlIn) @@ -534,11 +545,27 @@ static Response loadMetadataBlock(String apiToken, byte[] body) { } static private String getDatasetXml(String title, String author, String description) { + String nullLicense = null; + String nullRights = null; + return getDatasetXml(title, author, description, nullLicense, nullRights); + } + + static private String getDatasetXml(String title, String author, String description, String license, String rights) { + String optionalLicense = ""; + if (license != null) { + optionalLicense = " " + license + "\n"; + } + String optionalRights = ""; + if (rights != null) { + optionalRights = " " + rights + "\n"; + } String xmlIn = "\n" + "\n" + " " + title + "\n" + " " + author + "\n" + " " + description + "\n" + + optionalLicense + + optionalRights + "\n" + ""; return xmlIn; From 66eabc06e30139590ac1aaeecc4faa73f98055f1 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 31 Mar 2022 11:34:13 -0400 Subject: [PATCH 28/46] report error if license is inactive #8551 --- .../harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java index 7e7f17e58a5..0ccd451946e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java @@ -187,7 +187,7 @@ public void setDatasetLicenseAndTermsOfUse(DatasetVersion datasetVersionToMutate setTermsOfUse(datasetVersionToMutate, dcterms, null); } else { License licenseToSet = licenseServiceBean.getByNameOrUri(licenseProvided); - if (licenseToSet == null) { + if (licenseToSet == null || !licenseToSet.isActive()) { List licenses = new ArrayList<>(); for (License license : licenseServiceBean.listAllActive()) { licenses.add(license.getName()); From a97e788562105080c35842b1449454b86d6b6091 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 31 Mar 2022 11:37:00 -0400 Subject: [PATCH 29/46] add assertions on licenses and terms of use #8551 --- .../edu/harvard/iq/dataverse/api/SwordIT.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java b/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java index a77924f6114..29173d3bd76 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/SwordIT.java @@ -198,6 +198,13 @@ public void testCreateDataverseCreateDatasetUploadFileDownloadFileEditTitle() { String persistentId = UtilIT.getDatasetPersistentIdFromSwordResponse(createDatasetResponse); logger.info("persistent id: " + persistentId); + Response getJson = UtilIT.nativeGetUsingPersistentId(persistentId, apiToken); + getJson.prettyPrint(); + getJson.then().assertThat() + .statusCode(OK.getStatusCode()) + .body("data.latestVersion.license.name", equalTo("CC0 1.0")) + .body("data.latestVersion.license.uri", equalTo("http://creativecommons.org/publicdomain/zero/1.0")); + Response atomEntryUnAuth = UtilIT.getSwordAtomEntry(persistentId, apiTokenNoPrivs); atomEntryUnAuth.prettyPrint(); atomEntryUnAuth.then().assertThat() @@ -677,6 +684,47 @@ public void testLicenses() { createDataset.then().assertThat() .statusCode(CREATED.getStatusCode()); + String persistentId = UtilIT.getDatasetPersistentIdFromSwordResponse(createDataset); + + Response getJson = UtilIT.nativeGetUsingPersistentId(persistentId, apiToken); + getJson.prettyPrint(); + getJson.then().assertThat() + .statusCode(OK.getStatusCode()) + .body("data.latestVersion.license.name", equalTo("CC0 1.0")) + .body("data.latestVersion.license.uri", equalTo("http://creativecommons.org/publicdomain/zero/1.0")) + .body("data.latestVersion.termsOfUse", equalTo(null)); + } + + @Test + public void testCustomTerms() { + + Response createUser = UtilIT.createRandomUser(); + String username = UtilIT.getUsernameFromResponse(createUser); + String apiToken = UtilIT.getApiTokenFromResponse(createUser); + + Response createDataverse = UtilIT.createRandomDataverse(apiToken); + createDataverse.prettyPrint(); + createDataverse.then().assertThat() + .statusCode(CREATED.getStatusCode()); + String dataverseAlias = UtilIT.getAliasFromResponse(createDataverse); + + String title = "Terms of Endearment"; + String description = "Aurora, etc."; + String license = null; + String rights = "Call me"; + Response createDataset = UtilIT.createDatasetViaSwordApi(dataverseAlias, title, description, license, rights, apiToken); + createDataset.prettyPrint(); + createDataset.then().assertThat() + .statusCode(CREATED.getStatusCode()); + + String persistentId = UtilIT.getDatasetPersistentIdFromSwordResponse(createDataset); + + Response getJson = UtilIT.nativeGetUsingPersistentId(persistentId, apiToken); + getJson.prettyPrint(); + getJson.then().assertThat() + .statusCode(OK.getStatusCode()) + .body("data.latestVersion.termsOfUse", equalTo("Call me")) + .body("data.latestVersion.license", equalTo(null)); } @Test From b3724f070db3a7d606e63751774127b054fa845f Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 31 Mar 2022 11:37:33 -0400 Subject: [PATCH 30/46] explain NONE is no longer supported, remove CC0 mention #8551 --- doc/sphinx-guides/source/api/sword.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/api/sword.rst b/doc/sphinx-guides/source/api/sword.rst index 6c31dca4263..106741e4b47 100755 --- a/doc/sphinx-guides/source/api/sword.rst +++ b/doc/sphinx-guides/source/api/sword.rst @@ -65,6 +65,8 @@ Differences in Dataverse Software 4 from DVN 3.x lead to a few minor backward in - The Service Document will show a single API Terms of Use rather than root level and Dataverse collection level Deposit Terms of Use. +- As of Dataverse Software 5.10, ``NONE`` is no longer supported as a license. + New features as of v1.1 ----------------------- @@ -145,7 +147,7 @@ Dublin Core Terms (DC Terms) Qualified Mapping - Dataverse Project DB Element Cr +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ |dcterms:license | license | | Set the license. Alternatively, use the dcterms:rights field instead. | +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ -|dcterms:rights | termsofuse | | If not using CC0, enter any terms of use or restrictions for the Dataset. | +|dcterms:rights | termsofuse | | If not using dcterms:license, enter any terms of use or restrictions for the Dataset. | +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ |dcterms:isReferencedBy | publicationCitation | | The publication (journal article, book, other work) that uses this dataset (include citation, permanent identifier (DOI), and permanent URL). | +-----------------------------+----------------------------------------------+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ From 6c6f842954bd3a5dce5c138af0c2a86c43502813 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 31 Mar 2022 11:41:26 -0400 Subject: [PATCH 31/46] add release note #8551 --- doc/release-notes/8551-sword-license.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/release-notes/8551-sword-license.md diff --git a/doc/release-notes/8551-sword-license.md b/doc/release-notes/8551-sword-license.md new file mode 100644 index 00000000000..90b7180ac77 --- /dev/null +++ b/doc/release-notes/8551-sword-license.md @@ -0,0 +1 @@ +As of Dataverse 5.10, "NONE" is no longer supported as a valid license when creating a dataset using the SWORD API. The API Guide has been updated to reflect this. Additionally, if you specify an invalid license, a list of available licenses will be returned in the response. From 7517c78f255b2937c24624330a97394a5db179c2 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 31 Mar 2022 11:44:55 -0400 Subject: [PATCH 32/46] clarify how to set "Terms of Use" #8551 --- doc/sphinx-guides/source/api/sword.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/api/sword.rst b/doc/sphinx-guides/source/api/sword.rst index 106741e4b47..d4f56ddb5b4 100755 --- a/doc/sphinx-guides/source/api/sword.rst +++ b/doc/sphinx-guides/source/api/sword.rst @@ -82,7 +82,7 @@ New features as of v1.1 - "Contributor" can now be populated and the "Type" (Editor, Funder, Researcher, etc.) can be specified with an XML attribute. For example: ``CaffeineForAll`` -- "License" can now be set with ``dcterms:license`` and the possible values determined by the installation ("CC0 1.0" and "CC BY 4.0" by default). "License" interacts with "Terms of Use" (``dcterms:rights``) in that if you include ``dcterms:rights`` in the XML, the license will be "Custom Dataset Terms". If you don't include ``dcterms:rights``, the default license will be used. It is invalid to specify a license and also include ``dcterms:rights``; an error will be returned. For backwards compatibility, ``dcterms:rights`` is allowed to be blank (i.e. ````) but blank values will not be persisted to the database and the license will be set to "Custom Dataset Terms". +- "License" can now be set with ``dcterms:license`` and the possible values determined by the installation ("CC0 1.0" and "CC BY 4.0" by default). "License" interacts with "Terms of Use" (``dcterms:rights``) in that if you include ``dcterms:rights`` in the XML and don't include ``dcterms:license``, the license will be "Custom Dataset Terms" and "Terms of Use" will be populated. If you don't include ``dcterms:rights``, the default license will be used. It is invalid to specify a license and also include ``dcterms:rights``; an error will be returned. For backwards compatibility, ``dcterms:rights`` is allowed to be blank (i.e. ````) but blank values will not be persisted to the database and the license will be set to "Custom Dataset Terms". - "Contact E-mail" is automatically populated from dataset owner's email. From 289143d380a0e85c43b9fb88a18f1517a3da4dd6 Mon Sep 17 00:00:00 2001 From: Kevin Condon Date: Thu, 31 Mar 2022 14:41:26 -0400 Subject: [PATCH 33/46] Update structure.css Fix missing padding for footer. --- src/main/webapp/resources/css/structure.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/resources/css/structure.css b/src/main/webapp/resources/css/structure.css index fefcfeb8e74..a2c0f79e4fb 100644 --- a/src/main/webapp/resources/css/structure.css +++ b/src/main/webapp/resources/css/structure.css @@ -49,7 +49,7 @@ body .ui-widget {font-size: inherit;} #status-alert {margin-top:0; margin-bottom:0;} #status-alert div.alert {border:0; box-shadow:none;} -#footer {position:absolute; bottom:0; width:100%; height:60px; padding-bottom:100px; color:#767676;} +footer {position:absolute; bottom:0; width:100%; height:60px; padding-bottom:100px; color:#767676;} #dvfooter.widget-view {position:fixed; left:0; bottom:0; margin:0; padding:4px 0 0 0; min-height:44p; height:auto; background:#fff;} #dvfooter .poweredbylogo {text-align:right;} #dvfooter .poweredbylogo span {font-size:.85em;margin-right:.3em;} @@ -1114,4 +1114,4 @@ span.label-default { background-color: #757575 } .dropdown-header { color:#757575 } .login-container h1 { font-size:30px; } -#embargoInputs label { font-weight: normal; } \ No newline at end of file +#embargoInputs label { font-weight: normal; } From d3e4b8fbafe948bf62f3c30ae781b2ecc69748c9 Mon Sep 17 00:00:00 2001 From: Kris Dekeyser Date: Fri, 1 Apr 2022 09:00:15 +0200 Subject: [PATCH 34/46] Fix sorting order of licenses by id with default license at the top --- src/main/java/edu/harvard/iq/dataverse/license/License.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/license/License.java b/src/main/java/edu/harvard/iq/dataverse/license/License.java index a51214837e2..96baacc6731 100644 --- a/src/main/java/edu/harvard/iq/dataverse/license/License.java +++ b/src/main/java/edu/harvard/iq/dataverse/license/License.java @@ -23,9 +23,9 @@ */ @NamedQueries({ @NamedQuery( name="License.findAll", - query="SELECT l FROM License l"), + query="SELECT l FROM License l ORDER BY (case when l.isDefault then 0 else 1 end), l.id asc"), @NamedQuery( name="License.findAllActive", - query="SELECT l FROM License l WHERE l.active='true'"), + query="SELECT l FROM License l WHERE l.active='true' ORDER BY (case when l.isDefault then 0 else 1 end), l.id asc"), @NamedQuery( name="License.findById", query = "SELECT l FROM License l WHERE l.id=:id"), @NamedQuery( name="License.findDefault", From 696c0c85fb5cb5e637bb3b5eb337db68aa8c8531 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Mon, 4 Apr 2022 15:13:02 -0400 Subject: [PATCH 35/46] add 5.10.1 release notes #8570 --- doc/release-notes/5.10.1-release-notes.md | 95 +++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 doc/release-notes/5.10.1-release-notes.md diff --git a/doc/release-notes/5.10.1-release-notes.md b/doc/release-notes/5.10.1-release-notes.md new file mode 100644 index 00000000000..ff63ceb9493 --- /dev/null +++ b/doc/release-notes/5.10.1-release-notes.md @@ -0,0 +1,95 @@ +# Dataverse Software 5.10.1 + +This release brings new features, enhancements, and bug fixes to the Dataverse Software. Thank you to all of the community members who contributed code, suggestions, bug reports, and other assistance across the project. + +## Release Highlights + +### Bug Fix for Request Access + +Dataverse Software 5.10 contains a bug where the "Request Access" button doesn't work from the file listing on the dataset page if the dataset contains custom terms. This has been fixed in PR #8555. + +### Bug Fix for Searching and Selecting Controlled Vocabulary Values + +Dataverse Software 5.10 contains a bug where the search option is no longer present when selecting from more than ten controlled vocabulary values. This has been fixed in PR #8521 + +## Major Use Cases and Infrastructure Enhancements + +Changes and fixes in this release include: + +- Users can use the "Request Access" button when the dataset has custom terms. (Issue #8553, PR #8555) +- Users can search when selecting from more than ten controlled vocabulary values. (Issue #8519, PR #8521) +- The default file categories ("Documentation", "Data", and "Code") can be redefined through the `:FileCategories` database setting. (Issue #8461, PR #8478) +- Documentation on troubleshooting Excel ingest errors was improved. (PR #8541) +- Internationalized controlled vocabulary values can now be searched. (Issue #8286, PR #8435) +- Curation labels can be internationalized. (Issue #8381, PR #8466) + +## Notes for Dataverse Installation Administrators + +### PostgreSQL Version 10+ Required Soon + +Because 5.10.1 is a bug fix release, an upgrade to PostgreSQL is not required. However, this upgrade is still coming in the next non-bug fix release. For details, please see the release notes for 5.10: https://github.com/IQSS/dataverse/releases/tag/v5.10 + +### Payara Upgrade + +You may notice that Payara was updated from 5.2021.5 to 5.2021.6. This was to address a bug where it was not possible to easily update the logging level but an upgrade is not strictly necessary. For more information, see PR #8508. + +## New JVM Options and DB Settings + +The following DB settings have been added: + +- `:FileCategories` - The default list of the pre-defined file categories ("Documentation", "Data" and "Code") can now be redefined with a comma-separated list (e.g. `'Docs,Data,Code,Workflow'`). + +See the [Database Settings](https://guides.dataverse.org/en/5.10.1/installation/config.html#database-settings) section of the Guides for more information. + +## Notes for Developers and Integrators + +In the "Backward Incompatibilities" section below, note changes in the API regarding licenses and the SWORD API. + +## Backward Incompatibilities + +As of Dataverse Software 5.10 "NONE" is no longer accepted as a license using the SWORD API. This has been noted in #8551. + +## Complete List of Changes + +For the complete list of code changes in this release, see the [5.10.1 Milestone](https://github.com/IQSS/dataverse/milestone/102?closed=1) in Github. + +For help with upgrading, installing, or general questions please post to the [Dataverse Community Google Group](https://groups.google.com/forum/#!forum/dataverse-community) or email support@dataverse.org. + +## Installation + +If this is a new installation, please see our [Installation Guide](https://guides.dataverse.org/en/5.10.1/installation/). Please also contact us to get added to the [Dataverse Project Map](https://guides.dataverse.org/en/5.10.1/installation/config.html#putting-your-dataverse-installation-on-the-map-at-dataverse-org) if you have not done so already. + +## Upgrade Instructions + +0\. These instructions assume that you've already successfully upgraded from Dataverse Software 4.x to Dataverse Software 5 following the instructions in the [Dataverse Software 5 Release Notes](https://github.com/IQSS/dataverse/releases/tag/v5.0). After upgrading from the 4.x series to 5.0, you should progress through the other 5.x releases before attempting the upgrade to 5.10.1. + +If you are running Payara as a non-root user (and you should be!), **remember not to execute the commands below as root**. Use `sudo` to change to that user first. For example, `sudo -i -u dataverse` if `dataverse` is your dedicated application user. + +In the following commands we assume that Payara 5 is installed in `/usr/local/payara5`. If not, adjust as needed. + +`export PAYARA=/usr/local/payara5` + +(or `setenv PAYARA /usr/local/payara5` if you are using a `csh`-like shell) + +1\. Undeploy the previous version. + +- `$PAYARA/bin/asadmin list-applications` +- `$PAYARA/bin/asadmin undeploy dataverse<-version>` + +2\. Stop Payara and remove the generated directory + +- `service payara stop` +- `rm -rf $PAYARA/glassfish/domains/domain1/generated` + +3\. Start Payara + +- `service payara start` + +4\. Deploy this version. + +- `$PAYARA/bin/asadmin deploy dataverse-5.10.1.war` + +5\. Restart payara + +- `service payara stop` +- `service payara start` From e15d4f3d6b46f7f071bd8efd7fafc3819d42b46c Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Mon, 4 Apr 2022 15:13:49 -0400 Subject: [PATCH 36/46] delete issue-specific 5.10 release notes #8570 --- doc/release-notes/8461-filecategories-config.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 doc/release-notes/8461-filecategories-config.md diff --git a/doc/release-notes/8461-filecategories-config.md b/doc/release-notes/8461-filecategories-config.md deleted file mode 100644 index 11275269a81..00000000000 --- a/doc/release-notes/8461-filecategories-config.md +++ /dev/null @@ -1,3 +0,0 @@ -### The default file categories are now configurable - -The default list of the pre-defined file categories - "Documentation", "Data" and "Code" - can now be redefined via a database setting `:FileCategories`. Consult the [Database Settings](https://guides.dataverse.org/en/latest/installation/config.html) section of the Guides for more information. From 405c33acf118d527bfdf3ef65d45b6ab02a9edad Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Mon, 4 Apr 2022 15:15:36 -0400 Subject: [PATCH 37/46] whoops, kill issue-specific notes from last release (5.10) #8570 --- doc/release-notes/8210-importddi-fix.md | 1 - doc/release-notes/8452-multiple-collectionmode.md | 12 ------------ 2 files changed, 13 deletions(-) delete mode 100644 doc/release-notes/8210-importddi-fix.md delete mode 100644 doc/release-notes/8452-multiple-collectionmode.md diff --git a/doc/release-notes/8210-importddi-fix.md b/doc/release-notes/8210-importddi-fix.md deleted file mode 100644 index 98981263e58..00000000000 --- a/doc/release-notes/8210-importddi-fix.md +++ /dev/null @@ -1 +0,0 @@ -importddi API subject validation problem was fixed by filling subject with "N/A". diff --git a/doc/release-notes/8452-multiple-collectionmode.md b/doc/release-notes/8452-multiple-collectionmode.md deleted file mode 100644 index b367b9230cd..00000000000 --- a/doc/release-notes/8452-multiple-collectionmode.md +++ /dev/null @@ -1,12 +0,0 @@ -### A small modification to the Social Science metadata block - -The metadata block update allows the field "collectionMode" to have multiple values. - -For the upgrade instruction: - -Update the Social Science metadata block as follows: - -- `wget https://github.com/IQSS/dataverse/releases/download/v5.10/social_science.tsv` -- `curl http://localhost:8080/api/admin/datasetfield/load -X POST --data-binary @social_science.tsv -H "Content-type: text/tab-separated-values"` - -As a general reminder, please note that it is important to keep your metadata block definitions up-to-date. \ No newline at end of file From 09e1c60334c776def406ee8a7858be2857a6f572 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 5 Apr 2022 12:31:51 -0400 Subject: [PATCH 38/46] remove "A Custom License can be used instead." #8551 --- .../harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java index 0ccd451946e..1468b50fdfb 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java @@ -211,7 +211,7 @@ private void setTermsOfUse(DatasetVersion datasetVersionToMutate, Map 0) { - throw new SwordError("Terms of Use (dcterms:rights) can not be specified in combination with a license. A Custom License can be used instead."); + throw new SwordError("Terms of Use (dcterms:rights) can not be specified in combination with a license."); } } else { if (numRightsProvided != 1) { From 3622427be0a46cf1744102c5e98f6dba4ab70356 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 5 Apr 2022 12:55:28 -0400 Subject: [PATCH 39/46] s/can not/cannot/ #8551 --- .../harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java index 1468b50fdfb..46c38e04153 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/datadeposit/SwordServiceBean.java @@ -211,7 +211,7 @@ private void setTermsOfUse(DatasetVersion datasetVersionToMutate, Map 0) { - throw new SwordError("Terms of Use (dcterms:rights) can not be specified in combination with a license."); + throw new SwordError("Terms of Use (dcterms:rights) cannot be specified in combination with a license."); } } else { if (numRightsProvided != 1) { From 8bd1c5b6bd127cdb89377ecd3d7e4b22684c49c0 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 5 Apr 2022 15:55:37 -0400 Subject: [PATCH 40/46] reword SWORD note and link to PR #8570 --- doc/release-notes/5.10.1-release-notes.md | 3 ++- doc/release-notes/8551-sword-license.md | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 doc/release-notes/8551-sword-license.md diff --git a/doc/release-notes/5.10.1-release-notes.md b/doc/release-notes/5.10.1-release-notes.md index ff63ceb9493..4bc4c7331d1 100644 --- a/doc/release-notes/5.10.1-release-notes.md +++ b/doc/release-notes/5.10.1-release-notes.md @@ -22,6 +22,7 @@ Changes and fixes in this release include: - Documentation on troubleshooting Excel ingest errors was improved. (PR #8541) - Internationalized controlled vocabulary values can now be searched. (Issue #8286, PR #8435) - Curation labels can be internationalized. (Issue #8381, PR #8466) +- "NONE" is no longer accepted as a license using the SWORD API (since 5.10). See "Backward Incompatibilities" below for details. (Issue #8551, PR #8558). ## Notes for Dataverse Installation Administrators @@ -47,7 +48,7 @@ In the "Backward Incompatibilities" section below, note changes in the API regar ## Backward Incompatibilities -As of Dataverse Software 5.10 "NONE" is no longer accepted as a license using the SWORD API. This has been noted in #8551. +As of Dataverse 5.10, "NONE" is no longer supported as a valid license when creating a dataset using the SWORD API. The API Guide has been updated to reflect this. Additionally, if you specify an invalid license, a list of available licenses will be returned in the response. ## Complete List of Changes diff --git a/doc/release-notes/8551-sword-license.md b/doc/release-notes/8551-sword-license.md deleted file mode 100644 index 90b7180ac77..00000000000 --- a/doc/release-notes/8551-sword-license.md +++ /dev/null @@ -1 +0,0 @@ -As of Dataverse 5.10, "NONE" is no longer supported as a valid license when creating a dataset using the SWORD API. The API Guide has been updated to reflect this. Additionally, if you specify an invalid license, a list of available licenses will be returned in the response. From 0d1687e751b50697fae960dcb4d301422f7d9c74 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Tue, 5 Apr 2022 17:18:33 -0400 Subject: [PATCH 41/46] better Payara note #8570 --- doc/release-notes/5.10.1-release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/release-notes/5.10.1-release-notes.md b/doc/release-notes/5.10.1-release-notes.md index 4bc4c7331d1..598595e28a3 100644 --- a/doc/release-notes/5.10.1-release-notes.md +++ b/doc/release-notes/5.10.1-release-notes.md @@ -32,7 +32,7 @@ Because 5.10.1 is a bug fix release, an upgrade to PostgreSQL is not required. H ### Payara Upgrade -You may notice that Payara was updated from 5.2021.5 to 5.2021.6. This was to address a bug where it was not possible to easily update the logging level but an upgrade is not strictly necessary. For more information, see PR #8508. +You may notice that the Payara version used in the install scripts has been updated from 5.2021.5 to 5.2021.6. This was to address a bug where it was not possible to easily update the logging level. For existing installations, this release does not require upgrading Payara and a Payara upgrade is not part of the Upgrade Instructions below. For more information, see PR #8508. ## New JVM Options and DB Settings From 5647a7cace7401524751d1b52dba66592053fc42 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Wed, 6 Apr 2022 09:48:22 -0400 Subject: [PATCH 42/46] add missing period #8570 --- doc/release-notes/5.10.1-release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/release-notes/5.10.1-release-notes.md b/doc/release-notes/5.10.1-release-notes.md index 598595e28a3..a7f2250dac9 100644 --- a/doc/release-notes/5.10.1-release-notes.md +++ b/doc/release-notes/5.10.1-release-notes.md @@ -10,7 +10,7 @@ Dataverse Software 5.10 contains a bug where the "Request Access" button doesn't ### Bug Fix for Searching and Selecting Controlled Vocabulary Values -Dataverse Software 5.10 contains a bug where the search option is no longer present when selecting from more than ten controlled vocabulary values. This has been fixed in PR #8521 +Dataverse Software 5.10 contains a bug where the search option is no longer present when selecting from more than ten controlled vocabulary values. This has been fixed in PR #8521. ## Major Use Cases and Infrastructure Enhancements From 3943aa034c3a8ebd8ef223700e521d11bc9bd46e Mon Sep 17 00:00:00 2001 From: Kevin Condon Date: Wed, 6 Apr 2022 11:51:00 -0400 Subject: [PATCH 43/46] Update pom.xml Updating version to v5.10.1 --- modules/dataverse-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/dataverse-parent/pom.xml b/modules/dataverse-parent/pom.xml index 978567f4ebd..ab5a915e7e9 100644 --- a/modules/dataverse-parent/pom.xml +++ b/modules/dataverse-parent/pom.xml @@ -129,7 +129,7 @@ - 5.10 + 5.10.1 11 UTF-8 From 18fd296b29d44ebac4921b652eecdc15dc6824c0 Mon Sep 17 00:00:00 2001 From: Kevin Condon Date: Wed, 6 Apr 2022 11:51:44 -0400 Subject: [PATCH 44/46] Update conf.py Update version to v5.10.1 --- doc/sphinx-guides/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/sphinx-guides/source/conf.py b/doc/sphinx-guides/source/conf.py index 2d08c687467..748c797bbab 100755 --- a/doc/sphinx-guides/source/conf.py +++ b/doc/sphinx-guides/source/conf.py @@ -65,9 +65,9 @@ # built documents. # # The short X.Y version. -version = '5.10' +version = '5.10.1' # The full version, including alpha/beta/rc tags. -release = '5.10' +release = '5.10.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. From 0511245dc3fc1c197dc520fb76144d9846f351a5 Mon Sep 17 00:00:00 2001 From: Kevin Condon Date: Wed, 6 Apr 2022 11:58:12 -0400 Subject: [PATCH 45/46] Update versions.rst Update version to v5.10.1 --- doc/sphinx-guides/source/versions.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/versions.rst b/doc/sphinx-guides/source/versions.rst index ddbc4d7957c..21b4ac9d6f4 100755 --- a/doc/sphinx-guides/source/versions.rst +++ b/doc/sphinx-guides/source/versions.rst @@ -6,8 +6,9 @@ Dataverse Software Documentation Versions This list provides a way to refer to the documentation for previous versions of the Dataverse Software. In order to learn more about the updates delivered from one version to another, visit the `Releases `__ page in our GitHub repo. -- 5.10 +- 5.10.1 +- `5.10 `__ - `5.9 `__ - `5.8 `__ - `5.7 `__ From 1740acdc3a687d9f1a1f0f0ca4d676d61d98e76a Mon Sep 17 00:00:00 2001 From: Patrick Carlson Date: Fri, 25 Mar 2022 10:17:35 -0600 Subject: [PATCH 46/46] rev Maven from 3.8.4 to 3.8.5 --- conf/docker-aio/1prep.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conf/docker-aio/1prep.sh b/conf/docker-aio/1prep.sh index 0cdcf668374..508d41d93ff 100755 --- a/conf/docker-aio/1prep.sh +++ b/conf/docker-aio/1prep.sh @@ -12,10 +12,10 @@ cd ../../ cp -r scripts conf/docker-aio/testdata/ cp doc/sphinx-guides/source/_static/util/createsequence.sql conf/docker-aio/testdata/doc/sphinx-guides/source/_static/util/ -wget -q https://downloads.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz -tar xfz apache-maven-3.8.4-bin.tar.gz +wget -q https://downloads.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz +tar xfz apache-maven-3.8.5-bin.tar.gz mkdir maven -mv apache-maven-3.8.4/* maven/ +mv apache-maven-3.8.5/* maven/ echo "export JAVA_HOME=/usr/lib/jvm/jre-openjdk" > maven/maven.sh echo "export M2_HOME=../maven" >> maven/maven.sh echo "export MAVEN_HOME=../maven" >> maven/maven.sh