diff --git a/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java b/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java index b0f4c80656..401765891c 100644 --- a/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java +++ b/dspace-api/src/main/java/org/dspace/content/ItemServiceImpl.java @@ -1292,33 +1292,7 @@ prevent the generation of resource policy entry values with null dspace_object a */ @Override public List getMetadata(Item item, String schema, String element, String qualifier, String lang) { - //Fields of the relation schema are virtual metadata - //except for relation.type which is the type of item in the model - if (StringUtils.equals(schema, MetadataSchemaEnum.RELATION.getName()) && !StringUtils.equals(element, "type")) { - - List relationMetadata = getRelationshipMetadata(item, false); - List listToReturn = new LinkedList<>(); - for (MetadataValue metadataValue : relationMetadata) { - if (StringUtils.equals(metadataValue.getMetadataField().getElement(), element)) { - listToReturn.add(metadataValue); - } - } - return listToReturn; - - } else { - List dbMetadataValues = super.getMetadata(item, schema, element, qualifier, lang); - - if (!(StringUtils.equals(schema, "*") && StringUtils.equals(element, "*") && - StringUtils.equals(qualifier, "*") && StringUtils.equals(lang, "*"))) { - return dbMetadataValues; - } - List fullMetadataValueList = new LinkedList<>(); - fullMetadataValueList.addAll(getRelationshipMetadata(item, true)); - fullMetadataValueList.addAll(dbMetadataValues); - - return fullMetadataValueList; - } - + return this.getMetadata(item, schema, element, qualifier, lang, true); } @Override @@ -1342,6 +1316,40 @@ prevent the generation of resource policy entry values with null dspace_object a return fullMetadataValueList; } + public List getMetadata(Item item, String schema, String element, String qualifier, String lang, + boolean enableVirtualMetadata) { + //Fields of the relation schema are virtual metadata + //except for relation.type which is the type of item in the model + if (StringUtils.equals(schema, MetadataSchemaEnum.RELATION.getName()) && !StringUtils.equals(element, "type")) { + + List relationMetadata = getRelationshipMetadata(item, false); + List listToReturn = new LinkedList<>(); + for (MetadataValue metadataValue : relationMetadata) { + if (StringUtils.equals(metadataValue.getMetadataField().getElement(), element)) { + listToReturn.add(metadataValue); + } + } + return listToReturn; + + } else { + List dbMetadataValues = super.getMetadata(item, schema, element, qualifier, lang); + + List fullMetadataValueList = new LinkedList<>(); + if (enableVirtualMetadata) { + fullMetadataValueList.addAll(getRelationshipMetadata(item, true)); + } + fullMetadataValueList.addAll(dbMetadataValues); + + List finalList = new LinkedList<>(); + for (MetadataValue metadataValue : fullMetadataValueList) { + if (match(schema, element, qualifier, lang, metadataValue)) { + finalList.add(metadataValue); + } + } + return finalList; + } + } + private List handleItemRelationship(Context context, Item item, String entityType, Relationship relationship, boolean enableVirtualMetadata) diff --git a/dspace-api/src/main/java/org/dspace/content/service/ItemService.java b/dspace-api/src/main/java/org/dspace/content/service/ItemService.java index 8f0324a39d..be91602a20 100644 --- a/dspace-api/src/main/java/org/dspace/content/service/ItemService.java +++ b/dspace-api/src/main/java/org/dspace/content/service/ItemService.java @@ -23,6 +23,7 @@ import org.dspace.content.Collection; import org.dspace.content.Community; import org.dspace.content.Item; import org.dspace.content.MetadataField; +import org.dspace.content.MetadataValue; import org.dspace.content.RelationshipMetadataValue; import org.dspace.content.Thumbnail; import org.dspace.content.WorkspaceItem; @@ -653,4 +654,8 @@ public interface ItemService extends DSpaceObjectService, DSpaceObjectLega */ public List getRelationshipMetadata(Item item, boolean enableVirtualMetadata); + + public List getMetadata(Item item, String schema, String element, String qualifier, + String lang, boolean enableVirtualMetadata); + } diff --git a/dspace-api/src/main/java/org/dspace/content/virtual/Collected.java b/dspace-api/src/main/java/org/dspace/content/virtual/Collected.java index 5989012385..37af8b4f4e 100644 --- a/dspace-api/src/main/java/org/dspace/content/virtual/Collected.java +++ b/dspace-api/src/main/java/org/dspace/content/virtual/Collected.java @@ -89,7 +89,7 @@ public class Collected implements VirtualBean { null, splittedString.length > 2 ? splittedString[2] : null, - Item.ANY); + Item.ANY, false); for (MetadataValue metadataValue : resultList) { if (StringUtils.isNotBlank(metadataValue.getValue())) { diff --git a/dspace-api/src/main/java/org/dspace/content/virtual/Concatenate.java b/dspace-api/src/main/java/org/dspace/content/virtual/Concatenate.java index eef5f9da61..dd12355b75 100644 --- a/dspace-api/src/main/java/org/dspace/content/virtual/Concatenate.java +++ b/dspace-api/src/main/java/org/dspace/content/virtual/Concatenate.java @@ -113,7 +113,7 @@ public class Concatenate implements VirtualBean { null, splittedString.length > 2 ? splittedString[2] : null, - Item.ANY); + Item.ANY, false); String resultString = ""; for (int i = 0; i < resultList.size(); i++) {