/* * 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.impl.datamodel; import org.exoplatform.services.jcr.JcrImplBaseTest; import org.exoplatform.services.jcr.impl.core.NodeImpl; import org.exoplatform.services.jcr.impl.core.SessionImpl; import java.util.Calendar; import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.UnsupportedRepositoryOperationException; /** * Created by The eXo Platform SAS * * 08.02.2007 * * @author <a href="mailto:peter.nedonosko@exoplatform.com.ua">Peter Nedonosko</a> * @version $Id: ItemQPathTest.java 14508 2008-05-20 10:07:45Z ksm $ */ public class ItemQPathTest extends JcrImplBaseTest { protected final String TEST_ROOT = "qpath_test"; protected NodeImpl testRoot = null; @Override public void setUp() throws Exception { super.setUp(); testRoot = (NodeImpl)session.getRootNode().addNode(TEST_ROOT); session.save(); } @Override protected void tearDown() throws Exception { testRoot.remove(); session.save(); super.tearDown(); } public void testSameNameSibling() throws Exception { testRoot.addNode("node", "nt:base"); session.save(); Node file = testRoot.addNode("node", "nt:file"); Node nContent = file.addNode("jcr:content", "nt:unstructured"); nContent.setProperty("currenTime", Calendar.getInstance()); nContent.setProperty("info", "Info string"); Node resource = nContent.addNode("fileData", "nt:resource"); resource.setProperty("jcr:mimeType", "text/plain"); resource.setProperty("jcr:lastModified", Calendar.getInstance()); resource.setProperty("jcr:data", "DATA STRING"); session.save(); SessionImpl user = (SessionImpl)repository.login(this.credentials /* session.getCredentials() */, session.getWorkspace() .getName()); try { NodeImpl n1 = (NodeImpl)user.getRootNode().getNode(TEST_ROOT).getNode("node"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node", n1.getPath()); NodeImpl n2 = (NodeImpl)user.getRootNode().getNode(TEST_ROOT).getNode("node[2]"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node[2]", n2.getPath()); } catch (PathNotFoundException e) { fail(e.getMessage()); } } public void testSameNameSiblingBulkAdd() throws Exception { testRoot.addNode("node", "nt:base"); session.save(); Node file = testRoot.addNode("node", "nt:file"); Node nContent = file.addNode("jcr:content", "nt:unstructured"); nContent.setProperty("currenTime", Calendar.getInstance()); nContent.setProperty("info", "Info string"); Node resource = nContent.addNode("fileData", "nt:resource"); resource.setProperty("jcr:mimeType", "text/plain"); resource.setProperty("jcr:lastModified", Calendar.getInstance()); resource.setProperty("jcr:data", "DATA STRING"); testRoot.addNode("node", "nt:base"); testRoot.addNode("node", "nt:base"); session.save(); SessionImpl user = (SessionImpl)repository.login(this.credentials /* session.getCredentials() */, session.getWorkspace() .getName()); try { Node n1 = user.getRootNode().getNode(TEST_ROOT).getNode("node"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node", n1.getPath()); Node n2 = user.getRootNode().getNode(TEST_ROOT).getNode("node[2]"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node[2]", n2.getPath()); Node n3 = user.getRootNode().getNode(TEST_ROOT).getNode("node[3]"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node[3]", n3.getPath()); Node n4 = user.getRootNode().getNode(TEST_ROOT).getNode("node[4]"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node[4]", n4.getPath()); } catch (PathNotFoundException e) { fail(e.getMessage()); } } public void testSameNameSiblingRemove() throws Exception { Node n1 = testRoot.addNode("node", "nt:base"); session.save(); Node file = testRoot.addNode("node", "nt:file"); Node nContent = file.addNode("jcr:content", "nt:unstructured"); nContent.setProperty("currenTime", Calendar.getInstance()); nContent.setProperty("info", "Info string"); Node resource = nContent.addNode("fileData", "nt:resource"); resource.setProperty("jcr:mimeType", "text/plain"); resource.setProperty("jcr:lastModified", Calendar.getInstance()); resource.setProperty("jcr:data", "DATA STRING"); Node n3 = testRoot.addNode("node", "nt:base"); Node n4 = testRoot.addNode("node", "nt:base"); n4.addMixin("mix:referenceable"); String n4Uuid = n4.getUUID(); session.save(); SessionImpl user = (SessionImpl)repository.login(this.credentials /* session.getCredentials() */, session.getWorkspace() .getName()); try { user.getRootNode().getNode(TEST_ROOT).getNode("node").remove(); user.getRootNode().getNode(TEST_ROOT).getNode("node[2]").remove(); // n3 user.save(); Node un1 = user.getRootNode().getNode(TEST_ROOT).getNode("node"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node", un1.getPath()); Node content = un1.getNode("jcr:content"); assertEquals("Path is invalid", "/" + TEST_ROOT + "/node/jcr:content", content.getPath()); Node un2 = user.getRootNode().getNode(TEST_ROOT).getNode("node[2]"); // user.getRootNode(). // getNode // (TEST_ROOT).getNodes() assertEquals("Path is invalid", "/" + TEST_ROOT + "/node[2]", un2.getPath()); try { assertEquals("UUID is invalid", n4Uuid, un2.getUUID()); } catch (UnsupportedRepositoryOperationException e) { fail(e.getMessage()); } } catch (PathNotFoundException e) { fail(e.getMessage()); } } }