From 800cd7900e1605530251b5595fe330be132a4590 Mon Sep 17 00:00:00 2001 From: Giuseppe Digilio Date: Mon, 29 Jan 2024 17:50:40 +0100 Subject: [PATCH] [CST-13042] Fix issue with missing metadata --- .../consumer/PersonCustomMeetadataConsumer.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dspace-api/src/main/java/org/dspace/consumer/PersonCustomMeetadataConsumer.java b/dspace-api/src/main/java/org/dspace/consumer/PersonCustomMeetadataConsumer.java index 60100585e79d..bfaafb66407b 100644 --- a/dspace-api/src/main/java/org/dspace/consumer/PersonCustomMeetadataConsumer.java +++ b/dspace-api/src/main/java/org/dspace/consumer/PersonCustomMeetadataConsumer.java @@ -18,6 +18,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.Logger; import org.dspace.content.Item; import org.dspace.content.MetadataFieldName; @@ -61,7 +62,9 @@ public void initialize() throws Exception { @Override public void consume(Context context, Event event) throws Exception { Item item = (Item) event.getSubject(context); - if (item == null || !item.isArchived() || itemsAlreadyProcessed.contains(item) || !isPerson(item)) { + if (item == null || !item.isArchived() || itemsAlreadyProcessed.contains(item) || !isPerson(item) || + metadataNames == null || metadataNames.size() == 0 || + metadataFormat == null || metadataFormat.size() == 0) { return; } @@ -98,8 +101,8 @@ private void addCustomMetadata(Context context, Item person, String metadataName String metadataValue = generateMetadataValue(person, metadataFormat); MetadataFieldName field = new MetadataFieldName(metadataName); - itemService.clearMetadata(context, person, field.schema, field.element, field.qualifier, Item.ANY); if (isNotBlank(metadataValue)) { + itemService.clearMetadata(context, person, field.schema, field.element, field.qualifier, Item.ANY); itemService.addMetadata( context, person, field.schema, field.element, field.qualifier, null, metadataValue); } @@ -109,7 +112,9 @@ private String generateMetadataValue(Item person, String metadataFormat) { for (String placeholderMetadata : getPlaceholderMetadataNames(metadataFormat)) { MetadataFieldName field = new MetadataFieldName(placeholderMetadata); String placeholderValue = itemService.getMetadataFirstValue(person, field, Item.ANY); - metadataFormat = metadataFormat.replace("{" + placeholderMetadata + "}", placeholderValue); + if (StringUtils.isNotBlank(placeholderValue)) { + metadataFormat = metadataFormat.replace("{" + placeholderMetadata + "}", placeholderValue); + } } return metadataFormat; }