]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
NOJIRA: Generate holdingInstitution field in ES index for Material Order.
authorRay Lee <ray.lee@lyrasis.org>
Sat, 6 Apr 2019 00:31:34 +0000 (20:31 -0400)
committerRay Lee <ray.lee@lyrasis.org>
Sat, 6 Apr 2019 00:31:34 +0000 (20:31 -0400)
3rdparty/nuxeo/nuxeo-platform-elasticsearch/src/main/java/org/collectionspace/services/nuxeo/elasticsearch/CSJsonESDocumentWriter.java
services/common/src/main/cspace/config/services/tenants/materials/materials-tenant-bindings.delta.xml

index 3862e6f0808075d6e7aea17292b65fe7441811ca..f32464b3f11aaebeb72441c7460968a611fb409f 100644 (file)
@@ -2,9 +2,12 @@ package org.collectionspace.services.nuxeo.elasticsearch;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.ws.rs.core.HttpHeaders;
 
@@ -62,7 +65,7 @@ public class CSJsonESDocumentWriter extends JsonESDocumentWriter {
 
                         if (isMediaPublished(mediaDoc)) {
                             String mediaCsid = (String) mediaDoc.getName();
-                        
+
                             mediaCsids.add(new TextNode(mediaCsid));
                         }
                     }
@@ -79,7 +82,7 @@ public class CSJsonESDocumentWriter extends JsonESDocumentWriter {
             if (title != null) {
                 denormValues.put("title", title);
             }
-            
+
             List<Map<String, Object>> termGroups = (List<Map<String, Object>>) doc.getProperty("materials_common", "materialTermGroupList");
             List<String> commercialNames = findTermDisplayNamesWithFlag(termGroups, "commercial");
             List<String> commonNames = findTermDisplayNamesWithFlag(termGroups, "common");
@@ -94,6 +97,18 @@ public class CSJsonESDocumentWriter extends JsonESDocumentWriter {
             if (commonNames.size() > 0) {
                 denormValues.putArray("commonNames").addAll(jsonNodes(commonNames));
             }
+
+            // Combine term creator organizations and term editor organizations into a holding
+            // institutions field.
+
+            Set<String> holdingInstitutions = new HashSet<String>();
+
+            holdingInstitutions.addAll(getTermAttributionContributors(doc));
+            holdingInstitutions.addAll(getTermAttributionEditors(doc));
+
+            if (holdingInstitutions.size() > 0) {
+                denormValues.putArray("holdingInstitutions").addAll(jsonNodes(holdingInstitutions));
+            }
         }
 
         // Below is sample code for denormalizing fields from the computed current location (place
@@ -238,10 +253,38 @@ public class CSJsonESDocumentWriter extends JsonESDocumentWriter {
         return termDisplayNames;
     }
 
+    private Set<String> getTermAttributionContributors(DocumentModel doc) {
+        Set orgs = new HashSet<String>();
+
+        List<Map<String, Object>> groups = (List<Map<String, Object>>) doc.getProperty("materials_common", "materialTermAttributionContributingGroupList");
+
+        for (Map<String, Object> group : groups) {
+            String org = (String) group.get("materialTermAttributionContributingOrganization");
+
+            orgs.add(org);
+        }
+
+        return orgs;
+    }
+
+    private Set<String> getTermAttributionEditors(DocumentModel doc) {
+        Set orgs = new HashSet<String>();
+
+        List<Map<String, Object>> groups = (List<Map<String, Object>>) doc.getProperty("materials_common", "materialTermAttributionEditingGroupList");
+
+        for (Map<String, Object> group : groups) {
+            String org = (String) group.get("materialTermAttributionEditingOrganization");
+
+            orgs.add(org);
+        }
+
+        return orgs;
+    }
+
     private boolean isMediaPublished(DocumentModel mediaDoc) {
         List<String> publishToValues = (List<String>) mediaDoc.getProperty("media_materials", "publishToList");
         boolean isPublished = false;
-        
+
         for (int i=0; i<publishToValues.size(); i++) {
             String value = publishToValues.get(i);
             String shortId = RefNameUtils.getItemShortId(value);
@@ -255,7 +298,7 @@ public class CSJsonESDocumentWriter extends JsonESDocumentWriter {
         return isPublished;
     }
 
-    private List<JsonNode> jsonNodes(List<String> values) {
+    private List<JsonNode> jsonNodes(Collection<String> values) {
         List<JsonNode> nodes = new ArrayList<JsonNode>();
         Iterator<String> iterator = values.iterator();
 
index 812d8bb3aa214375ffc85cadfaa5703d02c26f56..8bdd9f99075f6792dd2dcf1dfad91d6be5a55436 100644 (file)
                     "analyzer" : "fulltext",
                     "include_in_all": "false"
                   },
+                  "collectionspace_denorm:holdingInstitutions": {
+                    "type": "string",
+                    "fields": {
+                      "displayName": {
+                        "type": "string",
+                        "analyzer": "refname_displayname_analyzer"
+                      }
+                    }
+                  },
 
                   "collectionspace_core:createdAt": {
                     "type": "date",