mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-14 21:43:11 +00:00
[DS-3439] Copy collection template item specified metadata during Sword v2 METS deposit ingestion.
This commit is contained in:
@@ -18,6 +18,7 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -276,6 +277,55 @@ public class ItemServiceImpl extends DSpaceObjectServiceImpl<Item> implements It
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void populateWithTemplateItemMetadata(Context context, Collection collection, boolean template, Item item)
|
||||
throws SQLException {
|
||||
|
||||
Item templateItem = collection.getTemplateItem();
|
||||
|
||||
Optional<MetadataValue> colEntityType = getDSpaceEntityType(collection);
|
||||
Optional<MetadataValue> templateItemEntityType = getDSpaceEntityType(templateItem);
|
||||
|
||||
if (template && colEntityType.isPresent() && templateItemEntityType.isPresent() &&
|
||||
!StringUtils.equals(colEntityType.get().getValue(), templateItemEntityType.get().getValue())) {
|
||||
throw new IllegalStateException("The template item has entity type : (" +
|
||||
templateItemEntityType.get().getValue() + ") different than collection entity type : " +
|
||||
colEntityType.get().getValue());
|
||||
}
|
||||
|
||||
if (template && colEntityType.isPresent() && templateItemEntityType.isEmpty()) {
|
||||
MetadataValue original = colEntityType.get();
|
||||
MetadataField metadataField = original.getMetadataField();
|
||||
MetadataSchema metadataSchema = metadataField.getMetadataSchema();
|
||||
// NOTE: dspace.entity.type = <blank> does not make sense
|
||||
// the collection entity type is by default blank when a collection is first created
|
||||
if (StringUtils.isNotBlank(original.getValue())) {
|
||||
addMetadata(context, item, metadataSchema.getName(), metadataField.getElement(),
|
||||
metadataField.getQualifier(), original.getLanguage(), original.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
if (template && (templateItem != null)) {
|
||||
List<MetadataValue> md = getMetadata(templateItem, Item.ANY, Item.ANY, Item.ANY, Item.ANY);
|
||||
|
||||
for (MetadataValue aMd : md) {
|
||||
MetadataField metadataField = aMd.getMetadataField();
|
||||
MetadataSchema metadataSchema = metadataField.getMetadataSchema();
|
||||
addMetadata(context, item, metadataSchema.getName(), metadataField.getElement(),
|
||||
metadataField.getQualifier(), aMd.getLanguage(), aMd.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Optional<MetadataValue> getDSpaceEntityType(DSpaceObject dSpaceObject) {
|
||||
return Objects.nonNull(dSpaceObject) ? dSpaceObject.getMetadata()
|
||||
.stream()
|
||||
.filter(x -> x.getMetadataField().toString('.')
|
||||
.equalsIgnoreCase("dspace.entity.type"))
|
||||
.findFirst()
|
||||
: Optional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<Item> findAll(Context context) throws SQLException {
|
||||
return itemDAO.findAll(context, true);
|
||||
|
Reference in New Issue
Block a user