diff --git a/dspace-api/src/main/java/org/dspace/app/util/DCInput.java b/dspace-api/src/main/java/org/dspace/app/util/DCInput.java index 9c7f4396c96c..9fd306d1aaf4 100644 --- a/dspace-api/src/main/java/org/dspace/app/util/DCInput.java +++ b/dspace-api/src/main/java/org/dspace/app/util/DCInput.java @@ -163,6 +163,11 @@ public class DCInput { */ private ComplexDefinition complexDefinition = null; + /** + * the dropdown input type could have defined a default value + */ + private String defaultValue = ""; + private boolean isRelationshipField = false; private boolean isMetadataField = false; private String relationshipType = null; @@ -264,6 +269,7 @@ public DCInput(Map fieldMap, Map> listMap, externalSources.add(StringUtils.trim(source)); } } + defaultValue = fieldMap.get("default-value"); } @@ -607,6 +613,24 @@ public ComplexDefinition getComplexDefinition() { return this.complexDefinition; } + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public boolean hasDefaultValue() { + return StringUtils.isNotEmpty(this.getDefaultValue()); + } + + public boolean isDropdownValue() { + return "dropdown".equals(getInputType()); + } + + + /** * Convert complex definition HashMap to the ordered JSON string * @return complex definition in the JSON string which will be parsed in the FE diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java index a54473e66d1e..8b0054e71775 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/submit/step/DescribeStep.java @@ -7,6 +7,7 @@ */ package org.dspace.app.rest.submit.step; +import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -35,12 +36,14 @@ import org.dspace.app.rest.submit.SubmissionService; import org.dspace.app.rest.submit.factory.PatchOperationFactory; import org.dspace.app.rest.submit.factory.impl.PatchOperation; +import org.dspace.app.rest.utils.ContextUtil; import org.dspace.app.util.DCInput; import org.dspace.app.util.DCInputSet; import org.dspace.app.util.DCInputsReader; import org.dspace.app.util.DCInputsReaderException; import org.dspace.app.util.SubmissionStepConfig; import org.dspace.content.InProgressSubmission; +import org.dspace.content.Item; import org.dspace.content.MetadataValue; import org.dspace.content.RelationshipMetadataService; import org.dspace.content.factory.ContentServiceFactory; @@ -48,6 +51,7 @@ import org.dspace.core.Utils; import org.dspace.services.ConfigurationService; import org.dspace.services.factory.DSpaceServicesFactory; +import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; /** @@ -118,6 +122,19 @@ private void readField(InProgressSubmission obj, SubmissionStepConfig config, Da for (String fieldName : fieldsName) { List mdv = itemService.getMetadataByMetadataString(obj.getItem(), fieldName); + // Use default value if the input type is dropdown and has defined a default value + if (CollectionUtils.isEmpty(mdv) && input.isDropdownValue() && input.hasDefaultValue()) { + Context context = ContextUtil.obtainCurrentRequestContext(); + try { + MetadataValue mv = itemService.addMetadata(context, obj.getItem(), input.getSchema(), + input.getElement(), input.getQualifier(), Item.ANY, input.getDefaultValue()); + mdv.add(mv); + } catch (SQLException e) { + log.error("Cannot create a metadata value object with the default value, because: " + + "{}", e.getMessage()); + throw new RuntimeException(e); + } + } for (MetadataValue md : mdv) { MetadataValueRest dto = new MetadataValueRest(); dto.setAuthority(md.getAuthority()); diff --git a/dspace/config/submission-forms.dtd b/dspace/config/submission-forms.dtd index b287583e76b5..c44e52fa07a2 100644 --- a/dspace/config/submission-forms.dtd +++ b/dspace/config/submission-forms.dtd @@ -9,7 +9,7 @@ - + + @@ -41,6 +42,7 @@ + diff --git a/dspace/config/submission-forms.xml b/dspace/config/submission-forms.xml index 25ec8554ebc6..2cdef48986ce 100644 --- a/dspace/config/submission-forms.xml +++ b/dspace/config/submission-forms.xml @@ -2023,7 +2023,9 @@ false + dropdown + teachingMaterials This is here to autofill a value. The value should not be changed. Please select a resource type for your submission.