source: FCSSimpleEndpoint/trunk/src/main/java/eu/clarin/sru/server/fcs/FCSQueryParser.java @ 6882

Last change on this file since 6882 was 6882, checked in by Oliver Schonefeld, 8 years ago
  • add FCS-QL expression tree classes
  • modify FCSQueryParser to use expression tree
  • Property svn:eol-style set to native
File size: 2.7 KB
Line 
1package eu.clarin.sru.server.fcs;
2
3import java.util.Arrays;
4import java.util.Collections;
5import java.util.List;
6import java.util.Map;
7
8import eu.clarin.sru.server.SRUConstants;
9import eu.clarin.sru.server.SRUDiagnosticList;
10import eu.clarin.sru.server.SRUQuery;
11import eu.clarin.sru.server.SRUQueryBase;
12import eu.clarin.sru.server.SRUQueryParser;
13import eu.clarin.sru.server.SRUVersion;
14import eu.clarin.sru.server.fcs.parser.QueryNode;
15import eu.clarin.sru.server.fcs.parser.QueryParser;
16import eu.clarin.sru.server.fcs.parser.QueryParserException;
17
18public class FCSQueryParser implements SRUQueryParser<QueryNode> {
19    private static final String PARAM_QUERY = "query";
20    private static final List<String> QUERY_PARAMETER_NAMES =
21            Collections.unmodifiableList(Arrays.asList(PARAM_QUERY));
22    private final QueryParser parser = new QueryParser();
23
24
25    @Override
26    public String getQueryType() {
27        return Constants.FCS_QUERY_TYPE_FCS;
28    }
29
30
31    @Override
32    public boolean supportsVersion(SRUVersion version) {
33        if (version == null) {
34            throw new NullPointerException("version == null");
35        }
36        /*
37         * CQL is supported by all SRU versions ...
38         */
39        return version.compareTo(SRUVersion.VERSION_2_0) >= 0;
40    }
41
42
43    @Override
44    public String getQueryTypeDefintion() {
45        return null;
46    }
47
48
49    @Override
50    public List<String> getQueryParameterNames() {
51        return QUERY_PARAMETER_NAMES;
52    }
53
54
55    @Override
56    public SRUQuery<QueryNode> parseQuery(SRUVersion version,
57            Map<String, String> parameters, SRUDiagnosticList diagnostics) {
58        FCSQuery result = null;
59
60        final String rawQuery = parameters.get(PARAM_QUERY);
61        if (rawQuery == null) {
62            diagnostics.addDiagnostic(SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
63                    null, "no query passed to query parser");
64            return null;
65        }
66
67        try {
68            QueryNode parsedQuery = parser.parse(rawQuery);
69            result = new FCSQuery(rawQuery, parsedQuery);
70        } catch (QueryParserException e) {
71            diagnostics.addDiagnostic(Constants.FCS_DIAGNOSTIC_GENERAL_QUERY_SYNTAX_ERROR,
72                    null, e.getMessage());
73        } catch (Exception e) {
74            diagnostics.addDiagnostic(SRUConstants.SRU_GENERAL_SYSTEM_ERROR,
75                    null, "Unexpected error while parsing query.");
76        }
77        return result;
78    }
79
80
81    public static final class FCSQuery extends SRUQueryBase<QueryNode> {
82
83        private FCSQuery(String rawQuery, QueryNode parsedQuery) {
84            super(rawQuery, parsedQuery);
85        }
86
87
88        @Override
89        public String getQueryType() {
90            return Constants.FCS_QUERY_TYPE_FCS;
91        }
92    }
93
94} // class FCSQueryParser
Note: See TracBrowser for help on using the repository browser.