From: Spiros Dimopulos Date: Mon, 13 Oct 2025 06:58:17 +0000 (+0300) Subject: DRYD-1818: Implement image ordering functionality for public browser (#479) X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=eda5c17fe4ae3a41334287c0c7bd23d19f3cfc64;p=tmp%2Fjakarta-migration.git DRYD-1818: Implement image ordering functionality for public browser (#479) * DRYD-1818: added denormRelatedObjects in DefaultESDocumentWriter to add objectCsid field holding media related objects. * DRYD-1818: mapped identificationNumber, title as sortable keywords; mapped updatedAt as sortable date field; mapped objectCsid as filterable keyword; * DRYD-1818: mapped media_common:altText; * DRYD-1818: fixed trailing comma; updated tenant bindings; --- diff --git a/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java b/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java index 43d242e2c..039b2ec96 100644 --- a/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java +++ b/3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java @@ -78,6 +78,13 @@ public class DefaultESDocumentWriter extends JsonESDocumentWriter { List> prodDateGroupList = (List>) doc.getProperty("collectionobjects_common", "objectProductionDateGroupList"); denormValues.putArray("prodYears").addAll(structDatesToYearNodes(prodDateGroupList)); + } else if ("Media".equals(docType) && isMediaPublished(doc)) { + CoreSession session = doc.getCoreSession(); + String csid = doc.getName(); + String tenantId = (String) doc.getProperty("collectionspace_core", "tenantId"); + + // Add media-specific denormalized fields + denormRelatedObjects(session, csid, tenantId, denormValues); } return denormValues; @@ -135,6 +142,31 @@ public class DefaultESDocumentWriter extends JsonESDocumentWriter { denormValues.put("hasMedia", mediaCsids.size() > 0); } + private void denormRelatedObjects(CoreSession session, String csid, String tenantId, ObjectNode denormValues) { + // Store the objectCsid of objects that are related to this media. + + String relatedRecordQuery = String.format( + "SELECT * FROM Relation WHERE relations_common:objectCsid = '%s' AND relations_common:subjectDocumentType = 'CollectionObject' AND ecm:currentLifeCycleState = 'project' AND collectionspace_core:tenantId = '%s'", + csid, tenantId); + DocumentModelList relationDocs = session.query(relatedRecordQuery); + List objectCsids = new ArrayList(); + + if (relationDocs.size() > 0) { + Iterator iterator = relationDocs.iterator(); + + while (iterator.hasNext()) { + DocumentModel relationDoc = iterator.next(); + String objectCsid = (String) relationDoc.getProperty("relations_common", "subjectCsid"); + + if (objectCsid != null) { + objectCsids.add(new TextNode(objectCsid)); + } + } + } + + denormValues.putArray("objectCsid").addAll(objectCsids); + } + private void denormAcquisitionRecords(CoreSession session, String csid, String tenantId, ObjectNode denormValues) { // Store the credit lines of acquisition records that are related to this object. diff --git a/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml index 133938613..ea4c9abfe 100644 --- a/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml @@ -90,7 +90,10 @@ "ecm:currentLifeCycleState", "ecm:name", "ecm:primaryType", - "media_common:blobCsid" + "media_common:blobCsid", + "media_common:identificationNumber", + "media_common:title", + "media_common:altText" ] }, "properties" : { @@ -114,6 +117,10 @@ "type": "date", "format": "date_time" }, + "collectionspace_core:updatedAt": { + "type": "date", + "format": "date_time" + }, "collectionobjects_common:publishToList": { "type": "keyword", "fields": { @@ -185,6 +192,9 @@ } } }, + "collectionspace_denorm:objectCsid": { + "type": "keyword" + }, "collectionobjects_common:objectNumber": { "type": "keyword", @@ -382,6 +392,17 @@ "media_common:blobCsid": { "type": "keyword" }, + "media_common:identificationNumber": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, + "media_common:altText": { + "type": "text" + }, + "media_common:title": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, "media_common:publishToList": { "type": "keyword", "fields": { diff --git a/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml index 47d06a847..127c7ae7c 100644 --- a/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/bonsai/bonsai-tenant-bindings.delta.xml @@ -58,7 +58,10 @@ "ecm:currentLifeCycleState", "ecm:name", "ecm:primaryType", - "media_common:blobCsid" + "media_common:blobCsid", + "media_common:identificationNumber", + "media_common:title", + "media_common:altText" ] }, "properties" : { @@ -82,6 +85,10 @@ "type": "date", "format": "date_time" }, + "collectionspace_core:updatedAt": { + "type": "date", + "format": "date_time" + }, "collectionobjects_common:publishToList": { "type": "keyword", "fields": { @@ -150,6 +157,9 @@ } } }, + "collectionspace_denorm:objectCsid": { + "type": "keyword" + }, "collectionobjects_common:objectNumber": { "type": "keyword", @@ -326,6 +336,17 @@ "media_common:blobCsid": { "type": "keyword" }, + "media_common:identificationNumber": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, + "media_common:altText": { + "type": "text" + }, + "media_common:title": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, "media_common:publishToList": { "type": "keyword", "fields": { diff --git a/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml index f7a728c93..65e77ea66 100644 --- a/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml @@ -68,7 +68,10 @@ "ecm:currentLifeCycleState", "ecm:name", "ecm:primaryType", - "media_common:blobCsid" + "media_common:blobCsid", + "media_common:identificationNumber", + "media_common:title", + "media_common:altText" ] }, "properties" : { @@ -92,6 +95,10 @@ "type": "date", "format": "date_time" }, + "collectionspace_core:updatedAt": { + "type": "date", + "format": "date_time" + }, "collectionobjects_common:publishToList": { "type": "keyword", "fields": { @@ -160,7 +167,9 @@ } } }, - + "collectionspace_denorm:objectCsid": { + "type": "keyword" + }, "collectionobjects_common:objectNumber": { "type": "keyword", "copy_to": "all_field" @@ -336,6 +345,17 @@ "media_common:blobCsid": { "type": "keyword" }, + "media_common:identificationNumber": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, + "media_common:altText": { + "type": "text" + }, + "media_common:title": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, "media_common:publishToList": { "type": "keyword", "fields": { diff --git a/services/common/src/main/cspace/config/services/tenants/lhmc/lhmc-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/lhmc/lhmc-tenant-bindings.delta.xml index ccd9cdffa..e907d2d10 100644 --- a/services/common/src/main/cspace/config/services/tenants/lhmc/lhmc-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/lhmc/lhmc-tenant-bindings.delta.xml @@ -58,7 +58,10 @@ "ecm:currentLifeCycleState", "ecm:name", "ecm:primaryType", - "media_common:blobCsid" + "media_common:blobCsid", + "media_common:identificationNumber", + "media_common:title", + "media_common:altText" ] }, "properties" : { @@ -82,6 +85,10 @@ "type": "date", "format": "date_time" }, + "collectionspace_core:updatedAt": { + "type": "date", + "format": "date_time" + }, "collectionobjects_common:publishToList": { "type": "keyword", "fields": { @@ -150,7 +157,9 @@ } } }, - + "collectionspace_denorm:objectCsid": { + "type": "keyword" + }, "collectionobjects_common:objectNumber": { "type": "keyword", "copy_to": "all_field" @@ -326,6 +335,17 @@ "media_common:blobCsid": { "type": "keyword" }, + "media_common:identificationNumber": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, + "media_common:altText": { + "type": "text" + }, + "media_common:title": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, "media_common:publishToList": { "type": "keyword", "fields": { diff --git a/services/common/src/main/cspace/config/services/tenants/materials/materials-tenant-bindings.delta.xml b/services/common/src/main/cspace/config/services/tenants/materials/materials-tenant-bindings.delta.xml index 27679ab6b..3057e9c2f 100644 --- a/services/common/src/main/cspace/config/services/tenants/materials/materials-tenant-bindings.delta.xml +++ b/services/common/src/main/cspace/config/services/tenants/materials/materials-tenant-bindings.delta.xml @@ -102,6 +102,9 @@ "collectionobjects_common:rightsGroupList.standardizedRightStatement", "collectionobjects_common:rightsInGroupList.rightReproductionStatement", "media_common:blobCsid", + "media_common:identificationNumber", + "media_common:title", + "media_common:altText", "media_materials:publishToList" ] }, @@ -165,6 +168,9 @@ } } }, + "collectionspace_denorm:objectCsid": { + "type": "keyword" + }, "collectionspace_core:createdAt": { "type": "date", @@ -172,6 +178,12 @@ // From imported data?? "format" : "date_time||yyyy-MM-dd'T'HH:mm:ss.SSZZ" }, + "collectionspace_core:updatedAt": { + "type": "date", + // Sometimes the timestamp only has a two digit fractional second, instead of three. + // From imported data?? + "format" : "date_time||yyyy-MM-dd'T'HH:mm:ss.SSZZ" + }, "materials_common:shortIdentifier": { "type": "keyword", @@ -697,7 +709,17 @@ "type": "text", "copy_to": "all_field" }, - + "media_common:identificationNumber": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, + "media_common:altText": { + "type": "text" + }, + "media_common:title": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, "media_materials:publishToList": { "type": "keyword", "fields": { diff --git a/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml b/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml index 637f0faa0..7622f7829 100644 --- a/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml +++ b/services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml @@ -1217,7 +1217,10 @@ "ecm:currentLifeCycleState", "ecm:name", "ecm:primaryType", - "media_common:blobCsid" + "media_common:blobCsid", + "media_common:identificationNumber", + "media_common:title", + "media_common:altText" ] }, "properties" : { @@ -1241,6 +1244,10 @@ "type": "date", "format": "date_time" }, + "collectionspace_core:updatedAt": { + "type": "date", + "format": "date_time" + }, "collectionobjects_common:publishToList": { "type": "keyword", "fields": { @@ -1309,7 +1316,9 @@ } } }, - + "collectionspace_denorm:objectCsid": { + "type": "keyword" + }, "collectionobjects_common:objectNumber": { "type": "keyword", "copy_to": "all_field" @@ -1479,6 +1488,17 @@ "media_common:blobCsid": { "type": "keyword" }, + "media_common:identificationNumber": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, + "media_common:altText": { + "type": "text" + }, + "media_common:title": { + "type": "keyword", + "normalizer": "sorting_normalizer" + }, "media_common:publishToList": { "type": "keyword", "fields": {