From: remillet Date: Sat, 23 Sep 2017 00:25:58 +0000 (-0700) Subject: DRYD-121: Adding 'mkRtSbjOrObj' query param so you can get a list of marked related... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=afd4f455edd3650e6b7f6b064e9fcd7ae35de8b1;p=tmp%2Fjakarta-migration.git DRYD-121: Adding 'mkRtSbjOrObj' query param so you can get a list of marked related items -either as subject or object. --- diff --git a/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java b/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java index 24e4f3a78..e4133a6f1 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java +++ b/services/client/src/main/java/org/collectionspace/services/client/IQueryManager.java @@ -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 // diff --git a/services/common/src/main/java/org/collectionspace/services/common/relation/nuxeo/RelationsUtils.java b/services/common/src/main/java/org/collectionspace/services/common/relation/nuxeo/RelationsUtils.java index cb974e88f..1f93a349b 100644 --- a/services/common/src/main/java/org/collectionspace/services/common/relation/nuxeo/RelationsUtils.java +++ b/services/common/src/main/java/org/collectionspace/services/common/relation/nuxeo/RelationsUtils.java @@ -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); diff --git a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/NuxeoDocumentModelHandler.java b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/NuxeoDocumentModelHandler.java index 640ea8b4e..6a9ebb79d 100644 --- a/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/NuxeoDocumentModelHandler.java +++ b/services/common/src/main/java/org/collectionspace/services/nuxeo/client/java/NuxeoDocumentModelHandler.java @@ -218,19 +218,24 @@ public abstract class NuxeoDocumentModelHandler extends RemoteDocumentModelHa @Override public AbstractCommonList extractCommonPartList(DocumentWrapper wrapDoc) throws Exception { CommonList commonList = new CommonList(); - String markRtSbj = null; CoreSessionInterface repoSession = null; RepositoryClientImpl repoClient = null; boolean releaseRepoSession = false; AbstractServiceContextImpl ctx = (AbstractServiceContextImpl) getServiceContext(); MultivaluedMap 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 extends RemoteDocumentModelHa List 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 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 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);