/*
* 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;
/**
* <code>AbstractJoinTest</code> provides utility methods for join related
* tests.
*/
public abstract class AbstractJoinTest extends AbstractQOMTest
{
// /**
// * Name of the left selector.
// */
// protected static final String LEFT = "left";
//
// /**
// * Name of the right selector.
// */
// protected static final String RI//
//// /**
//// * 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 ArrayList();
//// 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>. Then the QOM is executed
//// * again using {@link QueryObjectModel#getStatement()} with
//// * {@link Query#JCR_SQL2}.
//// *
//// * @param qom the query object model to check.
//// * @param selectorNames the selector names of the qom.
//// * @param nodes the result nodes.
//// * @throws RepositoryException if an error occurs while executing the
//// * query.
//// */
////protected void checkQOM(QueryObjectModel qom, String[] selectorNames, Node[][] nodes) throws RepositoryException
////{
//// checkResult(qom.execute(), selectorNames, nodes);
//// checkResult(qm.createQuery(qom.getStatement(), Query.JCR_SQL2).execute(), selectorNames, 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());
//// }
////}
//GHT = "right";
//
// /**
// * The selector names for the join.
// */
// protected static final String[] SELECTOR_NAMES = new String[]{LEFT, RIGHT};
//
// //--------------------------< utilities >-----------------------------------
//
// protected void checkQOM(QueryObjectModel qom, Node[][] nodes) throws RepositoryException
// {
// checkQOM(qom, SELECTOR_NAMES, nodes);
// }
//
// protected void checkResult(QueryResult result, Node[][] nodes) throws RepositoryException
// {
// checkResult(result, SELECTOR_NAMES, nodes);
// }
//
// protected QueryObjectModel createQuery(String joinType, JoinCondition condition) throws RepositoryException
// {
// return createQuery(joinType, condition, null, null);
// }
//
// protected QueryObjectModel createQuery(String joinType, JoinCondition condition, Constraint left, Constraint right)
// throws RepositoryException
// {
// // only consider nodes under test root
// Constraint constraint;
// if (QueryObjectModelConstants.JCR_JOIN_TYPE_LEFT_OUTER.equals(joinType))
// {
// constraint = qf.descendantNode(LEFT, testRoot);
// }
// else
// {
// constraint = qf.descendantNode(RIGHT, testRoot);
// }
//
// if (left != null)
// {
// constraint = qf.and(constraint, left);
// }
// if (right != null)
// {
// constraint = qf.and(constraint, right);
// }
// Join join = qf.join(qf.selector(testNodeType, LEFT), qf.selector(testNodeType, RIGHT), joinType, condition);
// return qf.createQuery(join, constraint, null, null);
// }
}