Skip to content

Commit 15fc52c

Browse files
committed
Implement null support for displayOnCreate field option
- Change displayOnCreate to nullable Boolean in DatasetFieldType - Update API and service methods to handle null displayOnCreate values - Modify native API documentation to explain null displayOnCreate behavior - Add null checks in MetadataBlockServiceBean queries
1 parent 190f604 commit 15fc52c

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

doc/sphinx-guides/source/api/native-api.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1117,7 +1117,7 @@ This endpoint expects a JSON with the following format::
11171117
"datasetFieldTypeName": "datasetFieldTypeName1",
11181118
"required": true,
11191119
"include": true,
1120-
"displayOnCreate": false // Note: This setting is ignored for required fields
1120+
"displayOnCreate": null
11211121
},
11221122
{
11231123
"datasetFieldTypeName": "datasetFieldTypeName2",
@@ -1129,6 +1129,7 @@ This endpoint expects a JSON with the following format::
11291129

11301130
.. note::
11311131
Required fields will always be displayed regardless of their displayOnCreate setting, as this is necessary for dataset creation.
1132+
When displayOnCreate is null, the field's default display behavior is used.
11321133

11331134
Parameters:
11341135

src/main/java/edu/harvard/iq/dataverse/DatasetFieldType.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -273,14 +273,14 @@ public void setValidationFormat(String validationFormat) {
273273
* Determines whether this field type is displayed in the form when creating
274274
* the Dataset (or only later when editing after the initial creation).
275275
*/
276-
@Column(name = "displayoncreate", nullable = false)
277-
private boolean displayOnCreate;
276+
@Column(name = "displayoncreate", nullable = true)
277+
private Boolean displayOnCreate;
278278

279-
public boolean isDisplayOnCreate() {
279+
public Boolean isDisplayOnCreate() {
280280
return displayOnCreate;
281281
}
282282

283-
public void setDisplayOnCreate(boolean displayOnCreate) {
283+
public void setDisplayOnCreate(Boolean displayOnCreate) {
284284
this.displayOnCreate = displayOnCreate;
285285
}
286286

src/main/java/edu/harvard/iq/dataverse/MetadataBlockServiceBean.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public List<MetadataBlock> listMetadataBlocksDisplayedOnCreate(Dataverse ownerDa
7272
// Predicate for displayOnCreate in the input level
7373
Predicate displayOnCreateInputLevelPredicate = criteriaBuilder.and(
7474
datasetFieldTypeInputLevelJoin.get("datasetFieldType").in(metadataBlockRoot.get("datasetFieldTypes")),
75+
criteriaBuilder.isNotNull(datasetFieldTypeInputLevelJoin.get("displayOnCreate")),
7576
criteriaBuilder.isTrue(datasetFieldTypeInputLevelJoin.get("displayOnCreate")));
7677

7778
// Predicate for required fields
@@ -82,6 +83,7 @@ public List<MetadataBlock> listMetadataBlocksDisplayedOnCreate(Dataverse ownerDa
8283
// Predicate for default displayOnCreate (when there is no input level)
8384
Predicate defaultDisplayOnCreatePredicate = criteriaBuilder.and(
8485
criteriaBuilder.not(criteriaBuilder.exists(inputLevelSubquery)),
86+
criteriaBuilder.isNotNull(datasetFieldTypeJoin.get("displayOnCreate")),
8587
criteriaBuilder.isTrue(datasetFieldTypeJoin.get("displayOnCreate")));
8688

8789
Predicate unionPredicate = criteriaBuilder.or(

src/main/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ public static String getDataverseLangDirectory() {
551551
*/
552552
@POST
553553
@Path("/setDisplayOnCreate")
554-
public Response setDisplayOnCreate(@QueryParam("datasetFieldType") String datasetFieldTypeIn, @QueryParam("setDisplayOnCreate") boolean setDisplayOnCreateIn) {
554+
public Response setDisplayOnCreate(@QueryParam("datasetFieldType") String datasetFieldTypeIn, @QueryParam("setDisplayOnCreate") Boolean setDisplayOnCreateIn) {
555555
DatasetFieldType dft = datasetFieldService.findByName(datasetFieldTypeIn);
556556
if (dft == null) {
557557
return error(Status.NOT_FOUND, "Cound not find a DatasetFieldType by looking up " + datasetFieldTypeIn);

0 commit comments

Comments
 (0)