]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
374f9721ae5c9add7ef1fb190308aa85345e7fcb
[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
30 import org.collectionspace.services.common.context.ServiceContext;
31 import org.collectionspace.services.common.security.SecurityUtils;
32 import org.collectionspace.services.common.storage.jpa.JpaDocumentFilter;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36 /**
37  * PermissionJpaFilter is to build where clause for role queries
38  * @author 
39  */
40 public class PermissionJpaFilter extends JpaDocumentFilter {
41
42     /** The logger. */
43     private final Logger logger = LoggerFactory.getLogger(PermissionJpaFilter.class);
44
45     /**
46      * Instantiates a new permission jpa filter.
47      * 
48      * @param ctx the ctx
49      */
50     public PermissionJpaFilter(ServiceContext ctx) {
51         super(ctx);
52     }
53
54     /**
55      * Append where clause.
56      *
57      * @param csAdmin the cs admin
58      * @param paramList the param list
59      * @param queryStrBldr the query str bldr
60      * @param fieldName the field name
61      * @param queryParam the query param
62      * @return the string builder
63      */
64     private StringBuilder appendWhereClause(boolean whereOpNeeded,
65                 StringBuilder queryStrBldr,
66                 String fieldName,
67                 String queryParamName,
68                 List<ParamBinding> paramList,
69                 String queryParamValue) {
70         String op = whereOpNeeded ? " WHERE " : " AND ";
71         if (queryParamValue != null && !queryParamValue.isEmpty()) {
72                 queryStrBldr.append(op);
73             queryStrBldr.append("UPPER(a." + fieldName + ")");
74             queryStrBldr.append(" LIKE");
75             queryStrBldr.append(" :" + queryParamName);            
76             paramList.add(new ParamBinding(queryParamName, "%"
77                     + queryParamValue.toUpperCase() + "%"));            
78         }
79         
80         return queryStrBldr;
81     }
82     
83     /* (non-Javadoc)
84      * @see org.collectionspace.services.common.document.DocumentFilter#buildWhereForSearch(java.lang.StringBuilder)
85      */
86     @Override
87     public List<ParamBinding> buildWhereForSearch(StringBuilder queryStrBldr) {
88
89         List<ParamBinding> paramList = new ArrayList<ParamBinding>();
90         boolean whereOpNeeded = true;
91
92         boolean csAdmin = SecurityUtils.isCSpaceAdmin();
93         if (!csAdmin) {
94             queryStrBldr.append(addTenant(false /* add WHERE or AND */,
95                         paramList));
96             whereOpNeeded = false;
97         }
98
99         // get the resource query param
100         String resName = null;
101         List<String> resNames = getQueryParam(PermissionStorageConstants.Q_RESOURCE_NAME);
102         if (resNames != null && resNames.size() > 0) {
103                 // grab just the first instance
104             resName = resNames.get(0);
105             appendWhereClause(whereOpNeeded,
106                         queryStrBldr,
107                         PermissionStorageConstants.RESOURCE_NAME,
108                         PermissionStorageConstants.Q_RESOURCE_NAME,
109                         paramList,
110                         resName);
111             whereOpNeeded = false;
112         }
113         
114         
115         // get the actiongroup query param
116         String actionGroup = null;
117         List<String> actionGroups = getQueryParam(PermissionStorageConstants.Q_ACTION_GROUP);
118         if (actionGroups != null && actionGroups.size() > 0) {
119                 actionGroup = actionGroups.get(0);
120             appendWhereClause(whereOpNeeded,
121                         queryStrBldr,
122                         PermissionStorageConstants.ACTION_GROUP,
123                         PermissionStorageConstants.Q_ACTION_GROUP,
124                         paramList,
125                         actionGroup);
126             whereOpNeeded = false;
127         }        
128         
129 //        if (null != resName && !resName.isEmpty()) {
130 //            if (!csAdmin) {
131 //                queryStrBldr.append(" AND");
132 //            } else {
133 //                queryStrBldr.append(" WHERE");
134 //            }
135 //            queryStrBldr.append(" UPPER(a." + PermissionStorageConstants.RESOURCE_NAME + ")");
136 //            queryStrBldr.append(" LIKE");
137 //            queryStrBldr.append(" :" + PermissionStorageConstants.Q_RESOURCE_NAME);
138 //            paramList.add(new ParamBinding(PermissionStorageConstants.Q_RESOURCE_NAME, "%"
139 //                    + resName.toUpperCase() + "%"));
140 //        }
141
142         if (logger.isDebugEnabled()) {
143             String query = queryStrBldr.toString();
144             logger.debug("query=" + query);
145         }
146
147         return paramList;
148     }
149
150     /* (non-Javadoc)
151      * @see org.collectionspace.services.common.document.DocumentFilter#buildWhere(java.lang.StringBuilder)
152      */
153     @Override
154     public List<ParamBinding> buildWhere(StringBuilder queryStrBldr) {
155         return new ArrayList<ParamBinding>();
156     }
157 }