From d66c3da7526f03c2dd6ee182d01ca5256dd32be0 Mon Sep 17 00:00:00 2001 From: Raf Ponsaerts Date: Fri, 25 Oct 2019 13:54:08 +0200 Subject: [PATCH] Fixed MockMetadataConverter issue where multiple metadatavalues for a single metadatafield would get lost due to sorting issues --- .../rest/converter/MockMetadataConverter.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/MockMetadataConverter.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/MockMetadataConverter.java index 148ea18968..e662b48c91 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/MockMetadataConverter.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/MockMetadataConverter.java @@ -9,6 +9,7 @@ package org.dspace.app.rest.converter; import java.util.Comparator; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.SortedSet; @@ -42,26 +43,26 @@ public class MockMetadataConverter implements Converter, @Override public MetadataRest convert(List metadataValueList) { // Convert each value to a DTO while retaining place order in a map of key -> SortedSet - Map> mapOfSortedSets = new HashMap<>(); + Map> mapOfLists = new HashMap<>(); for (MockMetadataValue metadataValue : metadataValueList) { String key = metadataValue.getSchema() + "." + metadataValue.getElement(); if (StringUtils.isNotBlank(metadataValue.getQualifier())) { key += "." + metadataValue.getQualifier(); } - SortedSet set = mapOfSortedSets.get(key); - if (set == null) { - set = new TreeSet<>(Comparator.comparingInt(MetadataValueRest::getPlace)); - mapOfSortedSets.put(key, set); + List list = mapOfLists.get(key); + if (list == null) { + list = new LinkedList(); + mapOfLists.put(key, list); } - set.add(valueConverter.convert(metadataValue)); + list.add(valueConverter.convert(metadataValue)); } MetadataRest metadataRest = new MetadataRest(); // Populate MetadataRest's map of key -> List while respecting SortedSet's order - Map> mapOfLists = metadataRest.getMap(); - for (Map.Entry> entry : mapOfSortedSets.entrySet()) { - mapOfLists.put(entry.getKey(), entry.getValue().stream().collect(Collectors.toList())); + Map> metadataRestMap = metadataRest.getMap(); + for (Map.Entry> entry : mapOfLists.entrySet()) { + metadataRestMap.put(entry.getKey(), entry.getValue().stream().collect(Collectors.toList())); } return metadataRest;