]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
DRYD-121: Adding 'mkRtSbjOrObj' query param so you can get a list of marked related...
authorremillet <remillet@yahoo.com>
Sat, 23 Sep 2017 00:25:58 +0000 (17:25 -0700)
committerremillet <remillet@yahoo.com>
Sat, 23 Sep 2017 00:25:58 +0000 (17:25 -0700)
services/client/src/main/java/org/collectionspace/services/client/IQueryManager.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 24e4f3a781302b3dd9939990dc34f978616d153b..e4133a6f1dbfb811faa1098e67d8c400e4088a36 100644 (file)
@@ -65,11 +65,13 @@ public interface IQueryManager {
        final static String SEARCH_RELATED_TO_CSID_AS_OBJECT = "rtObj";
        final static String SEARCH_RELATED_PREDICATE = "rtPredicate";
 
-       final static String SEARCH_RELATED_TO_CSID_AS_EITHER = "rtEither";
+       final static String SEARCH_RELATED_TO_CSID_AS_EITHER = "rtSbjOrObj";
        final static String SEARCH_RELATED_MATCH_OBJ_DOCTYPES = "rtObjDocTypes";
        final static String SELECT_DOC_TYPE_FIELD = "selectDocType";
        
        final static String MARK_RELATED_TO_CSID_AS_SUBJECT = "mkRtSbj";
+       final static String MARK_RELATED_TO_CSID_AS_EITHER = "mkRtSbjOrObj";
+       
        //
        // Generic CMIS property mapping constants
        //
index cb974e88f5d4d9d5f9e50fcafa866c2d95f42744..1f93a349bd96ba12a475576d5874381aa600b095 100644 (file)
@@ -56,24 +56,50 @@ public class RelationsUtils {
                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})
+       //
+       // (subectCsid = ${csid} OR objectCsid = ${csid}) overrides the individual subject or object query params
+       // (Example,    ((rel.subjectcsid = subject AND rel.objectcsid = target)
+       //                                      OR 
+       //                              (rel.subjectcsid = target AND rel.objectcsid = subject))
+       //
        if (subjectOrObject != null) {
-               if (stringBuilder.length() > 0) {
-                       stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
-               }
+               String target = object;
+               stringBuilder.append("(");
                stringBuilder.append("(" + RelationConstants.NUXEO_SCHEMA_NAME + ":" +
                                RelationJAXBSchema.SUBJECT_CSID + " = " + "'" + subjectOrObject + "'");
-               stringBuilder.append(" OR " + RelationConstants.NUXEO_SCHEMA_NAME + ":" +
+               stringBuilder.append(" AND " + RelationConstants.NUXEO_SCHEMA_NAME + ":" +
+                               RelationJAXBSchema.OBJECT_CSID + " = " + "'" + target + "'" + ")");
+               stringBuilder.append(" OR ");
+               stringBuilder.append("(" + RelationConstants.NUXEO_SCHEMA_NAME + ":" +
+                               RelationJAXBSchema.SUBJECT_CSID + " = " + "'" + target + "'");
+               stringBuilder.append(" AND " + RelationConstants.NUXEO_SCHEMA_NAME + ":" +
                                RelationJAXBSchema.OBJECT_CSID + " = " + "'" + subjectOrObject + "'" + ")");
-       }       
+               stringBuilder.append(")");
+
+       } else {
+               if (subject != null) {
+                       if (stringBuilder.length() > 0) {
+                               stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
+                       }
+
+                       stringBuilder.append(RelationConstants.NUXEO_SCHEMA_NAME + ":" +
+                                       RelationJAXBSchema.SUBJECT_CSID + " = " + "'" + subject + "'");
+               }
+               
+               if (object != null) {
+                       if (stringBuilder.length() > 0) {
+                               stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
+                       }
+                       stringBuilder.append(RelationConstants.NUXEO_SCHEMA_NAME + ":" +
+                                       RelationJAXBSchema.OBJECT_CSID + " = " + "'" + object + "'");
+               }               
+       }
        
+       //
+       // Check for the other possible query params
+       //
        if (subjectType != null) {
                if (stringBuilder.length() > 0) {
                        stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
@@ -89,15 +115,7 @@ public class RelationsUtils {
                stringBuilder.append(RelationConstants.NUXEO_SCHEMA_NAME + ":" +
                                RelationJAXBSchema.RELATIONSHIP_TYPE + " = " + "'" + predicate + "'");
        }
-       
-       if (object != null) {
-               if (stringBuilder.length() > 0) {
-                       stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
-               }
-               stringBuilder.append(RelationConstants.NUXEO_SCHEMA_NAME + ":" +
-                               RelationJAXBSchema.OBJECT_CSID + " = " + "'" + object + "'");
-       }
-       
+               
        if (objectType != null) {
                if (stringBuilder.length() > 0) {
                        stringBuilder.append(IQueryManager.SEARCH_QUALIFIER_AND);
index 640ea8b4e957b033e3a21f69eb74cbd81cf6ca67..6a9ebb79d8ddfdf23b44a5c8197e31dbb3ac9cdc 100644 (file)
@@ -218,19 +218,24 @@ public abstract class NuxeoDocumentModelHandler<T> extends RemoteDocumentModelHa
        @Override
        public AbstractCommonList extractCommonPartList(DocumentWrapper<DocumentModelList> wrapDoc) throws Exception {
                CommonList commonList = new CommonList();
-               String markRtSbj = null;
                CoreSessionInterface repoSession = null;
                RepositoryClientImpl repoClient = null;
                boolean releaseRepoSession = false;
 
                AbstractServiceContextImpl ctx = (AbstractServiceContextImpl) getServiceContext();
                MultivaluedMap<String, String> queryParams = getServiceContext().getQueryParams();
-               markRtSbj = queryParams.getFirst(IQueryManager.MARK_RELATED_TO_CSID_AS_SUBJECT);
-               if (markRtSbj != null && markRtSbj.isEmpty())
+               String markRtSbj = queryParams.getFirst(IQueryManager.MARK_RELATED_TO_CSID_AS_SUBJECT);
+               if (markRtSbj != null && markRtSbj.isEmpty()) {
                        markRtSbj = null;
+               }
+               
+               String markRtSbjOrObj = queryParams.getFirst(IQueryManager.MARK_RELATED_TO_CSID_AS_EITHER);
+               if (markRtSbjOrObj != null && markRtSbjOrObj.isEmpty()) {
+                       markRtSbjOrObj = null;
+               }
 
                try {
-                       if (markRtSbj != null) {
+                       if (markRtSbj != null || markRtSbjOrObj != null) {
                                repoClient = (RepositoryClientImpl) this.getRepositoryClient(ctx);
                                RepositoryClientImpl nuxeoRepoClient = (RepositoryClientImpl) repoClient;
                                repoSession = this.getRepositorySession();
@@ -245,7 +250,7 @@ public abstract class NuxeoDocumentModelHandler<T> extends RemoteDocumentModelHa
                        List<ListResultField> resultsFields = getListItemsArray();
                        int nFields = resultsFields.size() + NUM_STANDARD_LIST_RESULT_FIELDS;
                        int baseFields = NUM_STANDARD_LIST_RESULT_FIELDS;
-                       if (markRtSbj != null) {
+                       if (markRtSbj != null || markRtSbjOrObj != null) {
                                nFields++;
                                baseFields++;
                        }
@@ -257,7 +262,7 @@ public abstract class NuxeoDocumentModelHandler<T> extends RemoteDocumentModelHa
                        fields[3] = STANDARD_LIST_UPDATED_AT_FIELD;
                        fields[4] = STANDARD_LIST_WORKFLOW_FIELD;
                        
-                       if (markRtSbj != null) {
+                       if (markRtSbj != null || markRtSbjOrObj != null) {
                                fields[5] = STANDARD_LIST_MARK_RT_FIELD;
                        }
                        
@@ -272,8 +277,8 @@ public abstract class NuxeoDocumentModelHandler<T> extends RemoteDocumentModelHa
                                DocumentModel docModel = iter.next();
                                String id = NuxeoUtils.getCsid(docModel);
                                item.put(STANDARD_LIST_CSID_FIELD, id);
-                               if (markRtSbj != null) {
-                                       String relationClause = RelationsUtils.buildWhereClause(markRtSbj, null, null, id, null, null);
+                               if (markRtSbj != null || markRtSbjOrObj != null) {
+                                       String relationClause = RelationsUtils.buildWhereClause(markRtSbj, null, null, id, null, markRtSbjOrObj);
                                        String whereClause = relationClause + IQueryManager.SEARCH_QUALIFIER_AND
                                                        + NuxeoUtils.buildWorkflowNotDeletedWhereClause();
                                        QueryContext queryContext = new QueryContext(ctx, whereClause);