From 4764b8e5501e0ba1b4c5bf791e2dfc7533bc52fd Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 15 Feb 2022 15:19:19 -0500 Subject: [PATCH 01/25] read metadatalanauge if sent, set if exists and is allowed not sent - use default not allowed - throw exception to return bad request --- .../edu/harvard/iq/dataverse/util/json/JsonParser.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java index 4930d0a4e7b..5a49c56acbf 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java @@ -301,7 +301,13 @@ public Dataset parseDataset(JsonObject obj) throws JsonParseException { dataset.setAuthority(obj.getString("authority", null) == null ? settingsService.getValueForKey(SettingsServiceBean.Key.Authority) : obj.getString("authority")); dataset.setProtocol(obj.getString("protocol", null) == null ? settingsService.getValueForKey(SettingsServiceBean.Key.Protocol) : obj.getString("protocol")); dataset.setIdentifier(obj.getString("identifier",null)); - + String mdl = obj.getString("metadatalanguage",null); + if(mdl==null || settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(mdl)) { + dataset.setMetadataLanguage(mdl); + }else { + throw new JsonParseException("Specified metadatalangauge not allowed."); + } + DatasetVersion dsv = new DatasetVersion(); dsv.setDataset(dataset); dsv = parseDatasetVersion(obj.getJsonObject("datasetVersion"), dsv); From 212c824079b31cb68ef3bbe69dc55d2fee0e6773 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 15 Feb 2022 15:40:27 -0500 Subject: [PATCH 02/25] add metadata language as schema.org/inLanguage for import/export --- .../edu/harvard/iq/dataverse/api/Dataverses.java | 12 +++++++++++- .../edu/harvard/iq/dataverse/util/bagit/OREMap.java | 5 ++++- .../harvard/iq/dataverse/util/json/JSONLDUtil.java | 3 +++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index 0a4c76a54e3..a9c706996a7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -66,6 +66,7 @@ import static edu.harvard.iq.dataverse.util.StringUtil.nonEmpty; import edu.harvard.iq.dataverse.util.json.JSONLDUtil; +import edu.harvard.iq.dataverse.util.json.JsonLDTerm; import edu.harvard.iq.dataverse.util.json.JsonParseException; import static edu.harvard.iq.dataverse.util.json.JsonPrinter.brief; import java.io.StringReader; @@ -110,6 +111,7 @@ import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.Map; import java.util.Optional; import javax.servlet.http.HttpServletResponse; @@ -300,6 +302,11 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie ds.setIdentifier(null); ds.setProtocol(null); ds.setGlobalIdCreateTime(null); + + //Verify metadatalanguage is allowed + if(ds.getMetadataLanguage()!= null && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { + throw new BadRequestException("Specified metadatalangauge (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); + } Dataset managedDs = execCommand(new CreateNewDatasetCommand(ds, createDataverseRequest(u))); return created("/datasets/" + managedDs.getId(), @@ -479,8 +486,11 @@ public Response recreateDataset(String jsonLDBody, @PathParam("identifier") Stri if(!datasetSvc.isIdentifierLocallyUnique(ds)) { throw new BadRequestException("Cannot recreate a dataset whose PID is already in use"); } - + //Verify metadatalanguage is allowed + if(ds.getMetadataLanguage()!= null && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { + throw new BadRequestException("Specified metadatalangauge (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); + } if (ds.getVersions().isEmpty()) { return badRequest("Supplied json must contain a single dataset version."); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java index 38a04b36314..ff9de5d8f25 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java @@ -214,7 +214,10 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) throws Except aggBuilder.add(JsonLDTerm.schemaOrg("includedInDataCatalog").getLabel(), BrandingUtil.getRootDataverseCollectionName()); - + + addIfNotNull(aggBuilder, JsonLDTerm.schemaOrg("inLanguage"), dataset.getMetadataLanguage()); + + // The aggregation aggregates aggregatedresources (Datafiles) which each have // their own entry and metadata JsonArrayBuilder aggResArrayBuilder = Json.createArrayBuilder(); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java index 3fdacbdc8de..62cd54387b8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java @@ -89,6 +89,9 @@ public static Dataset updateDatasetMDFromJsonLD(Dataset ds, String jsonLDBody, + "'. Make sure it is in valid form - see Dataverse Native API documentation."); } } + + //Store the metadatalanguage if sent - the caller needs to check whether it is allowed (as with any GlobalID) + ds.setMetadataLanguage(jsonld.getString(JsonLDTerm.schemaOrg("inLanguage").getUrl(),null)); dsv = updateDatasetVersionMDFromJsonLD(dsv, jsonld, metadataBlockSvc, datasetFieldSvc, append, migrating, licenseSvc); dsv.setDataset(ds); From d3d1aab1b86b2df52688ac9a280e19118cb29219 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Fri, 18 Feb 2022 12:19:39 -0500 Subject: [PATCH 03/25] typo (Thanks pdurbin) and de-merge issues brealing this PR out --- .../harvard/iq/dataverse/SettingsWrapper.java | 48 +++------------ .../harvard/iq/dataverse/api/Dataverses.java | 4 +- .../settings/SettingsServiceBean.java | 59 +++++++++++++++++++ 3 files changed, 69 insertions(+), 42 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..dcbec37fd7e 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)) { @@ -490,31 +473,16 @@ public void validateEmbargoDate(FacesContext context, UIComponent component, Obj 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")); - } + languageMap = settingsService.getBaseMetadataLanguageMap(languageMap, true); } return languageMap; } public Map getMetadataLanguages(DvObjectContainer target) { Map currentMap = new HashMap(); - currentMap.putAll(getBaseMetadataLanguageMap(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) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index a9c706996a7..5420762afd8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -305,7 +305,7 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie //Verify metadatalanguage is allowed if(ds.getMetadataLanguage()!= null && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { - throw new BadRequestException("Specified metadatalangauge (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); + throw new BadRequestException("Specified metadatalanguage (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); } Dataset managedDs = execCommand(new CreateNewDatasetCommand(ds, createDataverseRequest(u))); @@ -489,7 +489,7 @@ public Response recreateDataset(String jsonLDBody, @PathParam("identifier") Stri //Verify metadatalanguage is allowed if(ds.getMetadataLanguage()!= null && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { - throw new BadRequestException("Specified metadatalangauge (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); + throw new BadRequestException("Specified metadatalanguage (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); } if (ds.getVersions().isEmpty()) { 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..e13ea806dc7 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,23 @@ 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.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -730,5 +741,53 @@ 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 + } + } + + + 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 36e077fa49e7483b895f21e26b727c18d0887f35 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 21 Feb 2022 16:21:24 -0500 Subject: [PATCH 04/25] Add debug info to test --- src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java index c08a71eea65..685c45e128e 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java @@ -2326,7 +2326,7 @@ public void testReCreateDataset() { // Get the semantic metadata Response response = UtilIT.getDatasetJsonLDMetadata(datasetId, apiToken); response.then().assertThat().statusCode(OK.getStatusCode()); - + response.prettyPeek(); String expectedString = getData(response.getBody().asString()); // Delete the dataset via native API @@ -2337,6 +2337,7 @@ public void testReCreateDataset() { // Now use the migrate API to recreate the dataset // Now use the migrate API to recreate the dataset response = UtilIT.recreateDatasetJsonLD(apiToken, dataverseAlias, expectedString); + response.prettyPeek(); String body = response.getBody().asString(); response.then().assertThat().statusCode(CREATED.getStatusCode()); From 99174b9acc5926dad348d2b10536b15afa963c93 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 21 Feb 2022 17:53:04 -0500 Subject: [PATCH 05/25] check undefined code, not null --- .../java/edu/harvard/iq/dataverse/util/bagit/OREMap.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java index ff9de5d8f25..7ae14655e81 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/bagit/OREMap.java @@ -8,6 +8,7 @@ import edu.harvard.iq.dataverse.DatasetFieldServiceBean; import edu.harvard.iq.dataverse.DatasetFieldType; import edu.harvard.iq.dataverse.DatasetVersion; +import edu.harvard.iq.dataverse.DvObjectContainer; import edu.harvard.iq.dataverse.FileMetadata; import edu.harvard.iq.dataverse.TermsOfUseAndAccess; import edu.harvard.iq.dataverse.branding.BrandingUtil; @@ -214,9 +215,10 @@ public JsonObjectBuilder getOREMapBuilder(boolean aggregationOnly) throws Except aggBuilder.add(JsonLDTerm.schemaOrg("includedInDataCatalog").getLabel(), BrandingUtil.getRootDataverseCollectionName()); - - addIfNotNull(aggBuilder, JsonLDTerm.schemaOrg("inLanguage"), dataset.getMetadataLanguage()); - + String mdl = dataset.getMetadataLanguage(); + if(!mdl.equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE)) { + aggBuilder.add(JsonLDTerm.schemaOrg("inLanguage").getLabel(), mdl); + } // The aggregation aggregates aggregatedresources (Datafiles) which each have // their own entry and metadata From 2163721e13034ec3598b34291852ca9d9d722ba4 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 21 Feb 2022 18:53:48 -0500 Subject: [PATCH 06/25] explicitly print --- src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java index 685c45e128e..d72b754fdb6 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java @@ -2334,6 +2334,8 @@ public void testReCreateDataset() { deleteDatasetResponse.prettyPrint(); assertEquals(200, deleteDatasetResponse.getStatusCode()); + + logger.info("SENDING to reCreate Dataset: " + expectedString); // Now use the migrate API to recreate the dataset // Now use the migrate API to recreate the dataset response = UtilIT.recreateDatasetJsonLD(apiToken, dataverseAlias, expectedString); From 5c4b85a69349088906076df1eda189a5887c0075 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 8 Mar 2022 12:07:09 -0500 Subject: [PATCH 07/25] check versus undefined code, not null --- src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index 5420762afd8..c8f89493332 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -10,6 +10,7 @@ import edu.harvard.iq.dataverse.DataverseServiceBean; import edu.harvard.iq.dataverse.authorization.DataverseRole; import edu.harvard.iq.dataverse.DvObject; +import edu.harvard.iq.dataverse.DvObjectContainer; import edu.harvard.iq.dataverse.GlobalId; import edu.harvard.iq.dataverse.GuestbookResponseServiceBean; import edu.harvard.iq.dataverse.GuestbookServiceBean; @@ -304,7 +305,7 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie ds.setGlobalIdCreateTime(null); //Verify metadatalanguage is allowed - if(ds.getMetadataLanguage()!= null && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { + if(ds.getMetadataLanguage()!= DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { throw new BadRequestException("Specified metadatalanguage (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); } From 5835d8f8dd297d2e757c8a7643703782c21e948d Mon Sep 17 00:00:00 2001 From: qqmyers Date: Fri, 11 Mar 2022 11:49:05 -0500 Subject: [PATCH 08/25] captialization typo --- .../java/edu/harvard/iq/dataverse/util/json/JsonParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java index 5a49c56acbf..b25e1cbfc01 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java @@ -301,7 +301,7 @@ public Dataset parseDataset(JsonObject obj) throws JsonParseException { dataset.setAuthority(obj.getString("authority", null) == null ? settingsService.getValueForKey(SettingsServiceBean.Key.Authority) : obj.getString("authority")); dataset.setProtocol(obj.getString("protocol", null) == null ? settingsService.getValueForKey(SettingsServiceBean.Key.Protocol) : obj.getString("protocol")); dataset.setIdentifier(obj.getString("identifier",null)); - String mdl = obj.getString("metadatalanguage",null); + String mdl = obj.getString("metadataLanguage",null); if(mdl==null || settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(mdl)) { dataset.setMetadataLanguage(mdl); }else { From 692fa2b1b2e39092a08e7131ad082e8558db06d4 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 24 Mar 2022 11:35:44 -0400 Subject: [PATCH 09/25] add example files for creating with a metadatalanguage --- .../_static/api/dataset-create_en.jsonld | 16 ++++ doc/sphinx-guides/source/api/native-api.rst | 2 +- .../dataset-semantic-metadata-api.rst | 2 +- scripts/api/data/dataset-finch1_fr.json | 77 +++++++++++++++++++ 4 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 doc/sphinx-guides/source/_static/api/dataset-create_en.jsonld create mode 100644 scripts/api/data/dataset-finch1_fr.json diff --git a/doc/sphinx-guides/source/_static/api/dataset-create_en.jsonld b/doc/sphinx-guides/source/_static/api/dataset-create_en.jsonld new file mode 100644 index 00000000000..9bb36a609ed --- /dev/null +++ b/doc/sphinx-guides/source/_static/api/dataset-create_en.jsonld @@ -0,0 +1,16 @@ +{ + "http://purl.org/dc/terms/title": "Darwin's Finches", + "http://purl.org/dc/terms/subject": "Medicine, Health and Life Sciences", + "http://schema.org/inLanguage":"en", + "http://purl.org/dc/terms/creator": { + "https://dataverse.org/schema/citation/author#Name": "Finch, Fiona", + "https://dataverse.org/schema/citation/author#Affiliation": "Birds Inc." + }, + "https://dataverse.org/schema/citation/Contact": { + "https://dataverse.org/schema/citation/datasetContact#E-mail": "finch@mailinator.com", + "https://dataverse.org/schema/citation/datasetContact#Name": "Finch, Fiona" + }, + "https://dataverse.org/schema/citation/Description": { + "https://dataverse.org/schema/citation/dsDescription#Text": "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds." + } +} \ No newline at end of file diff --git a/doc/sphinx-guides/source/api/native-api.rst b/doc/sphinx-guides/source/api/native-api.rst index 31b6d777526..169c0b7ceaa 100644 --- a/doc/sphinx-guides/source/api/native-api.rst +++ b/doc/sphinx-guides/source/api/native-api.rst @@ -459,7 +459,7 @@ To create a dataset, you must supply a JSON file that contains at least the foll - Description - Subject -As a starting point, you can download :download:`dataset-finch1.json <../../../../scripts/search/tests/data/dataset-finch1.json>` and modify it to meet your needs. (In addition to this minimal example, you can download :download:`dataset-create-new-all-default-fields.json <../../../../scripts/api/data/dataset-create-new-all-default-fields.json>` which populates all of the metadata fields that ship with a Dataverse installation.) +As a starting point, you can download :download:`dataset-finch1.json <../../../../scripts/search/tests/data/dataset-finch1.json>` and modify it to meet your needs. (:download:`dataset-create-new-all-default-fields.json <../../../../scripts/api/data/dataset-finch1_fr.json>` is a variant of this file that includes setting the metadata language (see :ref:`:MetadataLanguages`) to French (fr). In addition to this minimal example, you can download :download:`dataset-create-new-all-default-fields.json <../../../../scripts/api/data/dataset-create-new-all-default-fields.json>` which populates all of the metadata fields that ship with a Dataverse installation.) The curl command below assumes you have kept the name "dataset-finch1.json" and that this file is in your current working directory. diff --git a/doc/sphinx-guides/source/developers/dataset-semantic-metadata-api.rst b/doc/sphinx-guides/source/developers/dataset-semantic-metadata-api.rst index da28cc60c53..2f4cb177ccb 100644 --- a/doc/sphinx-guides/source/developers/dataset-semantic-metadata-api.rst +++ b/doc/sphinx-guides/source/developers/dataset-semantic-metadata-api.rst @@ -99,5 +99,5 @@ With curl, this is done by adding the following header: curl -H X-Dataverse-key:$API_TOKEN -H 'Content-Type: application/ld+json' -X POST $SERVER_URL/api/dataverses/$DATAVERSE_ID/datasets --upload-file dataset-create.jsonld -An example jsonld file is available at :download:`dataset-create.jsonld <../_static/api/dataset-create.jsonld>` +An example jsonld file is available at :download:`dataset-create.jsonld <../_static/api/dataset-create.jsonld>` (:download:`dataset-create_en.jsonld <../_static/api/dataset-create.jsonld>` is a version that sets the metadata language (see :ref:`:MetadataLanguages`) to English (en).) diff --git a/scripts/api/data/dataset-finch1_fr.json b/scripts/api/data/dataset-finch1_fr.json new file mode 100644 index 00000000000..ec0856a2aa3 --- /dev/null +++ b/scripts/api/data/dataset-finch1_fr.json @@ -0,0 +1,77 @@ +{ + "datasetVersion": { + "metadataBlocks": { + "citation": { + "fields": [ + { + "value": "Darwin's Finches", + "typeClass": "primitive", + "multiple": false, + "typeName": "title" + }, + { + "value": [ + { + "authorName": { + "value": "Finch, Fiona", + "typeClass": "primitive", + "multiple": false, + "typeName": "authorName" + }, + "authorAffiliation": { + "value": "Birds Inc.", + "typeClass": "primitive", + "multiple": false, + "typeName": "authorAffiliation" + } + } + ], + "typeClass": "compound", + "multiple": true, + "typeName": "author" + }, + { + "value": [ + { "datasetContactEmail" : { + "typeClass": "primitive", + "multiple": false, + "typeName": "datasetContactEmail", + "value" : "finch@mailinator.com" + }, + "datasetContactName" : { + "typeClass": "primitive", + "multiple": false, + "typeName": "datasetContactName", + "value": "Finch, Fiona" + } + }], + "typeClass": "compound", + "multiple": true, + "typeName": "datasetContact" + }, + { + "value": [ { + "dsDescriptionValue":{ + "value": "Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds.", + "multiple":false, + "typeClass": "primitive", + "typeName": "dsDescriptionValue" + }}], + "typeClass": "compound", + "multiple": true, + "typeName": "dsDescription" + }, + { + "value": [ + "Medicine, Health and Life Sciences" + ], + "typeClass": "controlledVocabulary", + "multiple": true, + "typeName": "subject" + } + ], + "displayName": "Citation Metadata" + } + } + } +} From 5512f206317e292f5667eb42b4d21a7d031ef137 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 24 Mar 2022 14:07:27 -0400 Subject: [PATCH 10/25] missed update in checking null vs undefined --- src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index 8104bbdd6ec..9ff3b38fcc2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -495,8 +495,8 @@ public Response recreateDataset(String jsonLDBody, @PathParam("identifier") Stri throw new BadRequestException("Cannot recreate a dataset whose PID is already in use"); } - //Verify metadatalanguage is allowed - if(ds.getMetadataLanguage()!= null && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { + //Verify metadatalanguage is allowed + if(ds.getMetadataLanguage()!= DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { throw new BadRequestException("Specified metadatalanguage (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); } From 852e2aa5416a46ef1b212185dac721527886aef8 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 24 Mar 2022 14:08:52 -0400 Subject: [PATCH 11/25] add metadataLanguage field/set to fr --- scripts/api/data/dataset-finch1_fr.json | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/api/data/dataset-finch1_fr.json b/scripts/api/data/dataset-finch1_fr.json index ec0856a2aa3..06f771da581 100644 --- a/scripts/api/data/dataset-finch1_fr.json +++ b/scripts/api/data/dataset-finch1_fr.json @@ -1,5 +1,6 @@ { "datasetVersion": { + "metadataLanguage": "fr", "metadataBlocks": { "citation": { "fields": [ From ebd62dc1a98bc73b2f8c7e9afdc4f6e55a484f1a Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 28 Mar 2022 14:23:25 -0400 Subject: [PATCH 12/25] metadataLang goes at dataset level --- scripts/api/data/dataset-finch1_fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/api/data/dataset-finch1_fr.json b/scripts/api/data/dataset-finch1_fr.json index 06f771da581..ce9616fdef5 100644 --- a/scripts/api/data/dataset-finch1_fr.json +++ b/scripts/api/data/dataset-finch1_fr.json @@ -1,6 +1,6 @@ { + "metadataLanguage": "fr", "datasetVersion": { - "metadataLanguage": "fr", "metadataBlocks": { "citation": { "fields": [ From 0afbe206f65bbeb4a17117b5b75cac00ae5c784b Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 28 Mar 2022 16:03:54 -0400 Subject: [PATCH 13/25] refactor API checks - require consistent value can't send a metadataLanguage when the :MetadataLanguage setting is not set When it is, value must match parent, or if parent allows choice, be one of the allowed values per the setting. --- .../harvard/iq/dataverse/api/Dataverses.java | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index 9ff3b38fcc2..b6c1ed92892 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -239,6 +239,9 @@ public Response createDataset(String jsonBody, @PathParam("identifier") String p return badRequest(BundleUtil.getStringFromBundle("dataverses.api.create.dataset.error.superuserFiles")); } + //Throw BadRequestException if metadataLanguage isn't compatible with setting + checkMetadataLangauge(ds, owner); + // clean possible version metadata DatasetVersion version = ds.getVersions().get(0); version.setMinorVersionNumber(null); @@ -308,10 +311,8 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie ds.setProtocol(null); ds.setGlobalIdCreateTime(null); - //Verify metadatalanguage is allowed - if(ds.getMetadataLanguage()!= DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { - throw new BadRequestException("Specified metadatalanguage (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); - } + //Throw BadRequestException if metadataLanguage isn't compatible with setting + checkMetadataLangauge(ds, owner); Dataset managedDs = execCommand(new CreateNewDatasetCommand(ds, createDataverseRequest(u))); return created("/datasets/" + managedDs.getId(), @@ -325,6 +326,19 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie } } + private void checkMetadataLangauge(Dataset ds, Dataverse owner) { + //Verify metadatalanguage is allowed + Map mLangMap = settingsService.getBaseMetadataLanguageMap(new HashMap(), true); + //Anything but undefined (from no value sent in) is invalid unless the :MetadataLanguage setting is not set + if(!ds.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.size()!=0) { + throw new BadRequestException("This repository is not configured to support metadataLanguage."); + } + //When :MetadataLanguage is set, the specificed language must either match the parent colelction choice, or, if that is undefined, be one of the choices allowed by the setting + if(!(ds.getMetadataLanguage().equals( owner.getMetadataLanguage()) || (owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.containsKey(ds.getMetadataLanguage())))) { + throw new BadRequestException("Specified metadatalanguage ( metadataLanguage, " + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed in this collection."); + } + } + @POST @Path("{identifier}/datasets/:import") public Response importDataset(String jsonBody, @PathParam("identifier") String parentIdtf, @QueryParam("pid") String pidParam, @QueryParam("release") String releaseParam) { @@ -341,6 +355,9 @@ public Response importDataset(String jsonBody, @PathParam("identifier") String p return badRequest("Supplied json must contain a single dataset version."); } + //Throw BadRequestException if metadataLanguage isn't compatible with setting + checkMetadataLangauge(ds, owner); + DatasetVersion version = ds.getVersions().get(0); if (version.getVersionState() == null) { version.setVersionState(DatasetVersion.VersionState.DRAFT); @@ -495,10 +512,9 @@ public Response recreateDataset(String jsonLDBody, @PathParam("identifier") Stri throw new BadRequestException("Cannot recreate a dataset whose PID is already in use"); } - //Verify metadatalanguage is allowed - if(ds.getMetadataLanguage()!= DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE && !settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(ds.getMetadataLanguage())) { - throw new BadRequestException("Specified metadatalanguage (" + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed."); - } + //Throw BadRequestException if metadataLanguage isn't compatible with setting + checkMetadataLangauge(ds, owner); + if (ds.getVersions().isEmpty()) { return badRequest("Supplied json must contain a single dataset version."); From d6900730b9fbfa7dc65f7cc0c6b7880f81b20a56 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 28 Mar 2022 16:14:42 -0400 Subject: [PATCH 14/25] note about metadataLang in API calls --- doc/sphinx-guides/source/installation/config.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index 69bec48ed04..a03bab59c78 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -730,7 +730,8 @@ Allowing the Language Used for Dataset Metadata to be Specified Since dataset metadata can only be entered in one language, and administrators may wish to limit which languages metadata can be entered in, Dataverse also offers a separate setting defining allowed metadata languages. The presence of the :ref:`:MetadataLanguages` database setting identifies the available options (which can be different from those in the :Languages setting above, with fewer or more options). -Dataverse collection admins can select from these options to indicate which language should be used for new Datasets created with that specific collection. If they do not, users will be asked when creating a dataset to select the language they want to use when entering metadata. +Dataverse collection admins can select from these options to indicate which language should be used for new Datasets created with that specific collection. If they do not, users will be asked when creating a dataset to select the language they want to use when entering metadata. +Similarly, when this setting is defined, Datasets created/imported/migrated are required to specify a metadataLanguage compatible with the collection's requirement. When creating or editing a dataset, users will be asked to enter the metadata in that language. The metadata language selected will also be shown when dataset metadata is viewed and will be included in metadata exports (as appropriate for each format) for published datasets: From b3fb7fcc47746377fa4031d89bdf032c7f0fe2b6 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 28 Mar 2022 16:42:45 -0400 Subject: [PATCH 15/25] fix logic for owner has undefined option --- src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index b6c1ed92892..cdf5a2bf673 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -334,7 +334,7 @@ private void checkMetadataLangauge(Dataset ds, Dataverse owner) { throw new BadRequestException("This repository is not configured to support metadataLanguage."); } //When :MetadataLanguage is set, the specificed language must either match the parent colelction choice, or, if that is undefined, be one of the choices allowed by the setting - if(!(ds.getMetadataLanguage().equals( owner.getMetadataLanguage()) || (owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.containsKey(ds.getMetadataLanguage())))) { + if(!((ds.getMetadataLanguage().equals( owner.getMetadataLanguage()) && !owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE)) || (owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.containsKey(ds.getMetadataLanguage())))) { throw new BadRequestException("Specified metadatalanguage ( metadataLanguage, " + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed in this collection."); } } From a9e8deafc455bec40e9e312684319982f2ecc7a4 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 29 Mar 2022 17:09:54 -0400 Subject: [PATCH 16/25] inverted logic for the metadatalang setting not set case --- src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index cdf5a2bf673..86057f6eb05 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -330,10 +330,10 @@ private void checkMetadataLangauge(Dataset ds, Dataverse owner) { //Verify metadatalanguage is allowed Map mLangMap = settingsService.getBaseMetadataLanguageMap(new HashMap(), true); //Anything but undefined (from no value sent in) is invalid unless the :MetadataLanguage setting is not set - if(!ds.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.size()!=0) { + if(!ds.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.size()==0) { throw new BadRequestException("This repository is not configured to support metadataLanguage."); } - //When :MetadataLanguage is set, the specificed language must either match the parent colelction choice, or, if that is undefined, be one of the choices allowed by the setting + //When :MetadataLanguage is set, the specificed language must either match the parent collection choice, or, if that is undefined, be one of the choices allowed by the setting if(!((ds.getMetadataLanguage().equals( owner.getMetadataLanguage()) && !owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE)) || (owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.containsKey(ds.getMetadataLanguage())))) { throw new BadRequestException("Specified metadatalanguage ( metadataLanguage, " + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed in this collection."); } From 7f8e68390b57358d08a1fba9201b4169065cb091 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 7 Apr 2022 16:43:20 -0400 Subject: [PATCH 17/25] refactor, fix, add tests --- .../harvard/iq/dataverse/api/Dataverses.java | 22 +---- .../iq/dataverse/dataverse/DataverseUtil.java | 75 +++++++++++---- .../dataverse/DataverseUtilTest.java | 96 ++++++++++++++++++- 3 files changed, 154 insertions(+), 39 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index 86057f6eb05..60cc5385a6e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -30,6 +30,7 @@ import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroupServiceBean; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import edu.harvard.iq.dataverse.authorization.users.User; +import edu.harvard.iq.dataverse.dataverse.DataverseUtil; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; import edu.harvard.iq.dataverse.engine.command.impl.AddRoleAssigneesToExplicitGroupCommand; import edu.harvard.iq.dataverse.engine.command.impl.AssignRoleCommand; @@ -240,7 +241,7 @@ public Response createDataset(String jsonBody, @PathParam("identifier") String p } //Throw BadRequestException if metadataLanguage isn't compatible with setting - checkMetadataLangauge(ds, owner); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); // clean possible version metadata DatasetVersion version = ds.getVersions().get(0); @@ -312,7 +313,7 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie ds.setGlobalIdCreateTime(null); //Throw BadRequestException if metadataLanguage isn't compatible with setting - checkMetadataLangauge(ds, owner); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); Dataset managedDs = execCommand(new CreateNewDatasetCommand(ds, createDataverseRequest(u))); return created("/datasets/" + managedDs.getId(), @@ -326,19 +327,6 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie } } - private void checkMetadataLangauge(Dataset ds, Dataverse owner) { - //Verify metadatalanguage is allowed - Map mLangMap = settingsService.getBaseMetadataLanguageMap(new HashMap(), true); - //Anything but undefined (from no value sent in) is invalid unless the :MetadataLanguage setting is not set - if(!ds.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.size()==0) { - throw new BadRequestException("This repository is not configured to support metadataLanguage."); - } - //When :MetadataLanguage is set, the specificed language must either match the parent collection choice, or, if that is undefined, be one of the choices allowed by the setting - if(!((ds.getMetadataLanguage().equals( owner.getMetadataLanguage()) && !owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE)) || (owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) && mLangMap.containsKey(ds.getMetadataLanguage())))) { - throw new BadRequestException("Specified metadatalanguage ( metadataLanguage, " + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed in this collection."); - } - } - @POST @Path("{identifier}/datasets/:import") public Response importDataset(String jsonBody, @PathParam("identifier") String parentIdtf, @QueryParam("pid") String pidParam, @QueryParam("release") String releaseParam) { @@ -356,7 +344,7 @@ public Response importDataset(String jsonBody, @PathParam("identifier") String p } //Throw BadRequestException if metadataLanguage isn't compatible with setting - checkMetadataLangauge(ds, owner); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); DatasetVersion version = ds.getVersions().get(0); if (version.getVersionState() == null) { @@ -513,7 +501,7 @@ public Response recreateDataset(String jsonLDBody, @PathParam("identifier") Stri } //Throw BadRequestException if metadataLanguage isn't compatible with setting - checkMetadataLangauge(ds, owner); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); if (ds.getVersions().isEmpty()) { diff --git a/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java b/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java index daf79609422..5a3d29fd063 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java @@ -1,23 +1,29 @@ package edu.harvard.iq.dataverse.dataverse; +import edu.harvard.iq.dataverse.Dataset; import edu.harvard.iq.dataverse.Dataverse; +import edu.harvard.iq.dataverse.DvObjectContainer; import edu.harvard.iq.dataverse.authorization.groups.impl.ipaddress.ip.IpAddress; import edu.harvard.iq.dataverse.authorization.users.User; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; import edu.harvard.iq.dataverse.util.BundleUtil; +import edu.harvard.iq.dataverse.util.json.JsonLDTerm; + import static edu.harvard.iq.dataverse.util.json.JsonPrinter.json; import java.io.File; import java.io.IOException; -import java.math.BigDecimal; - +import java.util.Map; import java.util.logging.Logger; + +import javax.ws.rs.BadRequestException; + import opennlp.tools.util.StringUtil; import org.apache.commons.io.FileUtils; public class DataverseUtil { private static final Logger logger = Logger.getLogger(DataverseUtil.class.getCanonicalName()); - + public static String getSuggestedDataverseNameOnCreate(User user) { if (user == null) { return null; @@ -25,49 +31,76 @@ public static String getSuggestedDataverseNameOnCreate(User user) { // getDisplayInfo() is never null. return user.getDisplayInfo().getTitle() + " " + BundleUtil.getStringFromBundle("dataverse"); } - - public static boolean validateDataverseMetadataExternally(Dataverse dv, String executable, DataverseRequest request) { - String jsonMetadata; - - String sourceAddressLabel = "0.0.0.0"; - + + public static boolean validateDataverseMetadataExternally(Dataverse dv, String executable, + DataverseRequest request) { + String jsonMetadata; + + String sourceAddressLabel = "0.0.0.0"; + if (request != null) { IpAddress sourceAddress = request.getSourceAddress(); if (sourceAddress != null) { sourceAddressLabel = sourceAddress.toString(); } } - + try { jsonMetadata = json(dv).add("sourceAddress", sourceAddressLabel).build().toString(); } catch (Exception ex) { - logger.warning("Failed to export dataverse metadata as json; "+ex.getMessage() == null ? "" : ex.getMessage()); - return false; + logger.warning( + "Failed to export dataverse metadata as json; " + ex.getMessage() == null ? "" : ex.getMessage()); + return false; } - + if (StringUtil.isEmpty(jsonMetadata)) { logger.warning("Failed to export dataverse metadata as json."); - return false; + return false; } - - // save the metadata in a temp file: - + + // save the metadata in a temp file: + try { File tempFile = File.createTempFile("dataverseMetadataCheck", ".tmp"); FileUtils.writeStringToFile(tempFile, jsonMetadata); - - // run the external executable: + + // run the external executable: String[] params = { executable, tempFile.getAbsolutePath() }; Process p = Runtime.getRuntime().exec(params); p.waitFor(); - + return p.exitValue() == 0; } catch (IOException | InterruptedException ex) { logger.warning("Failed run the external executable."); - return false; + return false; } + + } + + public static void checkMetadataLangauge(Dataset ds, Dataverse owner, Map mLangMap) { + // Verify metadatalanguage is allowed + + // :MetadataLanguage setting is not set + // Must send UNDEFINED or match parent + if (mLangMap.isEmpty()) { + if (!(ds.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) + || ds.getMetadataLanguage().equals(owner.getMetadataLanguage()))) { + throw new BadRequestException("This repository is not configured to support metadataLanguage."); + } + } else { + // When :MetadataLanguage is set, the specificed language must either match the + // parent collection choice, or, if that is undefined, be one of the choices + // allowed by the setting + if (!((ds.getMetadataLanguage().equals(owner.getMetadataLanguage()) + && !owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE)) + || (owner.getMetadataLanguage().equals(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE) + && (mLangMap.containsKey(ds.getMetadataLanguage()))))) { + throw new BadRequestException("Specified metadatalanguage ( metadataLanguage, " + + JsonLDTerm.schemaOrg("inLanguage").getUrl() + ") not allowed in this collection."); + } + } } } diff --git a/src/test/java/edu/harvard/iq/dataverse/dataverse/DataverseUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/dataverse/DataverseUtilTest.java index 3a0e14f607a..bf679f8fe97 100644 --- a/src/test/java/edu/harvard/iq/dataverse/dataverse/DataverseUtilTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/dataverse/DataverseUtilTest.java @@ -1,7 +1,17 @@ package edu.harvard.iq.dataverse.dataverse; +import edu.harvard.iq.dataverse.Dataset; +import edu.harvard.iq.dataverse.Dataverse; +import edu.harvard.iq.dataverse.DvObjectContainer; import edu.harvard.iq.dataverse.mocks.MocksFactory; import static org.junit.Assert.assertEquals; + +import java.util.HashMap; +import java.util.Map; + +import javax.ws.rs.BadRequestException; + +import org.junit.Assert; import org.junit.Test; public class DataverseUtilTest { @@ -10,7 +20,91 @@ public class DataverseUtilTest { public void testGetSuggestedDataverseNameOnCreate() { System.out.println("getSuggestedDataverseNameOnCreate"); assertEquals(null, DataverseUtil.getSuggestedDataverseNameOnCreate(null)); - assertEquals("Homer Simpson Dataverse", DataverseUtil.getSuggestedDataverseNameOnCreate(MocksFactory.makeAuthenticatedUser("Homer", "Simpson"))); + assertEquals("Homer Simpson Dataverse", DataverseUtil + .getSuggestedDataverseNameOnCreate(MocksFactory.makeAuthenticatedUser("Homer", "Simpson"))); + } + + @Test + public void testCheckMetadataLanguageCases() { + Map emptyMLangSettingMap = new HashMap(); + Map mLangSettingMap = new HashMap(); + mLangSettingMap.put("en", "English"); + mLangSettingMap.put("fr", "French"); + Dataverse undefinedParent = new Dataverse(); + undefinedParent.setMetadataLanguage(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE); + Dataset undefinedD = new Dataset(); + undefinedD.setMetadataLanguage(DvObjectContainer.UNDEFINED_METADATA_LANGUAGE_CODE); + Dataverse definedParent = new Dataverse(); + definedParent.setMetadataLanguage("en"); + Dataset definedEnglishD = new Dataset(); + definedEnglishD.setMetadataLanguage("en"); + Dataset definedFrenchD = new Dataset(); + definedFrenchD.setMetadataLanguage("fr"); + Dataset definedSpanishD = new Dataset(); + definedSpanishD.setMetadataLanguage("es"); + // Not set tests: + //Good - no mLang sent, parent doesn't have one + try { + DataverseUtil.checkMetadataLangauge(undefinedD, undefinedParent, emptyMLangSettingMap); + } catch (BadRequestException e) { + Assert.fail(); + } + //Bad - one sent, parent doesn't have one + try { + DataverseUtil.checkMetadataLangauge(definedEnglishD, undefinedParent, emptyMLangSettingMap); + Assert.fail(); + } catch (BadRequestException e) { + } + //Good - one sent, matches parent + try { + DataverseUtil.checkMetadataLangauge(definedEnglishD, definedParent, emptyMLangSettingMap); + + } catch (BadRequestException e) { + Assert.fail(); + } + //Bad - one sent, doesn't match parent + try { + DataverseUtil.checkMetadataLangauge(definedFrenchD, definedParent, emptyMLangSettingMap); + Assert.fail(); + } catch (BadRequestException e) { + } + //With setting tests + //Bad - one sent, parent doesn't have one + try { + DataverseUtil.checkMetadataLangauge(undefinedD, undefinedParent, mLangSettingMap); + Assert.fail(); + } catch (BadRequestException e) { + } + //Good - sent, parent undefined, is allowed by setting + try { + DataverseUtil.checkMetadataLangauge(definedEnglishD, undefinedParent, mLangSettingMap); + } catch (BadRequestException e) { + Assert.fail(); + } + //Bad one sent, parent undefined, not allowed by setting + try { + DataverseUtil.checkMetadataLangauge(definedSpanishD, undefinedParent, mLangSettingMap); + Assert.fail(); + } catch (BadRequestException e) { + } + //Bad - one sent, doesn't match parent + try { + DataverseUtil.checkMetadataLangauge(definedFrenchD, definedParent, mLangSettingMap); + Assert.fail(); + } catch (BadRequestException e) { + } + //Bad - undefined sent, parent is defined + try { + DataverseUtil.checkMetadataLangauge(undefinedD, definedParent, mLangSettingMap); + Assert.fail(); + } catch (BadRequestException e) { + } + //Good - sent, parent defined, they match + try { + DataverseUtil.checkMetadataLangauge(definedEnglishD, definedParent, mLangSettingMap); + } catch (BadRequestException e) { + Assert.fail(); + } } } From 8fc524f128451b438e15d25e46d756647137735c Mon Sep 17 00:00:00 2001 From: qqmyers Date: Fri, 8 Apr 2022 07:13:56 -0400 Subject: [PATCH 18/25] add mlang /check to import ddi --- .../java/edu/harvard/iq/dataverse/api/Dataverses.java | 9 +++++---- .../edu/harvard/iq/dataverse/api/dto/DatasetDTO.java | 4 ++++ .../iq/dataverse/api/imports/ImportDDIServiceBean.java | 4 ++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index 60cc5385a6e..2125534a6a0 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -241,7 +241,7 @@ public Response createDataset(String jsonBody, @PathParam("identifier") String p } //Throw BadRequestException if metadataLanguage isn't compatible with setting - DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(null, true)); // clean possible version metadata DatasetVersion version = ds.getVersions().get(0); @@ -313,7 +313,7 @@ public Response createDatasetFromJsonLd(String jsonLDBody, @PathParam("identifie ds.setGlobalIdCreateTime(null); //Throw BadRequestException if metadataLanguage isn't compatible with setting - DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(null, true)); Dataset managedDs = execCommand(new CreateNewDatasetCommand(ds, createDataverseRequest(u))); return created("/datasets/" + managedDs.getId(), @@ -344,7 +344,7 @@ public Response importDataset(String jsonBody, @PathParam("identifier") String p } //Throw BadRequestException if metadataLanguage isn't compatible with setting - DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(null, true)); DatasetVersion version = ds.getVersions().get(0); if (version.getVersionState() == null) { @@ -413,6 +413,7 @@ public Response importDatasetDdi(String xml, @PathParam("identifier") String par Dataset ds = null; try { ds = jsonParser().parseDataset(importService.ddiToJson(xml)); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(null, true)); } catch (JsonParseException jpe) { return badRequest("Error parsing data as Json: "+jpe.getMessage()); } catch (ImportException e) { @@ -501,7 +502,7 @@ public Response recreateDataset(String jsonLDBody, @PathParam("identifier") Stri } //Throw BadRequestException if metadataLanguage isn't compatible with setting - DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(new HashMap(), true)); + DataverseUtil.checkMetadataLangauge(ds, owner, settingsService.getBaseMetadataLanguageMap(null, true)); if (ds.getVersions().isEmpty()) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/dto/DatasetDTO.java b/src/main/java/edu/harvard/iq/dataverse/api/dto/DatasetDTO.java index 52046e19de0..d5be8f72fce 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/dto/DatasetDTO.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/dto/DatasetDTO.java @@ -99,6 +99,10 @@ public String toString() { return "DatasetDTO{" + "id=" + id + ", identifier=" + identifier + ", protocol=" + protocol + ", authority=" + authority + ", globalIdCreateTime=" + globalIdCreateTime + ", datasetVersion=" + datasetVersion + ", dataFiles=" + dataFiles + '}'; } + public void setMetadataLanguage(String metadataLanguage) { + this.metadataLanguage = metadataLanguage; + } + public String getMetadataLanguage() { return metadataLanguage; } diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index 7b2057f180c..b3bbb3b613c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -189,6 +189,10 @@ private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO String codeBookLevelId = xmlr.getAttributeValue(null, "ID"); + //Include metadataLanguage from an xml:lang attribute if present (null==undefined) + String metadataLanguage= xmlr.getAttributeValue(null, "xml:lang"); + datasetDTO.setMetadataLanguage(metadataLanguage); + // (but first we will parse and process the entire DDI - and only // then add this codeBook-level id to the list of identifiers; i.e., // we don't want it to be the first on the list, if one or more From 2bb334f22e94b3c2eb150b554935ebbff2daf0b9 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Fri, 8 Apr 2022 14:40:50 -0400 Subject: [PATCH 19/25] use namespace in parsing xml:lang --- .../harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index b3bbb3b613c..839848f3e71 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -190,7 +190,7 @@ private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO String codeBookLevelId = xmlr.getAttributeValue(null, "ID"); //Include metadataLanguage from an xml:lang attribute if present (null==undefined) - String metadataLanguage= xmlr.getAttributeValue(null, "xml:lang"); + String metadataLanguage= xmlr.getAttributeValue("xml", "lang"); datasetDTO.setMetadataLanguage(metadataLanguage); // (but first we will parse and process the entire DDI - and only From 948660acc8dfd350b3c7c389a29becaa34d067a8 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Fri, 8 Apr 2022 15:40:45 -0400 Subject: [PATCH 20/25] add logging, switch order (as a test) --- .../iq/dataverse/api/imports/ImportDDIServiceBean.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index 839848f3e71..e3b19d33616 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -182,6 +182,11 @@ private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO throw new XMLStreamException("It doesn't start with the XML element "); } + //Include metadataLanguage from an xml:lang attribute if present (null==undefined) + String metadataLanguage= xmlr.getAttributeValue("xml", "lang"); + logger.info("Found metadatalanguage in ddi xml: " + metadataLanguage); + datasetDTO.setMetadataLanguage(metadataLanguage); + // Some DDIs provide an ID in the section. // We are going to treat it as just another otherId. // (we've seen instances where this ID was the only ID found in @@ -189,10 +194,6 @@ private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO String codeBookLevelId = xmlr.getAttributeValue(null, "ID"); - //Include metadataLanguage from an xml:lang attribute if present (null==undefined) - String metadataLanguage= xmlr.getAttributeValue("xml", "lang"); - datasetDTO.setMetadataLanguage(metadataLanguage); - // (but first we will parse and process the entire DDI - and only // then add this codeBook-level id to the list of identifiers; i.e., // we don't want it to be the first on the list, if one or more From 091cc190c0e0ed662f4a3f9831fcc7286388f4b6 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Fri, 8 Apr 2022 16:13:25 -0400 Subject: [PATCH 21/25] try namespace url --- .../harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index e3b19d33616..5e4bbea187d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -183,7 +183,7 @@ private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO } //Include metadataLanguage from an xml:lang attribute if present (null==undefined) - String metadataLanguage= xmlr.getAttributeValue("xml", "lang"); + String metadataLanguage= xmlr.getAttributeValue("http://www.w3.org/XML/1998/namespace", "lang"); logger.info("Found metadatalanguage in ddi xml: " + metadataLanguage); datasetDTO.setMetadataLanguage(metadataLanguage); From 67de235e6cce4cb323237241ec0e9c083e9c1d92 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 11 Apr 2022 11:24:58 -0400 Subject: [PATCH 22/25] change logging to fine --- .../harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index 5e4bbea187d..a92e33e223e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -184,7 +184,7 @@ private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO //Include metadataLanguage from an xml:lang attribute if present (null==undefined) String metadataLanguage= xmlr.getAttributeValue("http://www.w3.org/XML/1998/namespace", "lang"); - logger.info("Found metadatalanguage in ddi xml: " + metadataLanguage); + logger.fine("Found metadatalanguage in ddi xml: " + metadataLanguage); datasetDTO.setMetadataLanguage(metadataLanguage); // Some DDIs provide an ID in the section. From bea2c57c44f5096307b629dcdb6059f471a1116d Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 11 Apr 2022 16:38:39 -0400 Subject: [PATCH 23/25] fix typo in string --- .../java/edu/harvard/iq/dataverse/util/json/JsonParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java index b25e1cbfc01..e7f0e699fa8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java @@ -305,7 +305,7 @@ public Dataset parseDataset(JsonObject obj) throws JsonParseException { if(mdl==null || settingsService.getBaseMetadataLanguageMap(new HashMap(), true).containsKey(mdl)) { dataset.setMetadataLanguage(mdl); }else { - throw new JsonParseException("Specified metadatalangauge not allowed."); + throw new JsonParseException("Specified metadatalanguage not allowed."); } DatasetVersion dsv = new DatasetVersion(); From 60c9f13ac119ff81c8fd2308694db6695ae465dd Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 11 Apr 2022 16:38:59 -0400 Subject: [PATCH 24/25] add logging to debug test fails --- src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java | 1 + .../edu/harvard/iq/dataverse/dataverse/DataverseUtil.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index 2125534a6a0..cb38c883efe 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -227,6 +227,7 @@ public Response addDataverse(String body, @PathParam("identifier") String parent @Consumes("application/json") public Response createDataset(String jsonBody, @PathParam("identifier") String parentIdtf) { try { + logger.info("Json is: " + jsonBody); User u = findUserOrDie(); Dataverse owner = findDataverseOrDie(parentIdtf); Dataset ds = parseDataset(jsonBody); diff --git a/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java b/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java index 5a3d29fd063..c805b78b2f2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java @@ -80,8 +80,10 @@ public static boolean validateDataverseMetadataExternally(Dataverse dv, String e public static void checkMetadataLangauge(Dataset ds, Dataverse owner, Map mLangMap) { // Verify metadatalanguage is allowed +logger.info("Dataset mdl: " + ds.getMetadataLanguage()); +logger.info("Owner mdl: " + owner.getMetadataLanguage()); +logger.info("Map langs: " + mLangMap.toString()); - // :MetadataLanguage setting is not set // Must send UNDEFINED or match parent if (mLangMap.isEmpty()) { From dee802af364127847c92345dbe7dffa045e57569 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Mon, 11 Apr 2022 18:43:32 -0400 Subject: [PATCH 25/25] move debug logging to fine --- src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java | 2 +- .../edu/harvard/iq/dataverse/dataverse/DataverseUtil.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index cb38c883efe..9b652c29032 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -227,7 +227,7 @@ public Response addDataverse(String body, @PathParam("identifier") String parent @Consumes("application/json") public Response createDataset(String jsonBody, @PathParam("identifier") String parentIdtf) { try { - logger.info("Json is: " + jsonBody); + logger.fine("Json is: " + jsonBody); User u = findUserOrDie(); Dataverse owner = findDataverseOrDie(parentIdtf); Dataset ds = parseDataset(jsonBody); diff --git a/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java b/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java index c805b78b2f2..04e7d56fad6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/dataverse/DataverseUtil.java @@ -80,9 +80,9 @@ public static boolean validateDataverseMetadataExternally(Dataverse dv, String e public static void checkMetadataLangauge(Dataset ds, Dataverse owner, Map mLangMap) { // Verify metadatalanguage is allowed -logger.info("Dataset mdl: " + ds.getMetadataLanguage()); -logger.info("Owner mdl: " + owner.getMetadataLanguage()); -logger.info("Map langs: " + mLangMap.toString()); + logger.fine("Dataset mdl: " + ds.getMetadataLanguage()); + logger.fine("Owner mdl: " + owner.getMetadataLanguage()); + logger.fine("Map langs: " + mLangMap.toString()); // :MetadataLanguage setting is not set // Must send UNDEFINED or match parent