Changeset 6842


Ignore:
Timestamp:
11/25/15 10:28:02 (8 years ago)
Author:
Oliver Schonefeld
Message:
  • add 'searchTerms' query parser (SRU 2.0)
Location:
SRUServer/trunk/src/main/java/eu/clarin/sru/server
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • SRUServer/trunk/src/main/java/eu/clarin/sru/server/CQLQueryParser.java

    r6824 r6842  
    3434    private static final List<String> QUERY_PARAMETER_NAMES =
    3535            Collections.unmodifiableList(Arrays.asList(PARAM_QUERY));
    36    
     36
    3737
    3838    @Override
     
    4343
    4444    @Override
     45    public boolean supportsVersion(SRUVersion version) {
     46        if (version == null) {
     47            throw new NullPointerException("version == null");
     48        }
     49        /*
     50         * CQL is supported by all SRU versions ...
     51         */
     52        return true;
     53    }
     54
     55
     56    @Override
    4557    public String getQueryTypeDefintion() {
    4658        return null;
    4759    }
     60
    4861
    4962    @Override
     
    91104
    92105
    93     public static final class CQLQuery implements SRUQuery<CQLNode> {
    94         private final String rawQuery;
    95         private final CQLNode parsedQuery;
    96 
     106    public static final class CQLQuery extends SRUQueryBase<CQLNode> {
    97107
    98108        private CQLQuery(String rawQuery, CQLNode parsedQuery) {
    99             this.rawQuery = rawQuery;
    100             this.parsedQuery = parsedQuery;
     109            super(rawQuery, parsedQuery);
    101110        }
    102111
     
    106115            return SRUConstants.SRU_QUERY_TYPE_CQL;
    107116        }
    108 
    109         @Override
    110         public String getRawQuery() {
    111             return rawQuery;
    112         }
    113 
    114         @Override
    115         public CQLNode getParsedQuery() {
    116             return parsedQuery;
    117         }
    118117    }
    119118
  • SRUServer/trunk/src/main/java/eu/clarin/sru/server/SRUConstants.java

    r6821 r6842  
    209209
    210210    /**
    211      * shortqueryType identifier for cql
     211     * shorthand queryType identifier for CQL
    212212     */
    213     public static final String SRU_QUERY_TYPE_CQL = "cql";
     213    public static final String SRU_QUERY_TYPE_CQL          = "cql";
     214    public static final String SRU_QUERY_TYPE_SEARCH_TERMS = "searchTerms";
    214215
    215216
  • SRUServer/trunk/src/main/java/eu/clarin/sru/server/SRUQueryParser.java

    r6822 r6842  
    3636
    3737    /**
     38     * Check if query is supported by a specific version of SRU/CQL
     39     *
     40     * @param version
     41     *            the version
     42     * @return <code>true</code> if version is supported, <code>false</code>
     43     *         otherwise
     44     */
     45    public boolean supportsVersion(SRUVersion version);
     46
     47
     48    /**
    3849     * The URI for the for the query type’s definition.
    3950     *
  • SRUServer/trunk/src/main/java/eu/clarin/sru/server/SRUQueryParserRegistry.java

    r6825 r6842  
    3838    public SRUQueryParserRegistry() {
    3939        queryParsers.add(new CQLQueryParser());
     40        queryParsers.add(new SearchTermsQueryParser());
    4041    }
    4142
  • SRUServer/trunk/src/main/java/eu/clarin/sru/server/SRURequestImpl.java

    r6825 r6842  
    607607                            queryParsers.findQueryParser(queryType);
    608608                    if (queryParser != null) {
    609                         /*
    610                          * gather query parameters (as required by QueryParser
    611                          * implementation
    612                          */
    613                         final Map<String, String> queryParameters =
    614                                 new HashMap<String, String>();
    615                         List<String> missingParameter = null;
    616                         for (String name : queryParser.getQueryParameterNames()) {
    617                             parameterNames.remove(name);
    618                             final String value = getParameter(name, true, false);
    619                             if (value != null) {
    620                                 queryParameters.put(name, value);
     609                        if (queryParser.supportsVersion(version)) {
     610                            /*
     611                             * gather query parameters (as required by
     612                             * QueryParser implementation
     613                             */
     614                            final Map<String, String> queryParameters =
     615                                    new HashMap<String, String>();
     616                            List<String> missingParameter = null;
     617                            for (String name : queryParser.getQueryParameterNames()) {
     618                                parameterNames.remove(name);
     619                                final String value =
     620                                        getParameter(name, true, false);
     621                                if (value != null) {
     622                                    queryParameters.put(name, value);
     623                                } else {
     624                                    if (missingParameter == null) {
     625                                        missingParameter = new ArrayList<String>();
     626                                    }
     627                                    missingParameter.add(name);
     628                                }
     629                            }
     630
     631                            if (missingParameter == null) {
     632                                logger.debug("parsing query with parser for " +
     633                                        "type '{}' and parameters {}",
     634                                        queryParser.getQueryType(),
     635                                        queryParameters);
     636                                query = queryParser.parseQuery(version,
     637                                        queryParameters, this);
    621638                            } else {
    622                                 if (missingParameter == null) {
    623                                     missingParameter = new ArrayList<String>();
     639                                logger.debug("parameters {} missing, cannot " +
     640                                        "parse query", missingParameter);
     641                                for (String name : missingParameter) {
     642                                    addDiagnostic(SRUConstants.SRU_MANDATORY_PARAMETER_NOT_SUPPLIED,
     643                                            name,
     644                                            "Mandatory parameter '" + name +
     645                                                    "' is missing or empty. " +
     646                                                    "Required to perform query " +
     647                                                    "of query type '" +
     648                                                    queryType + "'.");
    624649                                }
    625                                 missingParameter.add(name);
    626650                            }
    627                         }
    628 
    629                         if (missingParameter == null) {
    630                             logger.debug("parsing query with parser for " +
    631                                     "type '{}' and parameters {}",
    632                                     queryParser.getQueryType(),
    633                                     queryParameters);
    634                             query = queryParser.parseQuery(version,
    635                                     queryParameters, this);
    636651                        } else {
    637                             logger.debug("parameters {} missing, cannot parse query",
    638                                     missingParameter);
    639                             for (String name : missingParameter) {
    640                                 addDiagnostic(
    641                                         SRUConstants.SRU_MANDATORY_PARAMETER_NOT_SUPPLIED,
    642                                         name, "Mandatory parameter '" + name +
    643                                                 "' is missing or empty. " +
    644                                                 "Required to perform query " +
    645                                                 "of query type '" +
    646                                                 queryType + "'.");
    647                             }
     652                            logger.debug("query parser for query type '{}' " +
     653                                    "is not supported by SRU version {}",
     654                                    queryType, version);
     655                            addDiagnostic(SRUConstants.SRU_CANNOT_PROCESS_QUERY_REASON_UNKNOWN, null,
     656                                    "Query parser for query type '" +
     657                                            queryType + "' is nut supported " +
     658                                            "by SRU version '" +
     659                                            version.getVersionString() + "'.");
    648660                        }
    649661                    } else {
Note: See TracChangeset for help on using the changeset viewer.