diff --git a/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/Reindex.java b/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/Reindex.java index 106c0e4b27..145f9b0e1f 100644 --- a/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/Reindex.java +++ b/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/Reindex.java @@ -43,6 +43,7 @@ public class Reindex extends AbstractCSEventPostCommitListenerImpl { public static final String PREV_EXH_CURATORIAL_NOTE_KEY = "Reindex.PREV_EXH_CURATORIAL_NOTE"; public static final String PREV_EXH_PUBLISH_TO_KEY = "Reindex.PREV_EXH_PUBLISH_TO"; public static final String PREV_RELATED_COLLECTION_OBJECT_CSID_KEY = "Reindex.PREV_RELATED_COLLECTION_OBJECT_CSID"; + public static final String PREV_RELATED_MEDIA_CSID_KEY = "Reindex.PREV_RELATED_MEDIA_CSID"; public static final String ELASTICSEARCH_ENABLED_PROP = "elasticsearch.enabled"; @Override @@ -200,10 +201,27 @@ else if (docType.startsWith("Relation")) { String collectionObjectCsid = (String) doc.getProperty("relations_common", "objectCsid"); reindexCollectionObject(doc.getRepositoryName(), collectionObjectCsid); + + if (subjectDocumentType.equals("Media")) { + String mediaCsid = (String) doc.getProperty("relations_common", "subjectCsid"); + + reindexMedia(doc.getRepositoryName(), mediaCsid); + } + } + else if ( + subjectDocumentType.equals("CollectionObject") + && objectDocumentType.equals("Media") + ) { + String collectionObjectCsid = (String) doc.getProperty("relations_common", "subjectCsid"); + String mediaCsid = (String) doc.getProperty("relations_common", "objectCsid"); + + reindexCollectionObject(doc.getRepositoryName(), collectionObjectCsid); + reindexMedia(doc.getRepositoryName(), mediaCsid); } } else if (eventName.equals(DocumentEventTypes.DOCUMENT_REMOVED)) { reindexPrevRelatedCollectionObjects(eventContext); + reindexPrevRelatedMedia(eventContext); } } } @@ -261,6 +279,16 @@ private void reindexRelatedCollectionObjects(DocumentModel doc) { } } + private void reindexPrevRelatedMedia(DocumentEventContext eventContext) { + List prevRelatedMediaCsids = (List) eventContext.getProperty(PREV_RELATED_MEDIA_CSID_KEY); + + if (prevRelatedMediaCsids != null) { + for (String prevRelatedMediaCsid : prevRelatedMediaCsids) { + reindexMedia(eventContext.getRepositoryName(), prevRelatedMediaCsid); + } + } + } + private void reindexCollectionObject(String repositoryName, String csid) { if (StringUtils.isEmpty(csid)) { return; @@ -271,4 +299,15 @@ private void reindexCollectionObject(String repositoryName, String csid) { ElasticSearchComponent es = (ElasticSearchComponent) Framework.getService(ElasticSearchService.class); es.runReindexingWorker(repositoryName, query); } + + private void reindexMedia(String repositoryName, String csid) { + if (StringUtils.isEmpty(csid)) { + return; + } + + String query = String.format("SELECT ecm:uuid FROM Media WHERE ecm:name = '%s'", csid); + + ElasticSearchComponent es = (ElasticSearchComponent) Framework.getService(ElasticSearchService.class); + es.runReindexingWorker(repositoryName, query); + } } diff --git a/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/ReindexSupport.java b/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/ReindexSupport.java index 11caed8838..8e09c43749 100644 --- a/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/ReindexSupport.java +++ b/3rdparty/nuxeo/nuxeo-platform-listener/reindex/src/main/java/org/collectionspace/services/listener/ReindexSupport.java @@ -146,6 +146,22 @@ else if (docType.startsWith("Relation")) { String collectionObjectCsid = (String) doc.getProperty("relations_common", "objectCsid"); eventContext.setProperty(Reindex.PREV_RELATED_COLLECTION_OBJECT_CSID_KEY, (Serializable) Arrays.asList(collectionObjectCsid)); + + if (subjectDocumentType.equals("Media")) { + String mediaCsid = (String) doc.getProperty("relations_common", "subjectCsid"); + + eventContext.setProperty(Reindex.PREV_RELATED_MEDIA_CSID_KEY, (Serializable) Arrays.asList(mediaCsid)); + } + } + else if ( + subjectDocumentType.equals("CollectionObject") + && objectDocumentType.equals("Media") + ) { + String collectionObjectCsid = (String) doc.getProperty("relations_common", "subjectCsid"); + String mediaCsid = (String) doc.getProperty("relations_common", "objectCsid"); + + eventContext.setProperty(Reindex.PREV_RELATED_COLLECTION_OBJECT_CSID_KEY, (Serializable) Arrays.asList(collectionObjectCsid)); + eventContext.setProperty(Reindex.PREV_RELATED_MEDIA_CSID_KEY, (Serializable) Arrays.asList(mediaCsid)); } } } diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c9e4f676d..895b636f41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ ## 9.0.0 * Add home location to collectionobject schema and advanced search +### Bug Fixes + +* Fix es indexing of Media records when relating/unrelating to Collection Objects + ## 8.3.0 * Add new endpoint for returning search results