org.apache.sling.testing.mock.jcr.MockQueryManager.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.sling.testing.mock.jcr.MockQueryManager.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.sling.testing.mock.jcr;

import java.util.ArrayList;
import java.util.List;

import javax.jcr.Node;
import javax.jcr.RepositoryException;
import javax.jcr.query.InvalidQueryException;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.query.qom.QueryObjectModelFactory;

import org.apache.commons.lang3.StringUtils;

import com.google.common.collect.ImmutableList;

/**
 * Mock implementation of {@link QueryManager}.
 */
class MockQueryManager implements QueryManager {

    private List<MockQueryResultHandler> resultHandlers = new ArrayList<MockQueryResultHandler>();

    @SuppressWarnings("deprecation")
    private static final List<String> SUPPORTED_QUERY_LANGUAGES = ImmutableList.of(Query.JCR_SQL2, Query.JCR_JQOM,
            Query.XPATH, Query.SQL);

    @Override
    public Query createQuery(String statement, String language) throws RepositoryException {
        if (!SUPPORTED_QUERY_LANGUAGES.contains(StringUtils.defaultString(language))) {
            throw new InvalidQueryException("Unsupported query language: " + language);
        }
        return new MockQuery(this, statement, language);
    }

    @Override
    public String[] getSupportedQueryLanguages() throws RepositoryException {
        return SUPPORTED_QUERY_LANGUAGES.toArray(new String[SUPPORTED_QUERY_LANGUAGES.size()]);
    }

    void addResultHandler(MockQueryResultHandler resultHandler) {
        this.resultHandlers.add(resultHandler);
    }

    QueryResult executeQuery(MockQuery query) {
        for (MockQueryResultHandler resultHandler : resultHandlers) {
            MockQueryResult result = resultHandler.executeQuery(query);
            if (result != null) {
                return result;
            }
        }
        // fallback to empty result
        return new MockQueryResult(ImmutableList.<Node>of());
    }

    // --- unsupported operations ---

    @Override
    public QueryObjectModelFactory getQOMFactory() {
        throw new UnsupportedOperationException();
    }

    @Override
    public Query getQuery(Node node) throws RepositoryException {
        throw new UnsupportedOperationException();
    }

}