90830: Issue 8125: Import items stale in discovery

This commit is contained in:
Kristof De Langhe
2022-04-20 13:21:35 +02:00
parent 0ae13fe0fb
commit 80158aadfe
5 changed files with 88 additions and 33 deletions

View File

@@ -15,6 +15,8 @@ import java.util.Set;
import org.apache.logging.log4j.Logger;
import org.dspace.content.Bundle;
import org.dspace.content.DSpaceObject;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.ItemService;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.discovery.indexobject.factory.IndexFactory;
@@ -38,7 +40,7 @@ public class IndexEventConsumer implements Consumer {
// collect Items, Collections, Communities that need indexing
private Set<IndexableObject> objectsToUpdate = new HashSet<>();
// collect freshly created Items that need indexing (requires pre-db status)
// collect freshly created Items that need indexing and require pre-db status
private Set<IndexableObject> createdItemsToUpdate = new HashSet<>();
// unique search IDs to delete
@@ -50,6 +52,8 @@ public class IndexEventConsumer implements Consumer {
IndexObjectFactoryFactory indexObjectServiceFactory = IndexObjectFactoryFactory.getInstance();
ItemService itemService = ContentServiceFactory.getInstance().getItemService();
@Override
public void initialize() throws Exception {
@@ -147,11 +151,8 @@ public class IndexEventConsumer implements Consumer {
String detail = indexableObjectService.getType() + "-" + event.getSubjectID().toString();
uniqueIdsToDelete.add(detail);
}
if (st == Constants.ITEM && et == Event.CREATE && object == null) {
createdItemsToUpdate.addAll(indexObjectServiceFactory.getIndexableObjects(ctx, subject));
} else {
objectsToUpdate.addAll(indexObjectServiceFactory.getIndexableObjects(ctx, subject));
}
objectsToUpdate.addAll(indexObjectServiceFactory.getIndexableObjects(ctx, subject));
}
break;
@@ -170,7 +171,13 @@ public class IndexEventConsumer implements Consumer {
// also update the object in order to index mapped/unmapped Items
if (subject != null &&
subject.getType() == Constants.COLLECTION && object.getType() == Constants.ITEM) {
createdItemsToUpdate.addAll(indexObjectServiceFactory.getIndexableObjects(ctx, object));
// If the item doesn't exist in the database yet, add it to createdItemsToUpdate
// Otherwise use the standard objectsToUpdate
if (itemService.find(ctx, object.getID()) == null) {
createdItemsToUpdate.addAll(indexObjectServiceFactory.getIndexableObjects(ctx, object));
} else {
objectsToUpdate.addAll(indexObjectServiceFactory.getIndexableObjects(ctx, object));
}
}
}
break;