From 06364873cad78ba03c1521243c8862b3e36708a5 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Mon, 27 Sep 2021 18:11:55 +0300 Subject: [PATCH] Fix issue with unordered multiplicity fields --- .../main/java/eu/eudat/logic/managers/DatasetManager.java | 2 +- .../eudat/logic/utilities/documents/word/WordBuilder.java | 7 +++++-- .../data/user/components/datasetprofile/FieldSet.java | 4 ++-- .../dataset-description-form.model.ts | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index b96934677..d3104b350 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -741,7 +741,7 @@ public class DatasetManager { } private String propertiesModelToString(PagedDatasetProfile pagedDatasetProfile) { - Map values = new HashMap(); + Map values = new LinkedHashMap<>(); pagedDatasetProfile.toMap(values); JSONObject jobject = new JSONObject(values); return jobject.toString(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index 035c0a2a0..e14dc5efa 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.math.BigInteger; import java.util.*; +import java.util.stream.Collectors; public class WordBuilder { private static final Logger logger = LoggerFactory.getLogger(WordBuilder.class); @@ -178,7 +179,8 @@ public class WordBuilder { } hasValue = createFields(compositeField.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService); if (compositeField.getMultiplicityItems() != null && !compositeField.getMultiplicityItems().isEmpty()) { - for (FieldSet multiplicityFieldset : compositeField.getMultiplicityItems()) { + List
list = compositeField.getMultiplicityItems().stream().sorted(Comparator.comparingInt(FieldSet::getOrdinal)).collect(Collectors.toList()); + for (FieldSet multiplicityFieldset : list) { hasValue = createFields(multiplicityFieldset.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService); } } @@ -198,7 +200,8 @@ public class WordBuilder { private Boolean createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { if (createListing) this.addListing(mainDocumentPart, indent, false, false); boolean hasValue = false; - for (Field field: fields) { + List tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList()); + for (Field field: tempFields) { if (visibilityRuleService.isElementVisible(field.getId())) { if (!createListing) { try { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java index 2dfd6020b..80ece4c30 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/FieldSet.java @@ -175,12 +175,12 @@ public class FieldSet implements Comparable, PropertiesModelBuilder, ViewStyleDe private FieldSet CloneForMultiplicity2(List key, Map properties,String[] ids, int index){ FieldSet newFieldSet = new FieldSet(); - newFieldSet.id = ids[0]+"_"+ids[1]+"_"+ids[2]; + newFieldSet.id = ids[0]+"_"+ids[1]+"_"+ids[2] + (ids.length > 4 ? "_" + ids[3] : ""); newFieldSet.description = this.description; newFieldSet.extendedDescription = this.extendedDescription; newFieldSet.additionalInformation=this.additionalInformation; newFieldSet.title = this.title; - newFieldSet.ordinal = this.ordinal; + newFieldSet.ordinal = ids.length > 4 ? Integer.valueOf(ids[3]) : this.ordinal; newFieldSet.fields = new LinkedList(); for (Field field: this.fields) { diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts index de0e2e870..993b73227 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/dataset-description-form.model.ts @@ -196,7 +196,7 @@ export class DatasetDescriptionCompositeFieldEditorModel extends BaseFormModel { cloneForMultiplicity(item: CompositeField, ordinal: number, idMappings:{old:string, new:string}[] = []): DatasetDescriptionCompositeFieldEditorModel { const newItem: DatasetDescriptionCompositeFieldEditorModel = new DatasetDescriptionCompositeFieldEditorModel(); - newItem.id = 'multiple_' + item.id + '_' + Guid.create(); + newItem.id = 'multiple_' + item.id + '_' + Guid.create() + '_' + ordinal; idMappings.push({old: item.id, new: newItem.id }); item.fields.forEach((field, index) => {