/*
* 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.impl.core.query.lucene;
import org.exoplatform.services.jcr.JcrImplBaseTest;
import org.exoplatform.services.jcr.core.CredentialsImpl;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import javax.jcr.Credentials;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
/**
* Created by The eXo Platform SAS Author : Sergey Karpenko <sergey.karpenko@exoplatform.com.ua>
*
* @version $Id: TestRemapping.java 11908 2008-03-13 16:00:12Z ksm $
*/
public class TestRemapping extends JcrImplBaseTest
{
public static final Log logger = ExoLogger.getLogger("exo.jcr.component.core.TestRemapping");
public final String ORIGINAL_PREFIX = "test_remap";
public final String NEW_PREFIX = "new_remap";
public final String URI = "http://www.test_my.org/test_remap";
public final String TEST_NAME = "test_name";
public void setUp() throws Exception
{
super.setUp();
boolean isOriginal = false;
boolean isNew = false;
String[] prefs = session.getWorkspace().getNamespaceRegistry().getPrefixes();
for (int i = 0; i < prefs.length; i++)
{
if (prefs[i].equalsIgnoreCase(ORIGINAL_PREFIX))
isOriginal = true;
if (prefs[i].equalsIgnoreCase(NEW_PREFIX))
isNew = true;
}
if (!isOriginal)
{
session.getWorkspace().getNamespaceRegistry().registerNamespace(ORIGINAL_PREFIX, URI);
session.save();
}
// create test document
root.addNode(ORIGINAL_PREFIX + ":" + TEST_NAME);
root.save();
// remapping
if (!isNew)
{
session.setNamespacePrefix(NEW_PREFIX, URI);
root.save();
}
}
public void tearDown() throws Exception
{
Node node = (Node)session.getItem("/" + ORIGINAL_PREFIX + ":" + TEST_NAME);
node.remove();
session.save();
super.tearDown();
}
public void testRemappingXPath() throws Exception
{
QueryManager qManager = session.getWorkspace().getQueryManager();
QueryResult res = qManager.createQuery(ORIGINAL_PREFIX + ":" + TEST_NAME, Query.XPATH).execute();
assertEquals(1, res.getNodes().getSize());
res = qManager.createQuery(NEW_PREFIX + ":" + TEST_NAME, Query.XPATH).execute();
assertEquals(1, res.getNodes().getSize());
// Check hits
NodeIterator nIt = res.getNodes();
Node n = (Node)nIt.next();
assertEquals(NEW_PREFIX + ":" + TEST_NAME, n.getName());
// Search in other jcr - session
Credentials cred = new CredentialsImpl("exo", "exo".toCharArray());
Session sess = repository.login(cred, "ws");
qManager = sess.getWorkspace().getQueryManager();
res = qManager.createQuery(ORIGINAL_PREFIX + ":" + TEST_NAME, Query.XPATH).execute();
assertEquals(1, res.getNodes().getSize());
boolean itsOK = false;
try
{
res = qManager.createQuery(NEW_PREFIX + ":" + TEST_NAME, Query.XPATH).execute();
}
catch (javax.jcr.query.InvalidQueryException e)
{
// OK
itsOK = true;
}
assertTrue(itsOK);
}
public void testRemappingSQL() throws Exception
{
QueryManager qManager = session.getWorkspace().getQueryManager();
QueryResult res =
qManager
.createQuery(
"SELECT * FROM nt:unstructured WHERE jcr:path LIKE '/" + ORIGINAL_PREFIX + ":" + TEST_NAME + "'",
Query.SQL).execute();
assertEquals(1, res.getNodes().getSize());
res =
qManager.createQuery(
"SELECT * FROM nt:unstructured WHERE jcr:path LIKE '/" + NEW_PREFIX + ":" + TEST_NAME + "'", Query.SQL)
.execute();
assertEquals(1, res.getNodes().getSize());
// Check hits
NodeIterator nIt = res.getNodes();
Node n = (Node)nIt.next();
assertEquals(NEW_PREFIX + ":" + TEST_NAME, n.getName());
// Search in other jcr - session
Credentials cred = new CredentialsImpl("exo", "exo".toCharArray());
Session sess = repository.login(cred, "ws");
qManager = sess.getWorkspace().getQueryManager();
res =
qManager
.createQuery(
"SELECT * FROM nt:unstructured WHERE jcr:path LIKE '/" + ORIGINAL_PREFIX + ":" + TEST_NAME + "'",
Query.SQL).execute();
assertEquals(1, res.getNodes().getSize());
boolean itsOK = false;
try
{
res =
qManager.createQuery(
"SELECT * FROM nt:unstructured WHERE jcr:path LIKE '/" + NEW_PREFIX + ":" + TEST_NAME + "'", Query.SQL)
.execute();
}
catch (javax.jcr.query.InvalidQueryException e)
{
// OK
itsOK = true;
}
assertTrue(itsOK);
}
}