mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-18 15:33:09 +00:00
Fixed MockMetadataConverter issue where multiple metadatavalues for a single metadatafield would get lost due to sorting issues
This commit is contained in:
@@ -9,6 +9,7 @@ package org.dspace.app.rest.converter;
|
|||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
@@ -42,26 +43,26 @@ public class MockMetadataConverter implements Converter<List<MockMetadataValue>,
|
|||||||
@Override
|
@Override
|
||||||
public MetadataRest convert(List<MockMetadataValue> metadataValueList) {
|
public MetadataRest convert(List<MockMetadataValue> metadataValueList) {
|
||||||
// Convert each value to a DTO while retaining place order in a map of key -> SortedSet
|
// Convert each value to a DTO while retaining place order in a map of key -> SortedSet
|
||||||
Map<String, SortedSet<MetadataValueRest>> mapOfSortedSets = new HashMap<>();
|
Map<String, List<MetadataValueRest>> mapOfLists = new HashMap<>();
|
||||||
for (MockMetadataValue metadataValue : metadataValueList) {
|
for (MockMetadataValue metadataValue : metadataValueList) {
|
||||||
String key = metadataValue.getSchema() + "." + metadataValue.getElement();
|
String key = metadataValue.getSchema() + "." + metadataValue.getElement();
|
||||||
if (StringUtils.isNotBlank(metadataValue.getQualifier())) {
|
if (StringUtils.isNotBlank(metadataValue.getQualifier())) {
|
||||||
key += "." + metadataValue.getQualifier();
|
key += "." + metadataValue.getQualifier();
|
||||||
}
|
}
|
||||||
SortedSet<MetadataValueRest> set = mapOfSortedSets.get(key);
|
List<MetadataValueRest> list = mapOfLists.get(key);
|
||||||
if (set == null) {
|
if (list == null) {
|
||||||
set = new TreeSet<>(Comparator.comparingInt(MetadataValueRest::getPlace));
|
list = new LinkedList();
|
||||||
mapOfSortedSets.put(key, set);
|
mapOfLists.put(key, list);
|
||||||
}
|
}
|
||||||
set.add(valueConverter.convert(metadataValue));
|
list.add(valueConverter.convert(metadataValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
MetadataRest metadataRest = new MetadataRest();
|
MetadataRest metadataRest = new MetadataRest();
|
||||||
|
|
||||||
// Populate MetadataRest's map of key -> List while respecting SortedSet's order
|
// Populate MetadataRest's map of key -> List while respecting SortedSet's order
|
||||||
Map<String, List<MetadataValueRest>> mapOfLists = metadataRest.getMap();
|
Map<String, List<MetadataValueRest>> metadataRestMap = metadataRest.getMap();
|
||||||
for (Map.Entry<String, SortedSet<MetadataValueRest>> entry : mapOfSortedSets.entrySet()) {
|
for (Map.Entry<String, List<MetadataValueRest>> entry : mapOfLists.entrySet()) {
|
||||||
mapOfLists.put(entry.getKey(), entry.getValue().stream().collect(Collectors.toList()));
|
metadataRestMap.put(entry.getKey(), entry.getValue().stream().collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return metadataRest;
|
return metadataRest;
|
||||||
|
Reference in New Issue
Block a user