From: Richard Millet Date: Mon, 9 Aug 2010 18:38:03 +0000 (+0000) Subject: CSPACE-2352: Service consumer should be able to search for permissions using an ... X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=7c265c98885c4daed92dd6443bc9e811ec423101;p=tmp%2Fjakarta-migration.git CSPACE-2352: Service consumer should be able to search for permissions using an "actGrp" group/set type label. --- diff --git a/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionJpaFilter.java b/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionJpaFilter.java index 8a57775b1..92f8cfacc 100644 --- a/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionJpaFilter.java +++ b/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionJpaFilter.java @@ -38,6 +38,7 @@ import org.slf4j.LoggerFactory; */ public class PermissionJpaFilter extends JpaDocumentFilter { + /** The logger. */ private final Logger logger = LoggerFactory.getLogger(PermissionJpaFilter.class); /** @@ -49,32 +50,93 @@ public class PermissionJpaFilter extends JpaDocumentFilter { super(ctx); } + /** + * Append where clause. + * + * @param csAdmin the cs admin + * @param paramList the param list + * @param queryStrBldr the query str bldr + * @param fieldName the field name + * @param queryParam the query param + * @return the string builder + */ + private StringBuilder appendWhereClause(boolean whereOpNeeded, + StringBuilder queryStrBldr, + String fieldName, + String queryParamName, + List paramList, + String queryParamValue) { + String op = whereOpNeeded ? " WHERE " : " AND "; + if (queryParamValue != null && !queryParamValue.isEmpty()) { + queryStrBldr.append(op); + queryStrBldr.append("UPPER(a." + fieldName + ")"); + queryStrBldr.append(" LIKE"); + queryStrBldr.append(" :" + queryParamName); + paramList.add(new ParamBinding(queryParamName, "%" + + queryParamValue.toUpperCase() + "%")); + } + + return queryStrBldr; + } + + /* (non-Javadoc) + * @see org.collectionspace.services.common.document.DocumentFilter#buildWhereForSearch(java.lang.StringBuilder) + */ @Override public List buildWhereForSearch(StringBuilder queryStrBldr) { List paramList = new ArrayList(); + boolean whereOpNeeded = true; - String resName = null; - List rn = getQueryParam(PermissionStorageConstants.Q_RESOURCE_NAME); - if (null != rn && rn.size() > 0) { - resName = rn.get(0); - } boolean csAdmin = SecurityUtils.isCSpaceAdmin(); if (!csAdmin) { - queryStrBldr.append(addTenant(false, paramList)); + queryStrBldr.append(addTenant(false /* add WHERE or AND */, + paramList)); + whereOpNeeded = false; } - if (null != resName && !resName.isEmpty()) { - if (!csAdmin) { - queryStrBldr.append(" AND"); - } else { - queryStrBldr.append(" WHERE"); - } - queryStrBldr.append(" UPPER(a." + PermissionStorageConstants.RESOURCE_NAME + ")"); - queryStrBldr.append(" LIKE"); - queryStrBldr.append(" :" + PermissionStorageConstants.Q_RESOURCE_NAME); - paramList.add(new ParamBinding(PermissionStorageConstants.Q_RESOURCE_NAME, "%" - + resName.toUpperCase() + "%")); + + // get the resource query param + String resName = null; + List resNames = getQueryParam(PermissionStorageConstants.Q_RESOURCE_NAME); + if (resNames != null && resNames.size() > 0) { + // grab just the first instance + resName = resNames.get(0); + appendWhereClause(whereOpNeeded, + queryStrBldr, + PermissionStorageConstants.RESOURCE_NAME, + PermissionStorageConstants.Q_RESOURCE_NAME, + paramList, + resName); + whereOpNeeded = false; } + + + // get the actiongroup query param + String actionGroup = null; + List actionGroups = getQueryParam(PermissionStorageConstants.Q_ACTION_GROUP); + if (actionGroups != null && actionGroups.size() > 0) { + actionGroup = actionGroups.get(0); + appendWhereClause(whereOpNeeded, + queryStrBldr, + PermissionStorageConstants.ACTION_GROUP, + PermissionStorageConstants.Q_ACTION_GROUP, + paramList, + actionGroup); + whereOpNeeded = false; + } + +// if (null != resName && !resName.isEmpty()) { +// if (!csAdmin) { +// queryStrBldr.append(" AND"); +// } else { +// queryStrBldr.append(" WHERE"); +// } +// queryStrBldr.append(" UPPER(a." + PermissionStorageConstants.RESOURCE_NAME + ")"); +// queryStrBldr.append(" LIKE"); +// queryStrBldr.append(" :" + PermissionStorageConstants.Q_RESOURCE_NAME); +// paramList.add(new ParamBinding(PermissionStorageConstants.Q_RESOURCE_NAME, "%" +// + resName.toUpperCase() + "%")); +// } if (logger.isDebugEnabled()) { String query = queryStrBldr.toString(); @@ -84,6 +146,9 @@ public class PermissionJpaFilter extends JpaDocumentFilter { return paramList; } + /* (non-Javadoc) + * @see org.collectionspace.services.common.document.DocumentFilter#buildWhere(java.lang.StringBuilder) + */ @Override public List buildWhere(StringBuilder queryStrBldr) { return new ArrayList(); diff --git a/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionStorageConstants.java b/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionStorageConstants.java index 08f7a01e3..e3fc393f8 100644 --- a/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionStorageConstants.java +++ b/services/authorization-mgt/service/src/main/java/org/collectionspace/services/authorization/storage/PermissionStorageConstants.java @@ -32,7 +32,9 @@ package org.collectionspace.services.authorization.storage; public class PermissionStorageConstants { final public static String Q_RESOURCE_NAME = "res"; + final public static String Q_ACTION_GROUP = "actGrp"; final public static String RESOURCE_NAME = "resourceName"; + final public static String ACTION_GROUP = "actionGroup"; }