/*
* Copyright (C) 2003-2008 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.ecm.dms.test;
import javax.jcr.Item;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.exoplatform.services.wcm.BaseWCMTestCase;
import org.junit.Test;
/**
* Created by The eXo Platform SARL
* Author : Hoang Van Hung
* hunghvit@gmail.com
* Mar 15, 2009
*/
public class TestSymLink extends BaseWCMTestCase {
MockNodeFinderImpl nodeFinder;
/**
* Set up for testing
*
* In Collaboration workspace
*
* /---TestTreeNode
* |
* |_____A1
* | |___C1___C1_1___C1_2___C1_3(exo:symlink -->C2)
* | |___C2___C2_2___D(exo:symlink -->C3)
* | |___C3___C4
* |
* |_____A2
* | |___B2(exo:symlink --> C1)
* |
* |_____A3(exo:symlink --> C2)
*
* In System workspace
* /------TestTreeNode2
* |
* |_____M1___M2(exo:symlink --> C1)
* |
* |_____N1___N2(exo:symlink --> C2)
* |
* |_____O1(exo:symlink --> no node)
* |
* |_____P1
*
*/
public void setUp() throws Exception {
super.setUp();
nodeFinder = (MockNodeFinderImpl) container.getComponentInstanceOfType(MockNodeFinderImpl.class);
System.out.println("========== Create root node ========");
applyUserSession("john", "gtn", COLLABORATION_WS);
createTreeInCollaboration();
createTreeInSystem();
}
/**
* Create tree in System workspace
*
* @throws Exception
*/
public void createTreeInSystem() throws Exception {
// Session session = repository.login(credentials, SYSTEM_WS);
Session sessionSys = sessionProviderService_.getSystemSessionProvider(null).getSession(SYSTEM_WS, repository);
Node rootNode = sessionSys.getRootNode();
Node testNode = rootNode.addNode("TestTreeNode2");
Node nodeM1 = testNode.addNode("M1");
Node nodeN1 = testNode.addNode("N1");
testNode.addNode("p1");
// Session collaboSession = repository.login(credentials, COLLABORATION_WS);
Node nodeC1 = (Node) session.getItem("/TestTreeNode/A1/C1");
addSymlink("M2", nodeM1, nodeC1);
Node nodeC2 = (Node) session.getItem("/TestTreeNode/A1/C2");
addSymlink("N2", nodeN1, nodeC2);
Node nodeO1 = testNode.addNode("O1","exo:symlink");
nodeO1.setProperty("exo:workspace",COLLABORATION_WS);
nodeO1.setProperty("exo:uuid", "12");
nodeO1.setProperty("exo:primaryType", "nt:folder");
/* Set node and properties for Node B1 */
session.save();
}
public void addSymlink(String name, Node src, Node target) throws Exception {
Node node = src.addNode(name,"exo:symlink");
if (target.hasProperty("jcr:uuid")) {
System.out.println("\n\n jcr uuid = " + target.getProperty("jcr:uuid").getValue());
} else {
target.addMixin("mix:referenceable");
}
node.setProperty("exo:workspace",COLLABORATION_WS);
node.setProperty("exo:uuid",target.getProperty("jcr:uuid").getString());
node.setProperty("exo:primaryType",target.getPrimaryNodeType().getName());
}
public void createTreeInCollaboration() throws Exception {
Node rootNode = session.getRootNode();
Node testNode = rootNode.addNode("TestTreeNode");
Node nodeA1 = testNode.addNode("A1");
Node nodeA2 = testNode.addNode("A2");
Node nodeB2 = nodeA2.addNode("B2","exo:symlink");
Node nodeC1 = nodeA1.addNode("C1");
Node nodeC1_1 = nodeC1.addNode("C1_1");
Node nodeC1_2 = nodeC1_1.addNode("C1_2");
Node nodeC1_3 = nodeC1_2.addNode("C1_3","exo:symlink");
Node nodeC2 = nodeA1.addNode("C2");
Node nodeC3 = nodeA1.addNode("C3");
nodeC3.addNode("C4");
Node nodeC2_2 = nodeC2.addNode("C2_2");
Node nodeD = nodeC2_2.addNode("D", "exo:symlink");
if (nodeC1.hasProperty("jcr:uuid")) {
System.out.println("\n\n jcr uuid = " +nodeC1.getProperty("jcr:uuid").getValue());
} else {
nodeC1.addMixin("mix:referenceable");
nodeC2.addMixin("mix:referenceable");
nodeC3.addMixin("mix:referenceable");
}
nodeB2.setProperty("exo:workspace",COLLABORATION_WS);
nodeB2.setProperty("exo:uuid",nodeC1.getProperty("jcr:uuid").getString());
nodeB2.setProperty("exo:primaryType",nodeC1.getPrimaryNodeType().getName());
nodeD.setProperty("exo:workspace",COLLABORATION_WS);
nodeD.setProperty("exo:uuid",nodeC3.getProperty("jcr:uuid").getString());
nodeD.setProperty("exo:primaryType",nodeC3.getPrimaryNodeType().getName());
Node nodeA3 = testNode.addNode("A3","exo:symlink");
nodeA3.setProperty("exo:workspace", COLLABORATION_WS);
nodeA3.setProperty("exo:uuid", nodeC2.getProperty("jcr:uuid").getString());
nodeA3.setProperty("exo:primaryType",nodeC2.getPrimaryNodeType().getName());
nodeC1_3.setProperty("exo:workspace", COLLABORATION_WS);
nodeC1_3.setProperty("exo:uuid", nodeC2.getProperty("jcr:uuid").getString());
nodeC1_3.setProperty("exo:primaryType",nodeC2.getPrimaryNodeType().getName());
System.out.println("Get path = " + nodeA3.getPath());
/* Set node and properties for Node B1 */
session.save();
}
/**
* Browser tree of one node
*
* @param node
*/
private void browserTree(Node node, int iLevel) throws RepositoryException {
if (iLevel != 0) {
for (int j = 0; j < iLevel; j++) {
System.out.print("\t");
System.out.print("|");
}
System.out.println("-------" + node.getName());
} else
System.out.println(node.getName());
for (int j = 0; j < iLevel; j++) {
System.out.print("\t");
System.out.print("|");
}
System.out.print("\t");
System.out.println("|");
for (int j = 0; j < iLevel; j++) {
System.out.print("\t");
System.out.print("|");
}
System.out.print("\t");
System.out.println("|");
/* Get all nodes */
NodeIterator iterNode = node.getNodes();
/* Browser node */
Node tempNode;
/*
* for(int j = 0; j < iLevel + 1; j++){ System.out.print("\t"); }
*/
while (iterNode.hasNext()) {
for (int j = 0; j < iLevel; j++) {
System.out.print("\t");
System.out.print("|");
}
System.out.print("\t");
System.out.println("|");
for (int j = 0; j < iLevel; j++) {
System.out.print("\t");
System.out.print("|");
}
System.out.print("\t");
System.out.println("|");
tempNode = iterNode.nextNode();
this.browserTree(tempNode, iLevel + 1);
}
}
public void testGetPath() throws Exception {
String path = "/";
String expectedPath = "/";
System.out.println("\n\n Path input : " + path);
System.out.println("\n\n expected Path : " + expectedPath);
Node node = (Node)nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path out put: "+ node.getPath());
assertEquals(expectedPath,node.getPath());
}
public void testGetPath1() throws Exception {
String path = "/TestTreeNode";
String expectedPath = "/TestTreeNode";
System.out.println("\n\n Path input : " + path);
System.out.println("\n\n expected Path : " + expectedPath);
Node node = (Node)nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path out put: "+ node.getPath());
assertEquals(expectedPath,node.getPath());
}
public void testGetPath2() throws Exception {
String path = "/TestTreeNode/A2/B2";
String expectedPath = "/TestTreeNode/A2/B2";
System.out.println("\n\n Path input : " + path);
System.out.println("\n\n expected Path : " + expectedPath);
Item item = nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path output: "+ item.getPath());
assertEquals(expectedPath,item.getPath());
}
public void testGetPath3() throws Exception {
String path = "/TestTreeNode/A3/C2_2/D/C4";
String expectedPath = "/TestTreeNode/A1/C3/C4";
System.out.println("\n\n Path input : " + path);
System.out.println("\n\n expected Path : " + expectedPath);
Node node = (Node)nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path output: "+ node.getPath());
assertEquals(expectedPath,node.getPath());
}
public void testGetPath4() throws Exception {
String path = "/TestTreeNode/A2/B2/C1_1/C1_2/C1_3/C2_2/D";
String expectedPath = "/TestTreeNode/A1/C2/C2_2/D";
System.out.println("\n\n Path input : " + path);
System.out.println("\n\n expected Path : " + expectedPath);
Node node = (Node)nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path output: "+ node.getPath());
assertEquals(expectedPath,node.getPath());
}
public void testGetPath5() throws Exception {
String path = "/TestTreeNode/A1/C1/C1_1/C1_2/C1_3/C2_2/D/C4";
String expectedPath = "/TestTreeNode/A1/C3/C4";
System.out.println("\n\n Path input : " + path);
System.out.println("\n\n expected Path : " + expectedPath);
Node node = (Node)nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path output: "+ node.getPath());
assertEquals(expectedPath,node.getPath());
}
// public void testGetPathInOtherWorkspace1() throws Exception {
// String path = "/TestTreeNode2/M1/M2/jcr:uuid";
// String expectedPath = "/TestTreeNode/A1/C1/jcr:uuid";
// System.out.println("\n\n Path input : " + path);
// System.out.println("\n\n expected Path : " + expectedPath);
// Item item = nodeFinder.getItemSys(REPO_NAME, SYSTEM_WS, path, true);
// System.out.println("Path output: "+ item.getPath());
// assertEquals(expectedPath, item.getPath());
// }
//
// public void testGetPathInOtherWorkspace2() throws Exception {
// String path = "/TestTreeNode2/N1/N2/C2_2/D/C4";
// String expectedPath = "/TestTreeNode/A1/C3/C4";
// System.out.println("\n\n Path input : " + path);
// System.out.println("\n\n expected Path : " + expectedPath);
// Node node = (Node)nodeFinder.getItemSys(REPO_NAME, SYSTEM_WS, path, true);
// System.out.println("Path output: "+ node.getPath());
// assertEquals(expectedPath,node.getPath());
// }
//
// /**
// * Test get path with target node is in other workspace
// *
// */
//
// public void testGetPathInOtherWorkspace3() throws Exception {
// String path = "/TestTreeNode2/M1/M2/C1_1/C1_2/C1_3/C2_2/D/C4";
// String expectedPath = "/TestTreeNode/A1/C3/C4";
// System.out.println("\n\n Path input : " + path);
// System.out.println("\n\n expected Path : " + expectedPath);
// Node node = (Node)nodeFinder.getItemSys(REPO_NAME, SYSTEM_WS, path, true);
// System.out.println("Path output: "+ node.getPath());
// assertEquals(expectedPath,node.getPath());
// }
@Test
public void testGetInvalidPath1() throws Exception {
String path = "/TestTreeNode/A2/D";
System.out.println("\n\n Path input : " + path);
try {
Node node = (Node)nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path output: "+ node.getPath());
} catch (PathNotFoundException e) {}
}
public void testGetInvalidPath2() throws Exception {
String path = "/TestTreeNode/A2/B2/C2";
System.out.println("\n\n Path input : " + path);
try {
Node node = (Node)nodeFinder.getItem(REPO_NAME, COLLABORATION_WS, path);
System.out.println("Path output: "+ node.getPath());
} catch (PathNotFoundException e) {}
}
/**
* Test with target Node is remove: Throws PathNotFoundException
*/
public void testGetInvalidPath3() throws Exception {
String path = "/TestTreeNode2/O1";
System.out.println("\n\n Path input : " + path);
try {
Node node = (Node) nodeFinder.getItem(REPO_NAME, SYSTEM_WS, path);
System.out.println("Path output: "+ node.getPath());
} catch (PathNotFoundException e) {}
}
public void testGetInvalidPath4() throws Exception {
String path = "/TestTreeNode2/O1/C2_2";
System.out.println("\n\n Path input : " + path);
try {
Node node = (Node) nodeFinder.getItemSys(REPO_NAME, SYSTEM_WS, path, true);
System.out.println("Path output: " + node.getPath());
} catch (PathNotFoundException e) {}
}
public void testGetInvalidWorkspace() throws Exception {
try {
Node node = (Node) nodeFinder.getItem(REPO_NAME, SYSTEM_WS + "12", "/");
System.out.println("Path output: " + node.getPath());
} catch (RepositoryException e) {}
}
public void testGetInvalidRepository() throws Exception {
try {
Node node = (Node) nodeFinder.getItem(REPO_NAME + "12", SYSTEM_WS, "/");
System.out.println("Path output: " + node.getPath());
} catch (RepositoryException e) {}
}
public void tearDown() throws Exception {
Node root;
try {
System.out.println("\n\n -----------Teadown-----------------");
root = session.getRootNode();
root.getNode("TestTreeNode").remove();
root.save();
root = session.getRootNode();
root.getNode("TestTreeNode2").remove();
root.save();
} catch (PathNotFoundException e) {
}
super.tearDown();
}
}