]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CB-23: Add denormalized objectName to capture controlled terms (#377)
authorMichael Ritter <mikejritter@users.noreply.github.com>
Wed, 29 Nov 2023 20:48:58 +0000 (15:48 -0500)
committerGitHub <noreply@github.com>
Wed, 29 Nov 2023 20:48:58 +0000 (15:48 -0500)
3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/DefaultESDocumentWriter.java
services/common/src/main/cspace/config/services/tenants/anthro/anthro-tenant-bindings.delta.xml
services/common/src/main/cspace/config/services/tenants/fcart/fcart-tenant-bindings.delta.xml
services/common/src/main/cspace/config/services/tenants/tenant-bindings-proto-unified.xml

index 91fb3432a0238cb6da9d23108b0eec46d4db9d29..b5de58555a2d25392c8b8bcc5ef1d14cee5f88fb 100644 (file)
@@ -61,6 +61,7 @@ public class DefaultESDocumentWriter extends JsonESDocumentWriter {
                        denormAcquisitionRecords(session, csid, tenantId, denormValues);
                        denormExhibitionRecords(session, csid, tenantId, denormValues);
                        denormMaterialFields(doc, denormValues);
+                       denormObjectNameFields(doc, denormValues);
 
                        // Compute the title of the record for the public browser, and store it so that it can
                        // be used for sorting ES query results.
@@ -221,6 +222,37 @@ private void denormExhibitionRecords(CoreSession session, String csid, String te
                denormValues.putArray("materialGroupList").addAll(denormMaterials);
        }
 
+       /**
+        * Denormalize the object name group list for a collectionobject in order to index the controlled and
+        * uncontrolled terms
+        *
+        * @param doc the collectionobject document
+        * @param denormValues the json node for denormalized fields
+        */
+       private void denormObjectNameFields(DocumentModel doc, ObjectNode denormValues) {
+               List<Map<String, Object>> objectNameList =
+                       (List<Map<String, Object>>) doc.getProperty("collectionobjects_common", "objectNameList");
+
+               List<JsonNode> denormObjectNames = new ArrayList<>();
+               for (Map<String, Object> objectNameGroup  : objectNameList) {
+                       String controlledName = (String) objectNameGroup.get("objectNameControlled");
+                       if (controlledName != null) {
+                               final ObjectNode node = objectMapper.createObjectNode();
+                               node.put("objectName", RefNameUtils.getDisplayName(controlledName));
+                               denormObjectNames.add(node);
+                       }
+
+                       String objectName = (String) objectNameGroup.get("objectName");
+                       if (objectName != null) {
+                               final ObjectNode node = objectMapper.createObjectNode();
+                               node.put("objectName", objectName);
+                               denormObjectNames.add(node);
+                       }
+               }
+
+               denormValues.putArray("objectNameList").addAll(denormObjectNames);
+       }
+
        /**
         * Compute a title for the public browser. This needs to be indexed in ES so that it can
         * be used for sorting. (Even if it's just extracting the primary value.)
index 6274f264bb34f4d6c9d6959c193e24e41498d569..8b65e183743f743f29435810af527920a4798d00 100644 (file)
                                                                }
                                                        }
                                                },
+                                               "collectionspace_denorm:objectNameList": {
+                                                       "type": "object",
+                                                       "properties": {
+                                                               "objectName": {
+                                                                       "type": "keyword",
+                                                                       "copy_to": "all_field"
+                                                               }
+                                                       }
+                                               },
 
                                                "collectionobjects_common:objectNumber": {
                                                        "type": "keyword",
index a91f23fd411430b313f400415f43527c9f83f43f..103088c036be4f032698b9b52c267bb81ee3f829 100644 (file)
                                                                }
                                                        }
                                                },
+                                               "collectionspace_denorm:objectNameList": {
+                                                       "type": "object",
+                                                       "properties": {
+                                                               "objectName": {
+                                                                       "type": "keyword",
+                                                                       "copy_to": "all_field"
+                                                               }
+                                                       }
+                                               },
 
                                                "collectionobjects_common:objectNumber": {
                                                        "type": "keyword",
index bef66254f28576819cf0a8153f291820fc703b44..6e3c474b23e4f203be85181f4414f352939096db 100644 (file)
                                                                }
                                                        }
                                                },
+                                               "collectionspace_denorm:objectNameList": {
+                                                       "type": "object",
+                                                       "properties": {
+                                                               "objectName": {
+                                                                       "type": "keyword",
+                                                                       "copy_to": "all_field"
+                                                               }
+                                                       }
+                                               },
 
                                                "collectionobjects_common:objectNumber": {
                                                        "type": "keyword",