From 043080dd13605277cf058097fd8e2795a00f1a4b Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Thu, 11 Oct 2018 15:18:24 -0400 Subject: [PATCH] add funder #4371 --- .../harvard/iq/dataverse/DatasetVersion.java | 51 ++++++++++++++++--- .../export/SchemaDotOrgExporterTest.java | 25 +++++++++ src/test/resources/json/dataset-finch2.json | 35 +++++++++++++ 3 files changed, 104 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java index 7672a905ed5..f9da42a1943 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersion.java @@ -739,7 +739,37 @@ public List getDatasetAuthors() { } return retList; } - + + public List getFunders() { + List retList = new ArrayList<>(); + for (DatasetField dsf : this.getDatasetFields()) { + boolean addFunder = false; + if (dsf.getDatasetFieldType().getName().equals(DatasetFieldConstant.contributor)) { + for (DatasetFieldCompoundValue contributorValue : dsf.getDatasetFieldCompoundValues()) { + String contributorName = null; + String contributorType = null; + for (DatasetField subField : contributorValue.getChildDatasetFields()) { + if (subField.getDatasetFieldType().getName().equals(DatasetFieldConstant.contributorName)) { + contributorName = subField.getDisplayValue(); + } + if (subField.getDatasetFieldType().getName().equals(DatasetFieldConstant.contributorType)) { + contributorType = subField.getDisplayValue(); + // TODO: Consider how this will work in French, Chinese, etc. + String funderString = "Funder"; + if (funderString.equals(contributorType)) { + addFunder = true; + } + } + } + if (addFunder) { + retList.add(contributorName); + } + } + } + } + return retList; + } + public List getTimePeriodsCovered() { List retList = new ArrayList<>(); for (DatasetField dsf : this.getDatasetFields()) { @@ -1486,12 +1516,6 @@ public String getJsonLd() { * */ - /** - * funder (if available) - * TODO - * (punted, for now - see #2243) - */ - job.add("schemaVersion", "https://schema.org/version/3.3"); TermsOfUseAndAccess terms = this.getTermsOfUseAndAccess(); @@ -1522,6 +1546,19 @@ public String getJsonLd() { .add("@type", "Organization") .add("name", installationBrandName) ); + + List funderNames = getFunders(); + if (!funderNames.isEmpty()) { + JsonArrayBuilder funderArray = Json.createArrayBuilder(); + for (String funderName : funderNames) { + JsonObjectBuilder funder = Json.createObjectBuilder(); + funder.add("@type", "Organization"); + funder.add("name", funderName); + funderArray.add(funder); + } + job.add("funder", funderArray); + } + jsonLd = job.build().toString(); return jsonLd; } diff --git a/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java index 93ce09ff4d0..2ec42c254a9 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/SchemaDotOrgExporterTest.java @@ -129,6 +129,28 @@ public void setUp() { t.setParentDatasetFieldType(compoundSingleType); } compoundSingleType.setChildDatasetFieldTypes(childTypes); + + DatasetFieldType contributorType = datasetFieldTypeSvc.add(new DatasetFieldType("contributor", DatasetFieldType.FieldType.TEXT, true)); + Set contributorChildTypes = new HashSet<>(); + contributorChildTypes.add(datasetFieldTypeSvc.add(new DatasetFieldType("contributorName", DatasetFieldType.FieldType.TEXT, false))); + DatasetFieldType contributorTypes = datasetFieldTypeSvc.add(new DatasetFieldType("contributorType", DatasetFieldType.FieldType.TEXT, false)); + contributorTypes.setAllowControlledVocabulary(true); + contributorTypes.setControlledVocabularyValues(Arrays.asList( + // Why aren't these enforced? + new ControlledVocabularyValue(1l, "Data Collector", contributorTypes), + new ControlledVocabularyValue(2l, "Data Curator", contributorTypes), + new ControlledVocabularyValue(3l, "Data Manager", contributorTypes), + new ControlledVocabularyValue(3l, "Editor", contributorTypes), + new ControlledVocabularyValue(3l, "Funder", contributorTypes), + new ControlledVocabularyValue(3l, "Hosting Institution", contributorTypes) + // Etc. There are more. + )); + contributorChildTypes.add(datasetFieldTypeSvc.add(contributorTypes)); + for (DatasetFieldType t : contributorChildTypes) { + t.setParentDatasetFieldType(contributorType); + } + contributorType.setChildDatasetFieldTypes(contributorChildTypes); + } @After @@ -194,6 +216,9 @@ public void testExportDataset() throws Exception { assertEquals("https://librascholar.org", json2.getJsonObject("includedInDataCatalog").getString("url")); assertEquals("Organization", json2.getJsonObject("provider").getString("@type")); assertEquals("LibraScholar", json2.getJsonObject("provider").getString("name")); + assertEquals("Organization", json2.getJsonArray("funder").getJsonObject(0).getString("@type")); + assertEquals("National Science Foundation", json2.getJsonArray("funder").getJsonObject(0).getString("name")); + assertEquals(1, json2.getJsonArray("funder").size()); } /** diff --git a/src/test/resources/json/dataset-finch2.json b/src/test/resources/json/dataset-finch2.json index 57a4e12141e..56d1e828698 100644 --- a/src/test/resources/json/dataset-finch2.json +++ b/src/test/resources/json/dataset-finch2.json @@ -149,6 +149,41 @@ } } ] + }, + { + "typeName": "contributor", + "multiple": true, + "typeClass": "compound", + "value": [ + { + "contributorType": { + "typeName": "contributorType", + "multiple": false, + "typeClass": "controlledVocabulary", + "value": "Data Collector" + }, + "contributorName": { + "typeName": "contributorName", + "multiple": false, + "typeClass": "primitive", + "value": "Holmes, Sherlock" + } + }, + { + "contributorType": { + "typeName": "contributorType", + "multiple": false, + "typeClass": "controlledVocabulary", + "value": "Funder" + }, + "contributorName": { + "typeName": "contributorName", + "multiple": false, + "typeClass": "primitive", + "value": "National Science Foundation" + } + } + ] } ], "displayName": "Citation Metadata"