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
//
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);
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);
@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();
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++;
}
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;
}
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);