Skip to content

Commit 5db10ea

Browse files
authored
Merge pull request #11411 from IQSS/11391-displayOnCreate-with-template
11391 display on create with template
2 parents 1d7ea40 + 988a7bb commit 5db10ea

File tree

6 files changed

+69
-6
lines changed

6 files changed

+69
-6
lines changed

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

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -433,11 +433,13 @@ public void setValidationMessage(String validationMessage) {
433433
private Boolean required;
434434
@Transient
435435
private Boolean hasRequiredChildren;
436-
436+
437+
@Transient
438+
private Boolean hasRequiredChildrenDV;
439+
437440
public boolean isRequired() {
438441
if (required == null) {
439-
required = false;
440-
442+
required = false;
441443
if (this.datasetFieldType.isRequired()) {
442444
required = true;
443445
} else {
@@ -464,11 +466,51 @@ public boolean isRequired() {
464466
{
465467
required = false;
466468
}
469+
470+
//this is needed to enforce required children validation and display on create #11421
471+
//set the parent to required only if a child is set to required at the DV level
472+
if (this.datasetFieldType.isCompound() && isHasRequiredChildrenDV()) {
473+
required = true;
474+
}
475+
467476
}
468477

469478
return required;
470479
}
471480

481+
public boolean isHasRequiredChildrenDV() {
482+
483+
if (hasRequiredChildrenDV == null) {
484+
hasRequiredChildrenDV = false;
485+
}
486+
487+
Dataverse dv = getDataverse();
488+
while (!dv.isMetadataBlockRoot()) {
489+
if (dv.getOwner() == null) {
490+
break; // we are at the root; which by defintion is metadata blcok root, regarldess of the value
491+
}
492+
dv = dv.getOwner();
493+
}
494+
495+
List<DataverseFieldTypeInputLevel> dftilListFirst = dv.getDataverseFieldTypeInputLevels();
496+
497+
if (getDatasetFieldType().isHasChildren() && (!dftilListFirst.isEmpty())) {
498+
for (DatasetFieldType child : getDatasetFieldType().getChildDatasetFieldTypes()) {
499+
for (DataverseFieldTypeInputLevel dftilTest : dftilListFirst) {
500+
if (child.equals(dftilTest.getDatasetFieldType())) {
501+
//We only want to get it here if it is required by
502+
//the DV and not by default at the installation/DB level
503+
if (dftilTest.isRequired() && !child.isRequired()) {
504+
hasRequiredChildrenDV = true;
505+
break;
506+
}
507+
}
508+
}
509+
}
510+
}
511+
return hasRequiredChildrenDV;
512+
}
513+
472514
public boolean isHasRequiredChildren() {
473515
if (hasRequiredChildren == null) {
474516
hasRequiredChildren = false;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2132,8 +2132,9 @@ private String init(boolean initFull) {
21322132
ownerId = dataset.getOwner().getId();
21332133
datasetNextMajorVersion = this.dataset.getNextMajorVersionString();
21342134
datasetNextMinorVersion = this.dataset.getNextMinorVersionString();
2135-
datasetVersionUI = datasetVersionUI.initDatasetVersionUI(workingVersion, false);
21362135
updateDatasetFieldInputLevels();
2136+
datasetVersionUI = datasetVersionUI.initDatasetVersionUI(workingVersion, false);
2137+
21372138
setExistReleasedVersion(resetExistRealeaseVersion());
21382139
//moving setVersionTabList to tab change event
21392140
//setVersionTabList(resetVersionTabList());

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,10 @@ public void setMetadataValueBlocks(DatasetVersion datasetVersion) {
458458
mdb.setEmpty(false);
459459
datasetFieldsForView.add(dsf);
460460
}
461+
//Setting Local Display on Create on mdb when there are any set at dataverse level
462+
if (dsf.getDatasetFieldType().getLocalDisplayOnCreate() != null && dsf.getDatasetFieldType().getLocalDisplayOnCreate()){
463+
mdb.setLocalDisplayOnCreate(true);
464+
}
461465
}
462466
}
463467

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public String cloneTemplate(Template templateIn) {
121121
Template newOne = templateIn.cloneNewTemplate(templateIn);
122122
String name = BundleUtil.getStringFromBundle("page.copy") +" " + templateIn.getName();
123123
newOne.setName(name);
124-
newOne.setUsageCount(new Long(0));
124+
newOne.setUsageCount(Long.valueOf(0));
125125
newOne.setCreateTime(new Timestamp(new Date().getTime()));
126126
newOne.setDataverse(dataverse);
127127

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,30 @@ public void setDatasetFieldTypes(List<DatasetFieldType> datasetFieldTypes) {
101101
}
102102

103103
public boolean isDisplayOnCreate() {
104+
// relying on "should" doesn't seem to work in context of a template
105+
// adding a transient that is updated in the DatasetVersionUI to fix
104106
for (DatasetFieldType dsfType : datasetFieldTypes) {
105107
boolean shouldDisplayOnCreate = dsfType.shouldDisplayOnCreate();
106108
if (shouldDisplayOnCreate) {
107109
return true;
108110
}
109111
}
112+
if (getLocalDisplayOnCreate() != null){
113+
return getLocalDisplayOnCreate();
114+
}
110115
return false;
111116
}
117+
118+
@Transient
119+
private Boolean localDisplayOnCreate;
120+
121+
public Boolean getLocalDisplayOnCreate() {
122+
return localDisplayOnCreate;
123+
}
124+
125+
public void setLocalDisplayOnCreate(Boolean localDisplayOnCreate) {
126+
this.localDisplayOnCreate = localDisplayOnCreate;
127+
}
112128

113129
public String getDisplayName() {
114130
return displayName;

src/main/webapp/metadataFragment.xhtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@
244244
<div class="panel-body">
245245
<ui:repeat value="#{metadataBlockVal.value}" var="dsf" varStatus="curField">
246246
<div class="form-group" role="group"
247-
jsf:rendered="#{((editMode == 'METADATA' or dsf.datasetFieldType.shouldDisplayOnCreate() or !dsf.isEmpty() or dsf.required) and dsf.include) or (!datasetPage and dsf.include)}">
247+
jsf:rendered="#{((editMode == 'METADATA' or dsf.datasetFieldType.shouldDisplayOnCreate() or !dsf.isEmpty() or dsf.required or dsf.hasRequiredChildren)) or (!datasetPage and dsf.include)}">
248248
<!-- Primitive fields -->
249249
<p:fragment id="editPrimitiveValueFragment" rendered="#{dsf.datasetFieldType.primitive}">
250250
<p:autoUpdate/>

0 commit comments

Comments
 (0)