diff --git a/dspace-api/src/main/java/org/dspace/importer/external/metadatamapping/contributor/CombinedMetadatumContributor.java b/dspace-api/src/main/java/org/dspace/importer/external/metadatamapping/contributor/CombinedMetadatumContributor.java index 0dfa5c05e2f..564ace9418e 100644 --- a/dspace-api/src/main/java/org/dspace/importer/external/metadatamapping/contributor/CombinedMetadatumContributor.java +++ b/dspace-api/src/main/java/org/dspace/importer/external/metadatamapping/contributor/CombinedMetadatumContributor.java @@ -78,20 +78,30 @@ public Collection contributeMetadata(T t) { for (MetadataContributor metadatumContributor : metadatumContributors) { LinkedList metadatums = new LinkedList<>(metadatumContributor.contributeMetadata(t)); - metadatumLists.add(metadatums); + if (!metadatums.isEmpty()) { + metadatumLists.add(metadatums); + } + } + + if (metadatumLists.isEmpty()) { + return values; } - for (int i = 0; i < metadatumLists.getFirst().size(); i++) { + int maxSize = metadatumLists.stream().mapToInt(List::size).max().orElse(0); + for (int i = 0; i < maxSize; i++) { StringBuilder value = new StringBuilder(); - for (LinkedList metadatums : metadatumLists) { - value.append(metadatums.get(i).getValue()); + for (List metadatums : metadatumLists) { + if (i < metadatums.size()) { + value.append(metadatums.get(i).getValue()); + } - if (!metadatums.equals(metadatumLists.getLast())) { + if (!metadatums.equals(metadatumLists.get(metadatumLists.size() - 1))) { value.append(separator); } } + values.add(metadataFieldMapping.toDCValue(field, value.toString())); }