71752: Reindex metadatafields on create/update/delete + tests

This commit is contained in:
Marie Verdonck
2020-07-29 16:09:25 +02:00
parent c046a1c8f3
commit 9dae6a9579
2 changed files with 197 additions and 12 deletions

View File

@@ -22,6 +22,9 @@ import org.dspace.content.service.MetadataSchemaService;
import org.dspace.content.service.MetadataValueService;
import org.dspace.core.Context;
import org.dspace.core.LogManager;
import org.dspace.discovery.IndexingService;
import org.dspace.discovery.indexobject.IndexableMetadataField;
import org.dspace.services.factory.DSpaceServicesFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
@@ -46,6 +49,7 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
protected MetadataValueService metadataValueService;
@Autowired(required = true)
protected MetadataSchemaService metadataSchemaService;
private IndexingService indexer;
protected MetadataFieldServiceImpl() {
@@ -77,6 +81,8 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
log.info(LogManager.getHeader(context, "create_metadata_field",
"metadata_field_id=" + metadataField.getID()));
// Update the index of type metadatafield
this.updateMetadataFieldIndex(context);
return metadataField;
}
@@ -149,6 +155,8 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
"metadata_field_id=" + metadataField.getID() + "element=" + metadataField
.getElement()
+ "qualifier=" + metadataField.getQualifier()));
// Update the index of type metadatafield
this.updateMetadataFieldIndex(context);
}
@Override
@@ -177,6 +185,22 @@ public class MetadataFieldServiceImpl implements MetadataFieldService {
log.info(LogManager.getHeader(context, "delete_metadata_field",
"metadata_field_id=" + metadataField.getID()));
// Update the index of type metadatafield
this.updateMetadataFieldIndex(context);
}
/**
* Updates the index of type metadatafield. Indexed metadatafields are used by the /search/byFieldName endpoint,
* see MetadataFieldRestRepository
* @param context DSpace context
*/
private void updateMetadataFieldIndex(Context context) {
if (this.indexer == null) {
this.indexer = DSpaceServicesFactory.getInstance().getServiceManager()
.getServiceByName(IndexingService.class.getName(),
IndexingService.class);
}
this.indexer.updateIndex(context, true, IndexableMetadataField.TYPE);
}
/**