/* * Copyright (C) 2009 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.services.jcr.lab.cluster.test; import org.exoplatform.services.jcr.JcrAPIBaseTest; import org.exoplatform.services.jcr.impl.core.NodeImpl; import java.util.Calendar; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; import javax.jcr.Value; import javax.jcr.query.Query; import javax.jcr.query.QueryManager; import javax.jcr.query.QueryResult; import javax.jcr.query.Row; import javax.jcr.query.RowIterator; /** * @author <a href="mailto:nikolazius@gmail.com">Nikolay Zamosenchuk</a> * @version $Id: TestFullSearchAssert.java 34360 2009-07-22 23:58:59Z nzamosenchuk $ * */ public class TestFullSearchAssert extends JcrAPIBaseTest { public void testFullSearch() throws RepositoryException { Node cont1 = root.getNode("document1/jcr:content"); Node cont2 = root.getNode("document2/jcr:content"); Node cont3 = root.getNode("document3/jcr:content"); // make SQL query QueryManager qman = this.workspace.getQueryManager(); Query q = qman.createQuery("SELECT * FROM nt:resource WHERE CONTAINS(*,'do')", Query.SQL); QueryResult res = q.execute(); long sqlsize = res.getNodes().getSize(); assertEquals(1, sqlsize); checkResult(res, new Node[]{cont2}); //make XPath query Query xq = qman.createQuery("//element(*,nt:resource)[jcr:contains(.,'cats')]", Query.XPATH); QueryResult xres = xq.execute(); long xpathsize = xres.getNodes().getSize(); assertEquals(2, xpathsize); checkResult(xres, new Node[]{cont2, cont3}); System.out.println("Done!"); try { Thread.sleep(60000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } protected void checkResult(QueryResult result, Node[] nodes) throws RepositoryException { // collect paths String[] columnNames = result.getColumnNames(); String[][] vals = new String[(int)result.getNodes().getSize()][result.getColumnNames().length]; RowIterator rit = result.getRows(); int j = 0; while (rit.hasNext()) { Row r = rit.nextRow(); Value[] v = r.getValues(); for (int i = 0; i < v.length; i++) { vals[j][i] = (v[i] != null) ? v[i].getString() : "null"; } j++; } Set<String> expectedPaths = new HashSet<String>(); for (int i = 0; i < nodes.length; i++) { expectedPaths.add(nodes[i].getPath()); } Set<String> resultPaths = new HashSet<String>(); for (NodeIterator it = result.getNodes(); it.hasNext();) { resultPaths.add(it.nextNode().getPath()); } comparePaths(expectedPaths, resultPaths, false); } private void comparePaths(Set<String> expectedPaths, Set<String> resultPaths, boolean canContainMore) { // check if all expected are in result for (Iterator<String> it = expectedPaths.iterator(); it.hasNext();) { String path = it.next(); assertTrue(path + " is not part of the result set", resultPaths.contains(path)); } if (!canContainMore) { // check result does not contain more than expected for (Iterator<String> it = resultPaths.iterator(); it.hasNext();) { String path = it.next(); assertTrue(path + " is not expected to be part of the result set. " + " Total size:" + resultPaths.size(), expectedPaths.contains(path)); } } } @Override protected void tearDown() throws Exception { // do noting } }