]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
DRYD-120: Added support for 'sbjOrObj' query param so you can find relationships...
authorremillet <remillet@yahoo.com>
Fri, 22 Sep 2017 21:19:59 +0000 (14:19 -0700)
committerremillet <remillet@yahoo.com>
Fri, 22 Sep 2017 21:19:59 +0000 (14:19 -0700)
services/client/src/main/java/org/collectionspace/services/client/IRelationsManager.java
services/common/src/main/java/org/collectionspace/services/common/relation/RelationResource.java
services/common/src/main/java/org/collectionspace/services/common/relation/nuxeo/RelationsUtils.java
services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/NuxeoDocumentModelHandler.java

index d9a077ceb8d1b406b17bcc12826c953d3b981247..723dccd49baf5d6e5ff2265ee0167f33355c5dea 100644 (file)
@@ -31,6 +31,9 @@ public interface IRelationsManager {
 //    static public final String SUBJECT_TYPE = "subjectType";
     static public final String SUBJECT_TYPE_QP = SUBJECT_QP + "Type";
     
+    // A query param for specifying either Subject or Object
+    static public final String SUBJECT_OR_OBJECT = "sbjOrObj";
+    
     /** The Constant PREDICATE. */
     static public final String PREDICATE = "predicate";
     static public final String PREDICATE_QP = "prd";
index d4dcd462c2a93f35354e6d5e78da33f57a606bfc..1339e678685fadd48e40adce7155c978ce469220 100644 (file)
@@ -91,8 +91,9 @@ public class RelationResource extends NuxeoBasedResource {
                String predicate = queryParams.getFirst(IRelationsManager.PREDICATE_QP);
                String objectCsid = queryParams.getFirst(IRelationsManager.OBJECT_QP);
                String objectType = queryParams.getFirst(IRelationsManager.OBJECT_TYPE_QP);
+               String subjectOrObject = queryParams.getFirst(IRelationsManager.SUBJECT_OR_OBJECT);
 
-               return this.getRelationList(parentCtx, uriInfo, subjectCsid, subjectType, predicate, objectCsid, objectType);
+               return this.getRelationList(parentCtx, uriInfo, subjectCsid, subjectType, predicate, objectCsid, objectType, subjectOrObject);
        }
 
     private RelationsCommonList getRelationList(
@@ -101,7 +102,8 @@ public class RelationResource extends NuxeoBasedResource {
                String subjectCsid, String subjectType,
                String predicate,
                String objectCsid,
-               String objectType) throws CSWebApplicationException {
+               String objectType,
+               String subjectOrObject) throws CSWebApplicationException {
         try {
             ServiceContext<PoxPayloadIn, PoxPayloadOut> ctx = createServiceContext(uriInfo);
             if (parentCtx != null && parentCtx.getCurrentRepositorySession() != null) { // If the parent context has a non-null and open repository session then use it
@@ -109,7 +111,7 @@ public class RelationResource extends NuxeoBasedResource {
             }
             DocumentHandler handler = createDocumentHandler(ctx);
 
-            String relationClause = RelationsUtils.buildWhereClause(subjectCsid, subjectType, predicate, objectCsid, objectType);
+            String relationClause = RelationsUtils.buildWhereClause(subjectCsid, subjectType, predicate, objectCsid, objectType, subjectOrObject);
             handler.getDocumentFilter().appendWhereClause(relationClause, IQueryManager.SEARCH_QUALIFIER_AND);
             //
             // Handle keyword clause
index 3c1b664243fa78af007ae6bf638e42e240a1ab1e..cb974e88f5d4d9d5f9e50fcafa866c2d95f42744 100644 (file)
@@ -52,20 +52,32 @@ public class RelationsUtils {
      */
     public static String buildWhereClause(String subject, String subjectType,
                String predicate,
-               String object, String objectType) {
+               String object, String objectType,
+               String subjectOrObject) {
        String result = null;
        
-       StringBuilder stringBuilder = new StringBuilder();
+       StringBuilder stringBuilder = new StringBuilder();      
+       
        if (subject != null) {
                stringBuilder.append(RelationConstants.NUXEO_SCHEMA_NAME + ":" +
                                RelationJAXBSchema.SUBJECT_CSID + " = " + "'" + subject + "'");
        }
        
+       // (subectCsid = ${csid} OR objectCsid = ${csid})
+       if (subjectOrObject != null) {
+               if (stringBuilder.length() > 0) {
+                       stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
+               }
+               stringBuilder.append("(" + RelationConstants.NUXEO_SCHEMA_NAME + ":" +
+                               RelationJAXBSchema.SUBJECT_CSID + " = " + "'" + subjectOrObject + "'");
+               stringBuilder.append(" OR " + RelationConstants.NUXEO_SCHEMA_NAME + ":" +
+                               RelationJAXBSchema.OBJECT_CSID + " = " + "'" + subjectOrObject + "'" + ")");
+       }       
+       
        if (subjectType != null) {
                if (stringBuilder.length() > 0) {
                        stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
                }
-               // BUG - this should use the new field RelationJAXBSchema.SUBJECT_DOCTYPE
                stringBuilder.append(RelationConstants.NUXEO_SCHEMA_NAME + ":" +
                                RelationJAXBSchema.SUBJECT_DOCTYPE + " = " + "'" + subjectType + "'");
        }
index 064d12d10864a7d822b32c236efd279c4ca6b103..640ea8b4e957b033e3a21f69eb74cbd81cf6ca67 100644 (file)
@@ -273,7 +273,7 @@ public abstract class NuxeoDocumentModelHandler<T> extends RemoteDocumentModelHa
                                String id = NuxeoUtils.getCsid(docModel);
                                item.put(STANDARD_LIST_CSID_FIELD, id);
                                if (markRtSbj != null) {
-                                       String relationClause = RelationsUtils.buildWhereClause(markRtSbj, null, null, id, null);
+                                       String relationClause = RelationsUtils.buildWhereClause(markRtSbj, null, null, id, null, null);
                                        String whereClause = relationClause + IQueryManager.SEARCH_QUALIFIER_AND
                                                        + NuxeoUtils.buildWorkflowNotDeletedWhereClause();
                                        QueryContext queryContext = new QueryContext(ctx, whereClause);