View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.syncope.core.rest.cxf.service;
20  
21  import org.apache.commons.lang3.exception.ExceptionUtils;
22  import org.apache.cxf.jaxrs.ext.search.SearchBean;
23  import org.apache.cxf.jaxrs.ext.search.SearchCondition;
24  import org.apache.syncope.common.lib.SyncopeClientException;
25  import org.apache.syncope.common.lib.types.ClientExceptionType;
26  import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
27  import org.apache.syncope.core.persistence.api.search.SearchCondVisitor;
28  
29  public abstract class AbstractSearchService extends AbstractService {
30  
31      protected final SearchCondVisitor searchCondVisitor;
32  
33      public AbstractSearchService(final SearchCondVisitor searchCondVisitor) {
34          this.searchCondVisitor = searchCondVisitor;
35      }
36  
37      protected SearchCond getSearchCond(final String fiql, final String realm) {
38          try {
39              searchCondVisitor.setRealm(realm);
40              SearchCondition<SearchBean> sc = searchContext.getCondition(fiql, SearchBean.class);
41              sc.accept(searchCondVisitor);
42  
43              return searchCondVisitor.getQuery();
44          } catch (Exception e) {
45              LOG.error("Invalid FIQL expression: {}", fiql, e);
46  
47              SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidSearchParameters);
48              sce.getElements().add(fiql);
49              sce.getElements().add(ExceptionUtils.getRootCauseMessage(e));
50              throw sce;
51          }
52      }
53  }