diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java index 4bf6c00f199..c276c043d9e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetField.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetField.java @@ -433,11 +433,13 @@ public void setValidationMessage(String validationMessage) { private Boolean required; @Transient private Boolean hasRequiredChildren; - + + @Transient + private Boolean hasRequiredChildrenDV; + public boolean isRequired() { if (required == null) { - required = false; - + required = false; if (this.datasetFieldType.isRequired()) { required = true; } else { @@ -464,11 +466,51 @@ public boolean isRequired() { { required = false; } + + //this is needed to enforce required children validation and display on create #11421 + //set the parent to required only if a child is set to required at the DV level + if (this.datasetFieldType.isCompound() && isHasRequiredChildrenDV()) { + required = true; + } + } return required; } + public boolean isHasRequiredChildrenDV() { + + if (hasRequiredChildrenDV == null) { + hasRequiredChildrenDV = 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())) { + 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; diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java index c3be6ed8f60..8b301f2467e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java @@ -2132,8 +2132,9 @@ private String init(boolean initFull) { ownerId = dataset.getOwner().getId(); datasetNextMajorVersion = this.dataset.getNextMajorVersionString(); datasetNextMinorVersion = this.dataset.getNextMinorVersionString(); - datasetVersionUI = datasetVersionUI.initDatasetVersionUI(workingVersion, false); updateDatasetFieldInputLevels(); + datasetVersionUI = datasetVersionUI.initDatasetVersionUI(workingVersion, false); + setExistReleasedVersion(resetExistRealeaseVersion()); //moving setVersionTabList to tab change event //setVersionTabList(resetVersionTabList()); diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java b/src/main/java/edu/harvard/iq/dataverse/DatasetVersionUI.java index f1ddf2304b7..4b3f31fb4b5 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); } + //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); + } } } 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; diff --git a/src/main/webapp/metadataFragment.xhtml b/src/main/webapp/metadataFragment.xhtml index f2560b70010..df497e890e8 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)}">