From 35e268fd40be51213002a4b0263e92c61ff83a03 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Wed, 28 May 2025 16:23:17 -0400 Subject: [PATCH 1/3] reduce duplicate code --- .../harvard/iq/dataverse/DatasetField.java | 67 ++++++------------- 1 file changed, 20 insertions(+), 47 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java index c276c043d9e..a117536cbce 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java @@ -433,9 +433,6 @@ public void setValidationMessage(String validationMessage) { private Boolean required; @Transient private Boolean hasRequiredChildren; - - @Transient - private Boolean hasRequiredChildrenDV; public boolean isRequired() { if (required == null) { @@ -478,70 +475,46 @@ public boolean isRequired() { return required; } - public boolean isHasRequiredChildrenDV() { - - if (hasRequiredChildrenDV == null) { - hasRequiredChildrenDV = false; + public boolean isHasRequiredChildren() { + if (hasRequiredChildren == null) { + hasRequiredChildren = this.datasetFieldType.isHasRequiredChildren() || checkRequiredChildren(false); } + return hasRequiredChildren; + } + public boolean isHasRequiredChildrenDV() { + return isHasRequiredChildren() && checkRequiredChildren(true); + } + + private boolean checkRequiredChildren(boolean checkDVOnly) { 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 + break; // we are at the root; which by defintion is metadata block root, regardless of the value } dv = dv.getOwner(); } List dftilListFirst = dv.getDataverseFieldTypeInputLevels(); - if (getDatasetFieldType().isHasChildren() && (!dftilListFirst.isEmpty())) { - for (DatasetFieldType child : getDatasetFieldType().getChildDatasetFieldTypes()) { - for (DataverseFieldTypeInputLevel dftilTest : dftilListFirst) { - if (child.equals(dftilTest.getDatasetFieldType())) { - //We only want to get it here if it is required by - //the DV and not by default at the installation/DB level - if (dftilTest.isRequired() && !child.isRequired()) { - hasRequiredChildrenDV = true; - break; - } - } - } - } - } - return hasRequiredChildrenDV; - } - - public boolean isHasRequiredChildren() { - if (hasRequiredChildren == null) { - hasRequiredChildren = false; - } - - if (this.datasetFieldType.isHasRequiredChildren()) { - hasRequiredChildren = true; - } - - 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())) { for (DatasetFieldType child : getDatasetFieldType().getChildDatasetFieldTypes()) { for (DataverseFieldTypeInputLevel dftilTest : dftilListFirst) { if (child.equals(dftilTest.getDatasetFieldType())) { if (dftilTest.isRequired()) { - hasRequiredChildren = true; + if (checkDVOnly) { + if (!child.isRequired()) { + return true; + } + } else { + return true; + } } } } } - } - return hasRequiredChildren; + } + return false; } public Dataverse getDataverse() { From 8a4388905740d7be1cb3d7782550582c8a3ace39 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Wed, 28 May 2025 17:43:28 -0400 Subject: [PATCH 2/3] minor tweaks --- .../edu/harvard/iq/dataverse/DatasetVersionUI.java | 9 +++++---- .../edu/harvard/iq/dataverse/MetadataBlock.java | 13 +++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java index 4b3f31fb4b5..f579fc9a6d1 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java @@ -458,10 +458,11 @@ public void setMetadataValueBlocks(DatasetVersion datasetVersion) { mdb.setEmpty(false); datasetFieldsForView.add(dsf); } - //Setting Local Display on Create on mdb when there are any set at dataverse level - if (dsf.getDatasetFieldType().getLocalDisplayOnCreate() != null && dsf.getDatasetFieldType().getLocalDisplayOnCreate()){ - mdb.setLocalDisplayOnCreate(true); - } + // Setting Local Display on Create on mdb when there are any set at dataverse + // level + if (dsf.getDatasetFieldType().shouldDisplayOnCreate()) { + mdb.setLocalDisplayOnCreate(true); + } } } diff --git a/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java b/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java index c1a9f41193c..77a842b23ce 100644 --- a/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java +++ b/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java @@ -101,17 +101,18 @@ 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 + //Localize case - e.g. being called in the context of a specific collection + if (getLocalDisplayOnCreate() != null){ + return getLocalDisplayOnCreate(); + } + // Non-localized case - the datasetFieldTypes are straight from the database and + // never have dsfType.localDsiplayOnCreate set. for (DatasetFieldType dsfType : datasetFieldTypes) { - boolean shouldDisplayOnCreate = dsfType.shouldDisplayOnCreate(); + boolean shouldDisplayOnCreate = dsfType.isDisplayOnCreate(); if (shouldDisplayOnCreate) { return true; } } - if (getLocalDisplayOnCreate() != null){ - return getLocalDisplayOnCreate(); - } return false; } From 2b56397b86e6a18c207f67cb53e16105cb0cf368 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 3 Jun 2025 14:27:57 -0400 Subject: [PATCH 3/3] avoid local var per review --- src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java b/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java index 77a842b23ce..c6bf01868c6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java +++ b/src/main/java/edu/harvard/iq/dataverse/MetadataBlock.java @@ -108,8 +108,7 @@ public boolean isDisplayOnCreate() { // Non-localized case - the datasetFieldTypes are straight from the database and // never have dsfType.localDsiplayOnCreate set. for (DatasetFieldType dsfType : datasetFieldTypes) { - boolean shouldDisplayOnCreate = dsfType.isDisplayOnCreate(); - if (shouldDisplayOnCreate) { + if (dsfType.isDisplayOnCreate()) { return true; } }