/*
* 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.xcmis.search.query.content;
import org.xcmis.search.InvalidQueryException;
import org.xcmis.search.model.Query;
import org.xcmis.search.query.QueryExecutionException;
import org.xcmis.search.result.ScoredRow;
import java.util.List;
/**
* <code>AbstractQOMTest</code> is a base class for test cases on the JQOM.
*/
public abstract class AbstractQOMTest extends AbstractQueryTest
{
//
// /**
// * Binds the given <code>value</code> to the variable named
// * <code>var</code>.
// *
// * @param q the query
// * @param var name of variable in query
// * @param value value to bind
// * @throws IllegalArgumentException if <code>var</code> is not a valid
// * variable in this query.
// * @throws RepositoryException if an error occurs.
// */
// protected void bindVariableValue(Query q, String var, Object value) throws RepositoryException
// {
// q.bindValue(var, value);
// }
//
// protected void checkResultOrder(QueryObjectModel qom, String[] selectorNames, Node[][] nodes)
// throws RepositoryException
// {
// checkResultOrder(qom.execute(), selectorNames, nodes);
// checkResultOrder(qm.createQuery(qom.getStatement(), Query.JCR_SQL2).execute(), selectorNames, nodes);
// }
//
// protected void checkResultOrder(QueryResult result, String[] selectorNames, Node[][] nodes)
// throws RepositoryException
// {
// // collect rows
// List expectedPaths = new ArrayLisScoredt();
// log.println("expected:");
// for (int i = 0; i < nodes.length; i++)
// {
// StringBuffer aggregatedPaths = new StringBuffer();
// for (int j = 0; j < nodes[i].length; j++)
// {
// aggregatedPaths.append(getPath(nodes[i][j]));
// aggregatedPaths.append("|");
// }
// expectedPaths.add(aggregatedPaths.toString());
// log.println(aggregatedPaths.toString());
// }
//
// List resultPaths = new ArrayList();
// log.println("result:");
// for (RowIterator it = result.getRows(); it.hasNext();)
// {
// Row r = it.nextRow();
// StringBuffer aggregatedPaths = new StringBuffer();
// for (int i = 0; i < selectorNames.length; i++)
// {
// aggregatedPaths.append(getPath(r.getNode(selectorNames[i])));
// aggregatedPaths.append("|");
// }
// resultPaths.add(aggregatedPaths.toString());
// log.println(aggregatedPaths.toString());
// }
//
// assertEquals("wrong result order", expectedPaths, resultPaths);
// }
//
// /**
// * Checks the query object model by executing it directly and matching the
// * result against the given <code>nodes</code>. Then the QOM is executed
// * again using {@link QueryObjectModel#getStatement()} with {@link
// * Query#JCR_SQL2}.
// *
// * @param qom the query object model to check.
// * @param nodes the result nodes.
// * @throws RepositoryException if an error occurs while executing the
// * query.
// */
// protected void checkQOM(QueryObjectModel qom, Node[] nodes) throws RepositoryException
// {
// checkResult(qom.execute(), nodes);
// checkResult(qm.createQuery(qom.getStatement(), Query.JCR_SQL2).execute(), nodes);
// }
//
/**
* Checks the query object model by executing it directly and matching the
* result against the given <code>nodes</code>.
*
* @param qom the query object model to check.
* @param selectorNames the selector names of the qom.
* @param nodes the result nodes.
* @throws InvalidQueryException
* @throws QueryExecutionException
* @throws RepositoryException if an error occurs while executing the
* query.
*/
protected void checkQOM(Query query, String selectorName, Node[] nodes) throws QueryExecutionException,
InvalidQueryException
{
List<ScoredRow> result = searchService.execute(query);
checkResult(result, selectorName, nodes);
}
//
// protected void checkResult(QueryResult result, String[] selectorNames, Node[][] nodes) throws RepositoryException
// {
// // collect rows
// Set expectedPaths = new HashSet();
// log.println("expected:");
// for (int i = 0; i < nodes.length; i++)
// {
// StringBuffer aggregatedPaths = new StringBuffer();
// for (int j = 0; j < nodes[i].length; j++)
// {
// aggregatedPaths.append(getPath(nodes[i][j]));
// aggregatedPaths.append("|");
// }
// expectedPaths.add(aggregatedPaths.toString());
// log.println(aggregatedPaths.toString());
// }
//
// Set resultPaths = new HashSet();
// log.println("result:");
// for (RowIterator it = result.getRows(); it.hasNext();)
// {
// Row r = it.nextRow();
// StringBuffer aggregatedPaths = new StringBuffer();
// for (int i = 0; i < selectorNames.length; i++)
// {
// aggregatedPaths.append(getPath(r.getNode(selectorNames[i])));
// aggregatedPaths.append("|");
// }
// resultPaths.add(aggregatedPaths.toString());
// log.println(aggregatedPaths.toString());
// }
//
// // check if all expected are in result
// for (Iterator it = expectedPaths.iterator(); it.hasNext();)
// {
// String path = (String)it.next();
// assertTrue(path + " is not part of the result set", resultPaths.contains(path));
// }
// // check result does not contain more than expected
// for (Iterator it = resultPaths.iterator(); it.hasNext();)
// {
// String path = (String)it.next();
// assertTrue(path + " is not expected to be part of the result set", expectedPaths.contains(path));
// }
// }
//
// /**
// * Returns the path of the <code>node</code> or an empty string if
// * <code>node</code> is <code>null</code>.
// *
// * @param node a node or <code>null</code>.
// * @return the path of the node or an empty string if <code>node</code> is
// * <code>null</code>.
// * @throws RepositoryException if an error occurs while reading from the
// * repository.
// */
// protected static String getPath(Node node) throws RepositoryException
// {
// if (node != null)
// {
// return node.getPath();
// }
// else
// {
// return "";
// }
// }
//
// /**
// * Calls back the <code>callable</code> first with the <code>qom</code> and
// * then a JCR_SQL2 query created from {@link QueryObjectModel#getStatement()}.
// *
// * @param qom a query object model.
// * @param callable the callback.
// * @throws RepositoryException if an error occurs.
// */
// protected void forQOMandSQL2(QueryObjectModel qom, Callable callable) throws RepositoryException
// {
// List queries = new ArrayList();
// queries.add(qom);
// queries.add(qm.createQuery(qom.getStatement(), Query.JCR_SQL2));
// for (Iterator it = queries.iterator(); it.hasNext();)
// {
// callable.call((Query)it.next());
// }
// }
// /**
// * @see org.xcmis.search.query.content.AbstractQueryTest#setUp()
// */
// @Override
// protected void setUp() throws Exception
// {
// super.setUp();
//
// }
//
// /**
// * @see org.xcmis.search.query.content.AbstractQueryTest#tearDown()
// */
// @Override
// protected void tearDown() throws Exception
// {
//
// }
protected interface Callable
{
public Object call(Query query);
}
}