]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
d6322daa9766ff69276cd1b2188da6576fafe4a0
[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.account.storage;
26
27 import java.util.ArrayList;
28 import java.util.List;
29 import org.collectionspace.services.common.storage.jpa.JpaDocumentFilter;
30 import org.collectionspace.services.common.context.ServiceContext;
31 import org.collectionspace.services.common.security.SecurityUtils;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 /**
36  *
37  * @author 
38  */
39 public class AccountJpaFilter extends JpaDocumentFilter {
40
41     private final Logger logger = LoggerFactory.getLogger(AccountJpaFilter.class);
42
43     public AccountJpaFilter(ServiceContext ctx) {
44         super(ctx);
45     }
46
47     @Override
48     public List<ParamBinding> buildWhereForSearch(StringBuilder queryStrBldr) {
49
50         List<ParamBinding> paramList = new ArrayList<ParamBinding>();
51         String screenName = null;
52         List<String> snvals = getQueryParam(AccountStorageConstants.Q_SCREEN_NAME);
53         if (null != snvals && snvals.size() > 0) {
54             screenName = snvals.get(0);
55         }
56         boolean csAdmin = SecurityUtils.isCSpaceAdmin();
57         if (!csAdmin) {
58             queryStrBldr.append(addTenant(false, paramList));
59         }
60         if (null != screenName && !screenName.isEmpty()) {
61             if (!csAdmin) {
62                 queryStrBldr.append(" AND");
63             } else {
64                 queryStrBldr.append(" WHERE");
65             }
66             queryStrBldr.append(" UPPER(a." + AccountStorageConstants.SCREEN_NAME + ")");
67             queryStrBldr.append(" LIKE");
68             queryStrBldr.append(" :" + AccountStorageConstants.Q_SCREEN_NAME);
69             // CSPACE-2029
70             paramList.add(new ParamBinding(AccountStorageConstants.Q_SCREEN_NAME, "%"
71                     + replaceSpacesWithQueryWildcards(screenName.toUpperCase()) + "%"));
72         }
73
74         String uid = null;
75         List<String> uidvals = getQueryParam(AccountStorageConstants.Q_USER_ID);
76         if (null != uidvals && uidvals.size() > 0) {
77             uid = uidvals.get(0);
78         }
79         if (null != uid && !uid.isEmpty()) {
80             if (!csAdmin) {
81                 queryStrBldr.append(" AND");
82             } else {
83                 queryStrBldr.append(" WHERE");
84             }
85             queryStrBldr.append(" UPPER(a." + AccountStorageConstants.USER_ID + ")");
86             queryStrBldr.append(" LIKE");
87             queryStrBldr.append(" :" + AccountStorageConstants.Q_USER_ID);
88             paramList.add(new ParamBinding(AccountStorageConstants.Q_USER_ID, "%"
89                     + uid.toUpperCase() + "%"));
90         }
91
92         String email = null;
93         List<String> emailvals = getQueryParam(AccountStorageConstants.Q_EMAIL);
94         if (null != emailvals && emailvals.size() > 0) {
95             email = emailvals.get(0);
96         }
97         if (null != email && !email.isEmpty()) {
98
99             if (!csAdmin) {
100                 queryStrBldr.append(" AND");
101             } else {
102                 queryStrBldr.append(" WHERE");
103             }
104             queryStrBldr.append(" UPPER(a." + AccountStorageConstants.EMAIL + ")");
105             queryStrBldr.append(" LIKE");
106             queryStrBldr.append(" :" + AccountStorageConstants.Q_EMAIL);
107             paramList.add(new ParamBinding(AccountStorageConstants.Q_EMAIL, "%"
108                     + email.toUpperCase() + "%"));
109         }
110
111         if (logger.isDebugEnabled()) {
112             String query = queryStrBldr.toString();
113             logger.debug("query=" + query);
114         }
115
116         return paramList;
117     }
118
119     @Override
120     public List<ParamBinding> buildWhere(StringBuilder queryStrBldr) {
121         return new ArrayList<ParamBinding>();
122     }
123
124     @Override
125     protected String addTenant(boolean append, List<ParamBinding> paramList) {
126         String tenantId = getTenantId();
127         String whereClause = " JOIN a.tenants as at WHERE at.tenantId = :tenantId";
128         paramList.add(new ParamBinding("tenantId", tenantId));
129         return whereClause;
130     }
131     
132     public String replaceSpacesWithQueryWildcards(String str) {
133         if (null == str || str.trim().isEmpty()) {
134             return str;
135         } else {
136             return str.trim().replaceAll("[\\s]+","%");
137         }
138     }
139 }