added implementation for delete section

This commit is contained in:
Mykhaylo
2020-05-20 16:02:32 +02:00
parent ccfbbfce99
commit 76ff785b07

View File

@@ -10,10 +10,12 @@ package org.dspace.app.rest.submit.step;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger;
import org.dspace.app.rest.exception.UnprocessableEntityException;
import org.dspace.app.rest.model.MetadataValueRest;
import org.dspace.app.rest.model.patch.Operation;
import org.dspace.app.rest.model.patch.RemoveOperation;
import org.dspace.app.rest.model.step.DataDescribe;
import org.dspace.app.rest.submit.AbstractRestProcessingStep;
import org.dspace.app.rest.submit.SubmissionService;
@@ -114,16 +116,53 @@ public class DescribeStep extends org.dspace.submit.step.DescribeStep implements
public void doPatchProcessing(Context context, Request currentRequest, InProgressSubmission source, Operation op,
SubmissionStepConfig stepConf) throws Exception {
PatchOperation<MetadataValueRest> patchOperation = new PatchOperationFactory()
.instanceOf(DESCRIBE_STEP_METADATA_OPERATION_ENTRY, op.getOp());
String[] pathParts = op.getPath().substring(1).split("/");
DCInputSet inputConfig = inputReader.getInputsByFormName(stepConf.getId());
String[] split = patchOperation.getAbsolutePath(op.getPath()).split("/");
if (inputConfig.isFieldPresent(split[0])) {
patchOperation.perform(context, currentRequest, source, op);
if ("remove".equals(op.getOp()) && pathParts.length < 3) {
// manage delete all step fields
String[] path = op.getPath().substring(1).split("/", 3);
String configId = path[1];
List<String> fieldsName = getInputFieldsName(inputConfig, configId);
for (String fieldName : fieldsName) {
String fieldPath = op.getPath() + "/" + fieldName;
Operation fieldRemoveOp = new RemoveOperation(fieldPath);
PatchOperation<MetadataValueRest> patchOperation = new PatchOperationFactory()
.instanceOf(DESCRIBE_STEP_METADATA_OPERATION_ENTRY, fieldRemoveOp.getOp());
patchOperation.perform(context, currentRequest, source, fieldRemoveOp);
}
} else {
throw new UnprocessableEntityException("The attribute " + split[0] + " does not present in section "
+ inputConfig.getFormName());
PatchOperation<MetadataValueRest> patchOperation = new PatchOperationFactory()
.instanceOf(DESCRIBE_STEP_METADATA_OPERATION_ENTRY, op.getOp());
String[] split = patchOperation.getAbsolutePath(op.getPath()).split("/");
if (inputConfig.isFieldPresent(split[0])) {
patchOperation.perform(context, currentRequest, source, op);
} else {
throw new UnprocessableEntityException("The field " + split[0] + " is not present in section "
+ inputConfig.getFormName());
}
}
}
private List<String> getInputFieldsName(DCInputSet inputConfig, String configId) throws DCInputsReaderException {
List<String> fieldsName = new ArrayList<String>();
for (DCInput[] row : inputConfig.getFields()) {
for (DCInput input : row) {
if (input.isQualdropValue()) {
for (Object qualifier : input.getPairs()) {
fieldsName.add(input.getFieldName() + "." + (String) qualifier);
}
} else if (StringUtils.equalsIgnoreCase(input.getInputType(), "group") ||
StringUtils.equalsIgnoreCase(input.getInputType(), "inline-group")) {
log.info("Called child form:" + configId + "-" +
Utils.standardize(input.getSchema(), input.getElement(), input.getQualifier(), "-"));
DCInputSet inputConfigChild = inputReader.getInputsByFormName(configId + "-" + Utils
.standardize(input.getSchema(), input.getElement(), input.getQualifier(), "-"));
fieldsName.addAll(getInputFieldsName(inputConfigChild, configId));
} else {
fieldsName.add(input.getFieldName());
}
}
}
return fieldsName;
}
}