]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
92f8cfaccab4ae024ff91d3831dd36b803e2787a
[tmp/jakarta-migration.git] /
1 /**
2  *  This document is a part of the source code and related artifacts
3  *  for CollectionSpace, an open source collections management system
4  *  for museums and related institutions:
5
6  *  http://www.collectionspace.org
7  *  http://wiki.collectionspace.org
8
9  *  Copyright 2009 University of California at Berkeley
10
11  *  Licensed under the Educational Community License (ECL), Version 2.0.
12  *  You may not use this file except in compliance with this License.
13
14  *  You may obtain a copy of the ECL 2.0 License at
15
16  *  https://source.collectionspace.org/collection-space/LICENSE.txt
17
18  *  Unless required by applicable law or agreed to in writing, software
19  *  distributed under the License is distributed on an "AS IS" BASIS,
20  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  *  See the License for the specific language governing permissions and
22  *  limitations under the License.
23
24  */
25 package org.collectionspace.services.authorization.storage;
26
27 import java.util.ArrayList;
28 import java.util.List;
29 import org.collectionspace.services.common.context.ServiceContext;
30 import org.collectionspace.services.common.security.SecurityUtils;
31 import org.collectionspace.services.common.storage.jpa.JpaDocumentFilter;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 /**
36  * PermissionJpaFilter is to build where clause for role queries
37  * @author 
38  */
39 public class PermissionJpaFilter extends JpaDocumentFilter {
40
41     /** The logger. */
42     private final Logger logger = LoggerFactory.getLogger(PermissionJpaFilter.class);
43
44     /**
45      * Instantiates a new permission jpa filter.
46      * 
47      * @param ctx the ctx
48      */
49     public PermissionJpaFilter(ServiceContext ctx) {
50         super(ctx);
51     }
52
53     /**
54      * Append where clause.
55      *
56      * @param csAdmin the cs admin
57      * @param paramList the param list
58      * @param queryStrBldr the query str bldr
59      * @param fieldName the field name
60      * @param queryParam the query param
61      * @return the string builder
62      */
63     private StringBuilder appendWhereClause(boolean whereOpNeeded,
64                 StringBuilder queryStrBldr,
65                 String fieldName,
66                 String queryParamName,
67                 List<ParamBinding> paramList,
68                 String queryParamValue) {
69         String op = whereOpNeeded ? " WHERE " : " AND ";
70         if (queryParamValue != null && !queryParamValue.isEmpty()) {
71                 queryStrBldr.append(op);
72             queryStrBldr.append("UPPER(a." + fieldName + ")");
73             queryStrBldr.append(" LIKE");
74             queryStrBldr.append(" :" + queryParamName);            
75             paramList.add(new ParamBinding(queryParamName, "%"
76                     + queryParamValue.toUpperCase() + "%"));            
77         }
78         
79         return queryStrBldr;
80     }
81     
82     /* (non-Javadoc)
83      * @see org.collectionspace.services.common.document.DocumentFilter#buildWhereForSearch(java.lang.StringBuilder)
84      */
85     @Override
86     public List<ParamBinding> buildWhereForSearch(StringBuilder queryStrBldr) {
87
88         List<ParamBinding> paramList = new ArrayList<ParamBinding>();
89         boolean whereOpNeeded = true;
90
91         boolean csAdmin = SecurityUtils.isCSpaceAdmin();
92         if (!csAdmin) {
93             queryStrBldr.append(addTenant(false /* add WHERE or AND */,
94                         paramList));
95             whereOpNeeded = false;
96         }
97
98         // get the resource query param
99         String resName = null;
100         List<String> resNames = getQueryParam(PermissionStorageConstants.Q_RESOURCE_NAME);
101         if (resNames != null && resNames.size() > 0) {
102                 // grab just the first instance
103             resName = resNames.get(0);
104             appendWhereClause(whereOpNeeded,
105                         queryStrBldr,
106                         PermissionStorageConstants.RESOURCE_NAME,
107                         PermissionStorageConstants.Q_RESOURCE_NAME,
108                         paramList,
109                         resName);
110             whereOpNeeded = false;
111         }
112         
113         
114         // get the actiongroup query param
115         String actionGroup = null;
116         List<String> actionGroups = getQueryParam(PermissionStorageConstants.Q_ACTION_GROUP);
117         if (actionGroups != null && actionGroups.size() > 0) {
118                 actionGroup = actionGroups.get(0);
119             appendWhereClause(whereOpNeeded,
120                         queryStrBldr,
121                         PermissionStorageConstants.ACTION_GROUP,
122                         PermissionStorageConstants.Q_ACTION_GROUP,
123                         paramList,
124                         actionGroup);
125             whereOpNeeded = false;
126         }        
127         
128 //        if (null != resName && !resName.isEmpty()) {
129 //            if (!csAdmin) {
130 //                queryStrBldr.append(" AND");
131 //            } else {
132 //                queryStrBldr.append(" WHERE");
133 //            }
134 //            queryStrBldr.append(" UPPER(a." + PermissionStorageConstants.RESOURCE_NAME + ")");
135 //            queryStrBldr.append(" LIKE");
136 //            queryStrBldr.append(" :" + PermissionStorageConstants.Q_RESOURCE_NAME);
137 //            paramList.add(new ParamBinding(PermissionStorageConstants.Q_RESOURCE_NAME, "%"
138 //                    + resName.toUpperCase() + "%"));
139 //        }
140
141         if (logger.isDebugEnabled()) {
142             String query = queryStrBldr.toString();
143             logger.debug("query=" + query);
144         }
145
146         return paramList;
147     }
148
149     /* (non-Javadoc)
150      * @see org.collectionspace.services.common.document.DocumentFilter#buildWhere(java.lang.StringBuilder)
151      */
152     @Override
153     public List<ParamBinding> buildWhere(StringBuilder queryStrBldr) {
154         return new ArrayList<ParamBinding>();
155     }
156 }