1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.logic.scim;
20
21 import org.antlr.v4.runtime.CharStreams;
22 import org.antlr.v4.runtime.CommonTokenStream;
23 import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
24 import org.apache.syncope.ext.scimv2.api.BadRequestException;
25 import org.apache.syncope.ext.scimv2.api.type.ErrorType;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29
30
31
32 public final class SearchCondConverter {
33
34 private static final Logger LOG = LoggerFactory.getLogger(SearchCondConverter.class);
35
36 public static SearchCond convert(final SearchCondVisitor visitor, final String filter) {
37 SCIMFilterParser parser = new SCIMFilterParser(
38 new CommonTokenStream(new SCIMFilterLexer(CharStreams.fromString(filter))));
39 parser.setBuildParseTree(true);
40 parser.setTrimParseTree(true);
41 parser.setProfile(true);
42 parser.removeErrorListeners();
43 parser.setErrorHandler(new SCIMFilterErrorHandler());
44
45 try {
46 return visitor.visit(parser.scimFilter());
47 } catch (Exception e) {
48 LOG.error("Could not parse '{}'", filter, e);
49 throw new BadRequestException(ErrorType.invalidFilter, "Could not parse '" + filter + '\'');
50 }
51 }
52
53 private SearchCondConverter() {
54
55 }
56 }