Skip to content

Commit

Permalink
fix JsonPrinter and failing tests #10519
Browse files Browse the repository at this point in the history
JsonPrinter was edited in #10764 and #11066 which were merged five and
two weeks ago, respectively. This caused merge conflicts which should
be resolved correctly now. In this commit, we are starting with
JsonPrinter as of the most recent "develop" branch commit (7fdb21a)
and adding in our DatasetType changes.

PR #10764 resulted in the number of metadata fields being reduced from
80 to 35 and this commit make the same change in an assertion.
  • Loading branch information
pdurbin committed Jan 23, 2025
1 parent a9ed64e commit faf1d37
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 11 deletions.
37 changes: 29 additions & 8 deletions src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import jakarta.ejb.Singleton;
import jakarta.json.JsonArray;
import jakarta.json.JsonObject;
import java.util.function.Predicate;

/**
* Convert objects to Json.
Expand Down Expand Up @@ -609,10 +610,10 @@ public static JsonArrayBuilder json(List<MetadataBlock> metadataBlocks, boolean
return json(metadataBlocks, returnDatasetFieldTypes, printOnlyDisplayedOnCreateDatasetFieldTypes, null, null);
}

public static JsonArrayBuilder json(List<MetadataBlock> metadataBlocks, boolean returnDatasetFieldTypes, boolean printOnlyDisplayedOnCreateDatasetFieldTypes, Dataverse dataverse, DatasetType datasetType) {
public static JsonArrayBuilder json(List<MetadataBlock> metadataBlocks, boolean returnDatasetFieldTypes, boolean printOnlyDisplayedOnCreateDatasetFieldTypes, Dataverse ownerDataverse, DatasetType datasetType) {
JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
for (MetadataBlock metadataBlock : metadataBlocks) {
arrayBuilder.add(returnDatasetFieldTypes ? json(metadataBlock, printOnlyDisplayedOnCreateDatasetFieldTypes, dataverse, datasetType) : brief.json(metadataBlock));
arrayBuilder.add(returnDatasetFieldTypes ? json(metadataBlock, printOnlyDisplayedOnCreateDatasetFieldTypes, ownerDataverse, datasetType) : brief.json(metadataBlock));
}
return arrayBuilder;
}
Expand Down Expand Up @@ -643,7 +644,7 @@ public static JsonObjectBuilder json(MetadataBlock metadataBlock) {
return json(metadataBlock, false, null, null);
}

public static JsonObjectBuilder json(MetadataBlock metadataBlock, boolean printOnlyDisplayedOnCreateDatasetFieldTypes, Dataverse dataverse, DatasetType datasetType) {
public static JsonObjectBuilder json(MetadataBlock metadataBlock, boolean printOnlyDisplayedOnCreateDatasetFieldTypes, Dataverse ownerDataverse, DatasetType datasetType) {
JsonObjectBuilder jsonObjectBuilder = jsonObjectBuilder()
.add("id", metadataBlock.getId())
.add("name", metadataBlock.getName())
Expand All @@ -652,9 +653,9 @@ public static JsonObjectBuilder json(MetadataBlock metadataBlock, boolean printO

List<DatasetFieldType> datasetFieldTypesList;

if (dataverse != null) {
if (ownerDataverse != null) {
datasetFieldTypesList = datasetFieldService.findAllInMetadataBlockAndDataverse(
metadataBlock, dataverse, printOnlyDisplayedOnCreateDatasetFieldTypes, datasetType);
metadataBlock, ownerDataverse, printOnlyDisplayedOnCreateDatasetFieldTypes, datasetType);
} else {
datasetFieldTypesList = printOnlyDisplayedOnCreateDatasetFieldTypes
? datasetFieldService.findAllDisplayedOnCreateInMetadataBlock(metadataBlock)
Expand All @@ -664,10 +665,30 @@ public static JsonObjectBuilder json(MetadataBlock metadataBlock, boolean printO
Set<DatasetFieldType> datasetFieldTypes = filterOutDuplicateDatasetFieldTypes(datasetFieldTypesList);

JsonObjectBuilder fieldsBuilder = Json.createObjectBuilder();
for (DatasetFieldType datasetFieldType : datasetFieldTypes) {
fieldsBuilder.add(datasetFieldType.getName(), json(datasetFieldType, dataverse));

Predicate<DatasetFieldType> isNoChild = element -> element.isChild() == false;
List<DatasetFieldType> childLessList = metadataBlock.getDatasetFieldTypes().stream().filter(isNoChild).toList();
Set<DatasetFieldType> datasetFieldTypesNoChildSorted = new TreeSet<>(childLessList);

for (DatasetFieldType datasetFieldType : datasetFieldTypesNoChildSorted) {

Long datasetFieldTypeId = datasetFieldType.getId();
boolean requiredAsInputLevelInOwnerDataverse = ownerDataverse != null && ownerDataverse.isDatasetFieldTypeRequiredAsInputLevel(datasetFieldTypeId);
boolean includedAsInputLevelInOwnerDataverse = ownerDataverse != null && ownerDataverse.isDatasetFieldTypeIncludedAsInputLevel(datasetFieldTypeId);
boolean isNotInputLevelInOwnerDataverse = ownerDataverse != null && !ownerDataverse.isDatasetFieldTypeInInputLevels(datasetFieldTypeId);

DatasetFieldType parentDatasetFieldType = datasetFieldType.getParentDatasetFieldType();
boolean isRequired = parentDatasetFieldType == null ? datasetFieldType.isRequired() : parentDatasetFieldType.isRequired();

boolean displayCondition = printOnlyDisplayedOnCreateDatasetFieldTypes
? (datasetFieldType.isDisplayOnCreate() || isRequired || requiredAsInputLevelInOwnerDataverse)
: ownerDataverse == null || includedAsInputLevelInOwnerDataverse || isNotInputLevelInOwnerDataverse;

if (displayCondition) {
fieldsBuilder.add(datasetFieldType.getName(), json(datasetFieldType, ownerDataverse));
}
}

jsonObjectBuilder.add("fields", fieldsBuilder);
return jsonObjectBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -378,8 +378,8 @@ public void testUpdateDatasetTypeLinksWithMetadataBlocks() {
.statusCode(OK.getStatusCode())
.body("data[0].name", is("citation"))
.body("data[1].name", is("geospatial"))
.body("data[0].fields.size()", is(80))
.body("data[1].fields.size()", is(11));
.body("data[0].fields.size()", is(35))
.body("data[1].fields.size()", is(3));

System.out.println("listing " + dataverseAlias + " collection blocks and inner dataset field types, with display on create and return dataset field types set to true using dataset type " + randomName);
listBlocks = UtilIT.listMetadataBlocks(dataverseAlias, true, true, randomName, apiToken);
Expand All @@ -388,7 +388,7 @@ public void testUpdateDatasetTypeLinksWithMetadataBlocks() {
.statusCode(OK.getStatusCode())
.body("data[0].name", is("citation"))
.body("data[1].name", is("geospatial"))
.body("data[0].fields.size()", is(28))
.body("data[0].fields.size()", is(10))
.body("data[1].fields.size()", is(0)); // There are no fields required or with displayOnCreate=true in geospatial.tsv

// We send an empty array to mean "delete or clear all"
Expand Down

0 comments on commit faf1d37

Please sign in to comment.