/*
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.jcr.usecases.query;
import org.exoplatform.services.jcr.JcrAPIBaseTest;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
/**
* Created by The eXo Platform SAS.
*
* @author <a href="mailto:geaz@users.sourceforge.net">Gennady Azarenkov</a>
* @version $Id: TestQueryReferenceNode.java 11907 2008-03-13 15:36:21Z ksm $
*/
public class TestQueryReferenceNode extends JcrAPIBaseTest
{
public void testGetReferences() throws Exception
{
String sqlQuery = "select * from nt:unstructured where jcr:path like '/queryNode/%' ";
// Session session = repository.getSystemSession(repository.getSystemWorkspaceName()) ;
Node rootNode = session.getRootNode();
Node queryNode = rootNode.addNode("queryNode", "nt:unstructured");
rootNode.save();
// make sure database is clean
QueryManager manager = session.getWorkspace().getQueryManager();
Query query = manager.createQuery(sqlQuery, Query.SQL);
QueryResult queryResult = query.execute();
NodeIterator iter = queryResult.getNodes();
assertTrue(iter.getSize() == 0);
Node testNode = queryNode.addNode("testGetReferences", "nt:unstructured");;
Node n1 = queryNode.addNode("n1", "nt:unstructured");
Node n2 = queryNode.addNode("n2", "nt:unstructured");
queryNode.save();
// before make reference
queryResult = query.execute();
iter = queryResult.getNodes();
assertTrue(iter.getSize() == 3);
// After make reference
testNode.addMixin("mix:referenceable");
n1.setProperty("p1", testNode);
queryNode.save();
// /////////
Session session1 =
repository.login(new SimpleCredentials("admin", "admin".toCharArray()), repository.getSystemWorkspaceName());
manager = session1.getWorkspace().getQueryManager();
query = manager.createQuery(sqlQuery, Query.SQL);
// /////////
queryResult = query.execute();
iter = queryResult.getNodes();
assertEquals(3, iter.getSize());
// clean database
queryNode.remove();
session.save();
}
}