From 138a62a687759dc237ed9d0cd9be741ba26e931f Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Tue, 8 Apr 2025 12:04:21 -0400 Subject: [PATCH 01/10] #11391 fix mdb display on create --- .../harvard/iq/dataverse/DatasetVersionUI.java | 4 ++++ .../iq/dataverse/ManageTemplatesPage.java | 2 +- .../edu/harvard/iq/dataverse/MetadataBlock.java | 16 ++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java index f1ddf2304b7..76ddbf111b9 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java @@ -458,6 +458,10 @@ public void setMetadataValueBlocks(DatasetVersion datasetVersion) { mdb.setEmpty(false); datasetFieldsForView.add(dsf); } + //Seeting Local Display on Create on mdb when there are any set at dataverse level + if ( dsf.getDatasetFieldType().getLocalDisplayOnCreate() != null ){ + mdb.setLocalDisplayOnCreate(dsf.getDatasetFieldType().getLocalDisplayOnCreate()); + } } } diff --git a/src/main/java/edu/harvard/iq/dataverse/ManageTemplatesPage.java b/src/main/java/edu/harvard/iq/dataverse/ManageTemplatesPage.java index 98369a2eab3..fa2e9fb55b8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/ManageTemplatesPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/ManageTemplatesPage.java @@ -121,7 +121,7 @@ public String cloneTemplate(Template templateIn) { Template newOne = templateIn.cloneNewTemplate(templateIn); String name = BundleUtil.getStringFromBundle("page.copy") +" " + templateIn.getName(); newOne.setName(name); - newOne.setUsageCount(new Long(0)); + newOne.setUsageCount(Long.valueOf(0)); newOne.setCreateTime(new Timestamp(new Date().getTime())); newOne.setDataverse(dataverse); diff --git a/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java b/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java index c5a6d03c5d7..c1a9f41193c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java +++ b/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java @@ -101,14 +101,30 @@ public void setDatasetFieldTypes(List datasetFieldTypes) { } public boolean isDisplayOnCreate() { + // relying on "should" doesn't seem to work in context of a template + // adding a transient that is updated in the DatasetVersionUI to fix for (DatasetFieldType dsfType : datasetFieldTypes) { boolean shouldDisplayOnCreate = dsfType.shouldDisplayOnCreate(); if (shouldDisplayOnCreate) { return true; } } + if (getLocalDisplayOnCreate() != null){ + return getLocalDisplayOnCreate(); + } return false; } + + @Transient + private Boolean localDisplayOnCreate; + + public Boolean getLocalDisplayOnCreate() { + return localDisplayOnCreate; + } + + public void setLocalDisplayOnCreate(Boolean localDisplayOnCreate) { + this.localDisplayOnCreate = localDisplayOnCreate; + } public String getDisplayName() { return displayName; From 88d72cff93d8ab6f933becd1432f6dacbb85d63e Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Tue, 8 Apr 2025 13:02:44 -0400 Subject: [PATCH 02/10] typo --- src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java index 76ddbf111b9..9a42eb5932b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java @@ -458,7 +458,7 @@ public void setMetadataValueBlocks(DatasetVersion datasetVersion) { mdb.setEmpty(false); datasetFieldsForView.add(dsf); } - //Seeting Local Display on Create on mdb when there are any set at dataverse level + //Setting Local Display on Create on mdb when there are any set at dataverse level if ( dsf.getDatasetFieldType().getLocalDisplayOnCreate() != null ){ mdb.setLocalDisplayOnCreate(dsf.getDatasetFieldType().getLocalDisplayOnCreate()); } From 0c7db7635b82e77d35e744f0973e3107c7ab8d0f Mon Sep 17 00:00:00 2001 From: Stephen Kraffmiller Date: Wed, 16 Apr 2025 11:08:35 -0400 Subject: [PATCH 03/10] #11391 add logic for conditionally required subfields --- .../harvard/iq/dataverse/DatasetField.java | 41 +++++++++++++++++-- src/main/webapp/metadataFragment.xhtml | 4 +- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java index 4bf6c00f199..7e50b037afc 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java @@ -433,11 +433,10 @@ public void setValidationMessage(String validationMessage) { private Boolean required; @Transient private Boolean hasRequiredChildren; - + public boolean isRequired() { if (required == null) { - required = false; - + required = false; if (this.datasetFieldType.isRequired()) { required = true; } else { @@ -449,7 +448,7 @@ public boolean isRequired() { } dv = dv.getOwner(); } - + List dftilListFirst = dv.getDataverseFieldTypeInputLevels(); for (DataverseFieldTypeInputLevel dsftil : dftilListFirst) { if (dsftil.getDatasetFieldType().equals(this.datasetFieldType)) { @@ -464,11 +463,45 @@ public boolean isRequired() { { required = false; } + + if (this.datasetFieldType.isCompound() && allChildrenRequired()){ + required = true; + } + } return required; } + private boolean allChildrenRequired() { + boolean allChildrenRequired = false; + + + Dataverse dv = getDataverse(); + while (!dv.isMetadataBlockRoot()) { + if (dv.getOwner() == null) { + break; // we are at the root; which by defintion is metadata blcok root, regarldess of the value + } + dv = dv.getOwner(); + } + + List dftilListFirst = dv.getDataverseFieldTypeInputLevels(); + + if (getDatasetFieldType().isHasChildren() && (!dftilListFirst.isEmpty())) { + allChildrenRequired = true; + for (DatasetFieldType child : getDatasetFieldType().getChildDatasetFieldTypes()) { + for (DataverseFieldTypeInputLevel dftilTest : dftilListFirst) { + if (child.equals(dftilTest.getDatasetFieldType())) { + if (!dftilTest.isRequired()) { + allChildrenRequired = false; + } + } + } + } + } + return allChildrenRequired; + } + public boolean isHasRequiredChildren() { if (hasRequiredChildren == null) { hasRequiredChildren = false; diff --git a/src/main/webapp/metadataFragment.xhtml b/src/main/webapp/metadataFragment.xhtml index f2560b70010..cbceb90e4b1 100755 --- a/src/main/webapp/metadataFragment.xhtml +++ b/src/main/webapp/metadataFragment.xhtml @@ -244,7 +244,7 @@
+ jsf:rendered="#{((editMode == 'METADATA' or dsf.datasetFieldType.shouldDisplayOnCreate() or !dsf.isEmpty() or dsf.required or dsf.hasRequiredChildren)) or (!datasetPage and dsf.include)}"> @@ -366,7 +366,7 @@