/*
* 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.folksonomy;
import java.util.ArrayList;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.exoplatform.services.cms.folksonomy.NewFolksonomyService;
import org.exoplatform.services.cms.link.LinkManager;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.jcr.ext.distribution.DataDistributionType;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
import org.exoplatform.services.wcm.BaseWCMTestCase;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
/**
* Created by The eXo Platform SARL
* Author : Nguyen Anh Vu
* anhvurz90@gmail.com
* Nov 19, 2009
* 9:54:25 AM
*/
public class TestNewFolksonomyService extends BaseWCMTestCase {
private static final String TEST = "test";
private static final String TEST2 = "test2";
private static final String EXO_TOTAL = "exo:total";
private static final String[] groups = {"/platform/users", "/platform/guests"};
private NewFolksonomyService newFolksonomyService_;
private LinkManager linkManager;
private NodeHierarchyCreator nodeHierarchyCreator;
private Node test, test2;
private Node folksonomyNode;
private Node groupAFolksonomyNode;
private Node groupBFolksonomyNode;
private Node publicFolksonomyNode;
private Node siteFolksonomyNode;
private DataDistributionType dataDistributionType;
public void setUp() throws Exception {
super.setUp();
newFolksonomyService_ = (NewFolksonomyService) container.getComponentInstanceOfType(NewFolksonomyService.class);
this.nodeHierarchyCreator = WCMCoreUtils.getService(NodeHierarchyCreator.class);
linkManager = (LinkManager) container.getComponentInstanceOfType(LinkManager.class);
applyUserSession("john", "gtn", COLLABORATION_WS);
// String userName = session.getUserID();
String userName = session.getUserID();
Node root = session.getRootNode();
Node applicationData = root.hasNode("Application Data") ?
root.getNode("Application Data") :
root.addNode("Application Data");
Node tagsNode = applicationData.hasNode("Tags") ?
applicationData.getNode("Tags") :
applicationData.addNode("Tags");
Node rootNode = root.hasNode("Users") ? root.getNode("Users") : root.addNode("Users");
// Node userNode = rootNode.hasNode(userName) ? rootNode.getNode(userName) :
// rootNode.addNode(userName);
Node userNode = nodeHierarchyCreator.getUserNode(sessionProvider, "john");
Node groupsNode = root.hasNode("Groups") ? root.getNode("Groups") :
root.addNode("Groups");
Node platformNode = groupsNode.hasNode("platform") ? groupsNode.getNode("platform") :
groupsNode.addNode("platform");
Node privateNode = userNode.hasNode("Private") ? userNode.getNode("Private") :
userNode.addNode("Private");
// NodeHierarchyCreator nodehierarchyCreator = (NodeHierarchyCreator) container
// .getComponentInstanceOfType(NodeHierarchyCreator.class);
String folksonomyPath = "Folksonomy";
folksonomyNode = privateNode.hasNode(folksonomyPath) ? privateNode.getNode(folksonomyPath) :
privateNode.addNode(folksonomyPath);
rootNode = privateNode;
test = rootNode.addNode(TEST);
test2 = rootNode.addNode(TEST2);
int count = 0;
String[] groups = {"/users", "/guests"};
for (String gg : groups) {
String g = gg.substring(1);
Node groupNode = platformNode.hasNode(g) ? platformNode.getNode(g) :
platformNode.addNode(g);
Node appData = groupNode.hasNode("ApplicationData") ? groupNode.getNode("ApplicationData") :
groupNode.addNode("ApplicationData");
Node tag = appData.hasNode("Tags") ? appData.getNode("Tags") : appData.addNode("Tags");
if (count ++ == 0) groupAFolksonomyNode = tag;
else groupBFolksonomyNode = tag;
}
publicFolksonomyNode = tagsNode;
session.save();
dataDistributionType = newFolksonomyService_.getDataDistributionType();
String site = "portal1";
Node siteTags = root.hasNode("SiteTags") ?
root.getNode("SiteTags") :
root.addNode("SiteTags");
siteFolksonomyNode = siteTags.addNode(site);
session.save();
}
/**
* Test Method: addPrivateTag()
* Input: Node 'test'
* Test action: add 2 tags 'sport' and 'weather' for node 'test'
* Expected Result:
* in folksonomy node of current user, 2 folder 'sport' and 'weather' appear;
* in folder 'sport' there must be a symlink to node 'test'
* in folder 'weather' there must be a symlink to node 'test' *
* property 'exo:total' of 'sport' node must be 1
* property 'exo:total' of 'weather' node must be 1 *
*/
public void testAddPrivateTag() throws Exception {
String[] tags = { "sport", "weather" };
newFolksonomyService_.addPrivateTag(tags, test, COLLABORATION_WS, session.getUserID());
//-------get sportTagNode and weatherTagNode----------------
Node sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(folksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
Node weatherTagNode = null;
try {
weatherTagNode = dataDistributionType.getDataNode(folksonomyNode, "weather");
} catch (PathNotFoundException e) {
weatherTagNode = null;
}
//----------------------------------------------------------
assertNotNull("testAddPrivateTag failed! ", sportTagNode);
assertNotNull("testAddPrivateTag failed! ", weatherTagNode);
Node link = sportTagNode.getNodes().nextNode();
Node targetNode = linkManager.getTarget(link);
assertTrue("testAddPrivateTag failed! ", test.isSame(targetNode));
link = weatherTagNode.getNodes().nextNode();
targetNode = linkManager.getTarget(link);
assertTrue("testAddPrivateTag failed! ", test.isSame(targetNode));
assertEquals("testAddPrivateTag failed! ", 1L, sportTagNode.getProperty(EXO_TOTAL).getLong());
assertEquals("testAddPrivateTag failed! ", 1L, weatherTagNode.getProperty(EXO_TOTAL).getLong());
}
/**
* Test Method: addGroupsTag()
* Input: Node 'test'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in group 'a' and 'b'
* Expected Result:
* in folksonomy node of group 'a' user, 2 folder 'sport' and 'weather' appear;
* in folksonomy node of group 'b' user, 2 folder 'sport' and 'weather' appear;
* in folder 'sport' there must be a symlink to node 'test'
* in folder 'weather' there must be a symlink to node 'test' *
* property 'exo:total' of 'sport' node must be 1
* property 'exo:total' of 'weather' node must be 1 *
*/
public void testAddGroupsTag() throws Exception {
String[] tags = { "sport", "weather" };
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
//--------------------------TEST FOR GROUP A----------------------------------
//-------get sportTagNode and weatherTagNode----------------
Node sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(groupAFolksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
Node weatherTagNode = null;
try {
weatherTagNode = dataDistributionType.getDataNode(groupAFolksonomyNode, "weather");
} catch (PathNotFoundException e) {
weatherTagNode = null;
}
//----------------------------------------------------------
assertNotNull("testAddGroupsTag failed! ", sportTagNode);
assertNotNull("testAddGroupsTag failed! ", weatherTagNode);
Node link = sportTagNode.getNodes().nextNode();
Node targetNode = linkManager.getTarget(link);
assertTrue("testAddGroupsTag failed! ", test.isSame(targetNode));
link = weatherTagNode.getNodes().nextNode();
targetNode = linkManager.getTarget(link);
assertTrue("testAddGroupsTag failed! ", test.isSame(targetNode));
assertEquals("testAddGroupsTag failed! ", 1L, sportTagNode.getProperty(EXO_TOTAL).getLong());
assertEquals("testAddGroupsTag failed! ", 1L, weatherTagNode.getProperty(EXO_TOTAL).getLong());
//--------------------------TEST FOR GROUP B----------------------------------
//-------get sportTagNode and weatherTagNode----------------
try {
sportTagNode = dataDistributionType.getDataNode(groupBFolksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
try {
weatherTagNode = dataDistributionType.getDataNode(groupBFolksonomyNode, "weather");
} catch (PathNotFoundException e) {
weatherTagNode = null;
}
//----------------------------------------------------------
assertNotNull("testAddGroupsTag failed! ", sportTagNode);
assertNotNull("testAddGroupsTag failed! ", weatherTagNode);
link = sportTagNode.getNodes().nextNode();
targetNode = linkManager.getTarget(link);
assertTrue("testAddGroupsTag failed! ", test.isSame(targetNode));
link = weatherTagNode.getNodes().nextNode();
targetNode = linkManager.getTarget(link);
assertTrue("testAddGroupsTag failed! ", test.isSame(targetNode));
assertEquals("testAddGroupsTag failed! ", 1L, sportTagNode.getProperty(EXO_TOTAL).getLong());
assertEquals("testAddGroupsTag failed! ", 1L, weatherTagNode.getProperty(EXO_TOTAL).getLong());
}
/**
* Test Method: addPublicTag()
* Input: Node 'test'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in public
* Expected Result:
* in public folksonomy node of group 'a' user, 2 folder 'sport' and 'weather' appear;
* in folder 'sport' there must be a symlink to node 'test'
* in folder 'weather' there must be a symlink to node 'test' *
* property 'exo:total' of 'sport' node must be 1
* property 'exo:total' of 'weather' node must be 1 *
*/
public void testAddPublicTag() throws Exception {
String[] tags = { "sport", "weather" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
//---------------get sportTagNode and weatherTagNode---------------------------
Node sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(publicFolksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
Node weatherTagNode = null;
try {
weatherTagNode = dataDistributionType.getDataNode(publicFolksonomyNode, "weather");
} catch (PathNotFoundException e) {
weatherTagNode = null;
}
//-------------------------------------------------------------------------------
assertNotNull("testAddPublicTag failed! ", sportTagNode);
assertNotNull("testAddPublicTag failed! ", weatherTagNode);
Node link = sportTagNode.getNodes().nextNode();
Node targetNode = linkManager.getTarget(link);
assertTrue("testAddPublicTag failed! ", test.isSame(targetNode));
link = weatherTagNode.getNodes().nextNode();
targetNode = linkManager.getTarget(link);
assertTrue("testAddPublicTag failed! ", test.isSame(targetNode));
assertEquals("testAddPublicTag failed! ", 1L, sportTagNode.getProperty(EXO_TOTAL).getLong());
assertEquals("testAddPublicTag failed! ", 1L, weatherTagNode.getProperty(EXO_TOTAL).getLong());
}
/**
* Test Method: addSiteTag()
* Input: Node 'test'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in site 'portal1'
* Expected Result:
* in folksonomy node of site 'portal1' user, 2 folder 'sport' and 'weather' appear;
* in folder 'sport' there must be a symlink to node 'test'
* in folder 'weather' there must be a symlink to node 'test' *
* property 'exo:total' of 'sport' node must be 1
* property 'exo:total' of 'weather' node must be 1 *
*/
public void testAddSiteTag() throws Exception {
String[] tags = { "sport", "weather" };
String site = "portal1";
Node root = session.getRootNode();
Node siteTags = root.hasNode("SiteTags") ?
root.getNode("SiteTags") :
root.addNode("SiteTags");
Node test = nodeHierarchyCreator.getUserNode(sessionProvider, "john").getNode("Private").addNode("a");
session.save();
siteFolksonomyNode = siteTags.addNode(site);
session.save();
newFolksonomyService_.addSiteTag(site,
tags,
test,
COLLABORATION_WS);
siteFolksonomyNode = siteTags.getNode(site);
//----------------------get sportTagNode and weatherTagNode------------------
Node sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(siteFolksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
Node weatherTagNode = null;
try {
weatherTagNode = dataDistributionType.getDataNode(siteFolksonomyNode, "weather");
} catch (PathNotFoundException e) {
weatherTagNode = null;
}
//---------------------------------------------------------------------------
assertNotNull("testAddSiteTag failed! ", sportTagNode);
assertNotNull("testAddSiteTag failed! ", weatherTagNode);
Node link = sportTagNode.getNode("a");
Node targetNode = linkManager.getTarget(link);
assertTrue("testAddSiteTag failed! ", test.isSame(targetNode));
link = weatherTagNode.getNode("a");
targetNode = linkManager.getTarget(link);
assertTrue("testAddSiteTag failed! ", test.isSame(targetNode));
assertEquals("testAddSiteTag failed! ", 1L, sportTagNode.getProperty(EXO_TOTAL).getLong());
assertEquals("testAddSiteTag failed! ", 1L, weatherTagNode.getProperty(EXO_TOTAL).getLong());
}
/**
* Test Method: getAllDocumentsByTag()
* Input: Nodes 'test', 'test2'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' and 'test2' of current user
* get all documents by tag 'sport'
* Expected Result:
* 'test' and 'test2'
*/
public void testGetAllDocumentsByTag() throws Exception {
String[] tags = { "sport", "weather" };
String user = session.getUserID();
newFolksonomyService_.addPrivateTag(tags,
test,
COLLABORATION_WS,
user);
newFolksonomyService_.addPrivateTag(tags,
test2,
COLLABORATION_WS,
user);
//----------------------get sportTagNode and weatherTagNode------------------
Node sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(folksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
Node weatherTagNode = null;
try {
weatherTagNode = dataDistributionType.getDataNode(folksonomyNode, "weather");
} catch (PathNotFoundException e) {
weatherTagNode = null;
}
//---------------------------------------------------------------------------
assertNotNull("testGetAllDocumentsByTag failed! ", sportTagNode);
assertNotNull("testGetAllDocumentsByTag failed! ", weatherTagNode);
int count = 0;
SessionProvider sessionProvider = WCMCoreUtils.getSystemSessionProvider();
List<Node> docs = newFolksonomyService_.getAllDocumentsByTag(sportTagNode.getPath(), COLLABORATION_WS, sessionProvider);
for(Node node : docs) {
if (test.isSame(node)) count ++;
else if (test2.isSame(node)) count ++;
}
assertEquals("testGetAllDocumentsByTag failed! ", 2, count);
assertEquals("testGetAllDocumentsByTag failed! ", 2L, sportTagNode.getProperty(EXO_TOTAL).getLong());
}
/**
* Test Method: getAllGroupTagsOfManyRoles()
* Input: Node 'test', 'test2'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in group 'a' and 'b'
* add 2 tags 'sport' and 'music' for node 'test2' in group 'a' and 'b'
* get all tags of groups 'a' and 'b'
* Expected Result:
* 'sport', 'weather', 'music' of a
* 'sport', 'weather', 'music' of b
* total 6
*/
public void testGetAllGroupTagsOfManyRoles() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "sport", "music" };
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
newFolksonomyService_.addGroupsTag(tags2, test2, COLLABORATION_WS, groups);
List<Node> groupTags = newFolksonomyService_.getAllGroupTags(groups, COLLABORATION_WS);
int count = 0;
for (Node tag : groupTags) {
if ("sport".equals(tag.getName())) count ++;
if ("weather".equals(tag.getName())) count ++;
if ("music".equals(tag.getName())) count ++;
}
assertEquals("testGetAllGroupTagsOfManyRoles failed! ", 6, count);
}
/**
* Test Method: getAllGroupTags()
* Input: Node 'test', 'test2'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in group 'a' and 'b'
* add 2 tags 'sport' and 'music' for node 'test2' in group 'a' and 'b'
* get all tags of groups 'a'
* Expected Result:
* 'sport', 'weather', 'music'
*/
public void testGetAllGroupTags() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "sport", "music" };
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
newFolksonomyService_.addGroupsTag(tags2, test2, COLLABORATION_WS, groups);
List<Node> groupTags = newFolksonomyService_.getAllGroupTags("/platform/users", COLLABORATION_WS);
int count = 0;
for (Node tag : groupTags) {
if ("sport".equals(tag.getName())) count ++;
if ("weather".equals(tag.getName())) count ++;
if ("music".equals(tag.getName())) count ++;
}
assertEquals("testGetAllGroupTags failed! ", 3, count);
}
/**
* Test Method: testGetAllPrivateTags()
* Input: Node 'test', 'test2'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' of current user
* add 2 tags 'sport' and 'xyz' for node 'test2' of current user
* get all private tags of current user
* Expected Result:
* 'sport', 'weather', 'xyz'
*/
public void testGetAllPrivateTags() throws Exception {
String[] tags = { "sport", "weather" };
newFolksonomyService_.addPrivateTag(tags, test, COLLABORATION_WS, session.getUserID());
String[] tags2 = {"sport", "xyz"};
newFolksonomyService_.addPrivateTag(tags2, test2, COLLABORATION_WS, session.getUserID());
List<Node> tagList = newFolksonomyService_.getAllPrivateTags(session.getUserID());
int count = 0;
for (Node node : tagList) {
if ("sport".equals(node.getName())) count ++;
if ("xyz".equals(node.getName())) count ++;
if ("weather".equals(node.getName())) count ++;
}
assertEquals("testGetAllPrivateTags failed! ", 3, count);
}
/**
* Test Method : getAllPublicTags()
* Input: Node 'test', 'test2'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in public
* add 3 tags 'sport', 'boy', 'girl' for node 'test2' in public
* get all public tags
* Expected Result:
* sport, weather, boy, girl
*/
public void testGetAllPublicTags() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags2,
test2,
COLLABORATION_WS);
List<Node> tagList = newFolksonomyService_.getAllPublicTags(publicFolksonomyTreePath, COLLABORATION_WS);
int count = 0;
for (Node tag : tagList) {
if ("sport".equals(tag.getName())) count ++;
if ("weather".equals(tag.getName())) count ++;
if ("boy".equals(tag.getName())) count ++;
if ("girl".equals(tag.getName())) count ++;
}
assertEquals("testGetAllPublicTags failed!", 4, count);
}
/**
* Test Method : getAllSiteTags()
* Input: Node 'test', 'test2'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in site 'portal1'
* add 3 tags 'sport', 'boy', 'girl' for node 'test2' in site 'portal1'
* get all tags of site 'portal1'
* Expected Result:
* sport, weather, boy, girl
*/
public void testGetAllSiteTags() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String site = "portal1";
Node root = session.getRootNode();
Node siteTags = root.hasNode("SiteTags") ?
root.getNode("SiteTags") :
root.addNode("SiteTags");
siteFolksonomyNode = siteTags.addNode(site);
session.save();
newFolksonomyService_.addSiteTag(site,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addSiteTag(site,
tags2,
test2,
COLLABORATION_WS);
List<Node> tagList = newFolksonomyService_.getAllSiteTags(site, COLLABORATION_WS);
int count = 0;
for (Node tag : tagList) {
if ("sport".equals(tag.getName())) count ++;
if ("weather".equals(tag.getName())) count ++;
if ("boy".equals(tag.getName())) count ++;
if ("girl".equals(tag.getName())) count ++;
}
assertEquals("testGetAllSiteTags failed!", 4, count);
}
/**
* Test Method : modifyTagName()
* Input: Node 'test',
* Test action: add 2 tags 'sport' and 'weather' for node 'test' in public
* rename tag 'sport' to 'football'
* get all public tags
* Expected Result:
* get all public tags -> football, weather
* node 'football' must have a symlink child which points to 'test' node
*/
public void testModifyTagName() throws Exception {
String[] tags = { "sport", "weather" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
Node sportNode = dataDistributionType.getDataNode(publicFolksonomyNode, "sport");
Node football = newFolksonomyService_.modifyPublicTagName(sportNode.getPath() , "football",
COLLABORATION_WS, publicFolksonomyTreePath);
//----------------------get footballTagNode, newSportTagNode--------------------------
Node footballTagNode = null;
try {
footballTagNode = dataDistributionType.getDataNode(publicFolksonomyNode, "football");
} catch (PathNotFoundException e) {
footballTagNode = null;
}
Node newSportTagNode = null;
try {
newSportTagNode = dataDistributionType.getDataNode(publicFolksonomyNode, "sport");
} catch (PathNotFoundException e) {
newSportTagNode = null;
}
//------------------------------------------------------------------------------------
assertNotNull("testModifyTagName failed! ", footballTagNode);
assertTrue("testModifyTagName failed! ", footballTagNode.isSame(football));
assertNull("testModifyTagName failed! ", newSportTagNode);
assertTrue("testModifyTagName failed! ", test.isSame(
linkManager.getTarget(football.getNodes().nextNode())));
}
/**
* Test Method : removeTag()
* Input: Node 'test',
* Test action: add 3 tags 'sport', 'nobita' and 'weather' for node 'test' in public
* remove tag 'sport'
* get all public tags
* Expected Result:
* 'nobita', 'weather'
*/
public void testRemoveTag() throws Exception {
String[] tags = { "sport", "weather", "nobita"};
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
//-------------------------get sportTagNode-------------------------------
Node sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(publicFolksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
//------------------------------------------------------------------------
newFolksonomyService_.removeTag(sportTagNode.getPath(), COLLABORATION_WS);
//-------------------------get sportTagNode-------------------------------
sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(publicFolksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
//------------------------------------------------------------------------
assertNull("testRemoveTag failed! ", sportTagNode);
List<Node> tagList = newFolksonomyService_.getAllPublicTags(publicFolksonomyTreePath, COLLABORATION_WS);
int count = 0;
for (Node tag : tagList) {
if ("nobita".equals(tag.getName())) count ++;
if ("weather".equals(tag.getName())) count ++;
}
assertEquals("testRemoveTag failed! ", 2, count);
}
/**
* Test Method: removeTagOfDocument()
* Input: Node 'test'
* Test action: add 2 tags 'sport' and 'weather' for node 'test' of current user
* remove tag 'sport' of current user
* get all symlinks of tags 'sport'
* Expected Result:
* none
*/
public void testRemoveTagOfDocument() throws Exception {
String[] tags = { "sport", "weather" };
newFolksonomyService_.addPrivateTag(tags, test, COLLABORATION_WS, session.getUserID());
//--------------get sportTagNode----------------
Node sportTagNode = null;
try {
sportTagNode = dataDistributionType.getDataNode(folksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
//----------------------------------------------
newFolksonomyService_.removeTagOfDocument(sportTagNode.getPath(), test, COLLABORATION_WS);
//--------------get sportTagNode----------------
try {
sportTagNode = dataDistributionType.getDataNode(folksonomyNode, "sport");
} catch (PathNotFoundException e) {
sportTagNode = null;
}
//----------------------------------------------
assertNull("test removeTagOfDocument failed!", sportTagNode);
}
/**
* Clean data test
*/
public void testGetAllTagNamesWithPublicScope() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags2,
test2,
COLLABORATION_WS);
List<String> tagListPublic = newFolksonomyService_.getAllTagNames(COLLABORATION_WS, NewFolksonomyService.PUBLIC, publicFolksonomyTreePath);
assertTrue(tagListPublic.contains("sport"));
assertTrue(tagListPublic.contains("weather"));
assertTrue(tagListPublic.contains("boy"));
assertTrue(tagListPublic.contains("girl"));
assertEquals("getAllTagNames failed!", 4, tagListPublic.size());
}
public void testGetAllTagNamesWithPrivateScope() throws Exception {
String[] tags = { "sport", "weather" };
newFolksonomyService_.addPrivateTag(tags, test, COLLABORATION_WS, session.getUserID());
String[] tags2 = {"sport", "xyz"};
newFolksonomyService_.addPrivateTag(tags2, test2, COLLABORATION_WS, session.getUserID());
List<String> tagList = newFolksonomyService_.getAllTagNames(COLLABORATION_WS, NewFolksonomyService.PRIVATE, session.getUserID());
assertTrue(tagList.contains("sport"));
assertTrue(tagList.contains("weather"));
assertTrue(tagList.contains("xyz"));
assertEquals("getAllTagNames failed! ", 3, tagList.size());
}
public void testGetAllTagNamesWithGroupScope() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "sport", "music" };
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
newFolksonomyService_.addGroupsTag(tags2, test2, COLLABORATION_WS, groups);
List<String> groupTags = newFolksonomyService_.getAllTagNames(COLLABORATION_WS, NewFolksonomyService.GROUP, "/platform/users;/platform/guests");
assertTrue(groupTags.contains("sport"));
assertTrue(groupTags.contains("weather"));
assertTrue(groupTags.contains("music"));
assertEquals("getAllTagNames failed! ", 6, groupTags.size());
}
public void testGetAllTagNamesWithGroupScope2() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "sport", "music" };
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
newFolksonomyService_.addGroupsTag(tags2, test2, COLLABORATION_WS, groups);
List<String> groupTags = newFolksonomyService_.getAllTagNames(COLLABORATION_WS, NewFolksonomyService.GROUP, "/platform/users");
assertTrue(groupTags.contains("sport"));
assertTrue(groupTags.contains("weather"));
assertTrue(groupTags.contains("music"));
assertEquals("getAllTagNames failed! ", 3, groupTags.size());
}
public void testGetAllTagNamesWithSiteScope() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String site = "portal1";
newFolksonomyService_.addSiteTag(site,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addSiteTag(site,
tags2,
test2,
COLLABORATION_WS);
List<String> tagList = newFolksonomyService_.getAllTagNames(COLLABORATION_WS, NewFolksonomyService.SITE, site);
assertTrue(tagList.contains("sport"));
assertTrue(tagList.contains("weather"));
assertTrue(tagList.contains("boy"));
assertTrue(tagList.contains("girl"));
assertEquals("getAllTagNames failed!", 4, tagList.size());
}
public void testGetAllTagNamesWithNoneExistingScope() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String site = "portal1";
newFolksonomyService_.addSiteTag(site,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addSiteTag(site,
tags2,
test2,
COLLABORATION_WS);
List<String> tagList = newFolksonomyService_.getAllTagNames(COLLABORATION_WS, 10, site);
assertFalse(tagList.contains("sport"));
assertFalse(tagList.contains("weather"));
assertFalse(tagList.contains("boy"));
assertFalse(tagList.contains("girl"));
assertEquals("getAllTagNames failed!", 0, tagList.size());
}
public void testCanEditTag1() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags2,
test2,
COLLABORATION_WS);
List<String> memberships = new ArrayList<String>();
memberships.add("/platform/users");
memberships.add("/platform/guests");
newFolksonomyService_.initTagPermissionListCache();
assertFalse(newFolksonomyService_.canEditTag(0, memberships));
memberships.clear();
memberships.add("*:/platform/administrators");
newFolksonomyService_.initTagPermissionListCache();
assertTrue(newFolksonomyService_.canEditTag(0, memberships));
memberships.clear();
memberships.add("manager:/platform/administrators");
newFolksonomyService_.initTagPermissionListCache();
assertTrue(newFolksonomyService_.canEditTag(0, memberships));
memberships.clear();
memberships.add("/platform/administrators");
assertTrue(newFolksonomyService_.canEditTag(1, memberships));
}
public void testCanEditTag2() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags2,
test2,
COLLABORATION_WS);
List<String> memberships = new ArrayList<String>();
memberships.add("/platform/administrators");
String tagPermission = "*:/platform/administrators";
newFolksonomyService_.initTagPermissionListCache();
// 1 item from getTagPermissionList
assertTrue("Wrong initial number of item in tag permission list", newFolksonomyService_.getTagPermissionList().size() == 1);
newFolksonomyService_.removeTagPermission(tagPermission);
assertTrue("Wrong number of item in tag permission list after removing " + tagPermission, newFolksonomyService_.getTagPermissionList() == null || newFolksonomyService_.getTagPermissionList().size() == 0);
assertFalse(newFolksonomyService_.canEditTag(0, memberships));
newFolksonomyService_.addTagPermission(tagPermission);
assertTrue("Wrong tag permission list after restoring the configuration", tagPermission.equals(newFolksonomyService_.getTagPermissionList().get(0)));
}
public void testGetLinkedTagsOfDocumentByScopeWithPrivateScope() throws Exception {
String[] tags = { "sport", "weather" };
newFolksonomyService_.addPrivateTag(tags, test, COLLABORATION_WS, session.getUserID());
String[] tags2 = {"sport", "xyz"};
newFolksonomyService_.addPrivateTag(tags2, test2, COLLABORATION_WS, session.getUserID());
List<Node> linkedTags = newFolksonomyService_
.getLinkedTagsOfDocumentByScope(NewFolksonomyService.PRIVATE, session.getUserID(), test, COLLABORATION_WS);
List<String> tagNames = getNodeNames(linkedTags);
assertTrue(tagNames.contains("sport"));
assertTrue(tagNames.contains("weather"));
assertFalse(tagNames.contains("xyz"));
assertEquals("getLinkedTagsOfDocumentByScope failed! ", 2, linkedTags.size());
}
public void testGetLinkedTagsOfDocumentByScopeWithPublicScope() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags,
test,
COLLABORATION_WS);
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath,
tags2,
test2,
COLLABORATION_WS);
List<Node> linkedTags = newFolksonomyService_
.getLinkedTagsOfDocumentByScope(NewFolksonomyService.PUBLIC, null, test, COLLABORATION_WS);
List<String> tagNames = getNodeNames(linkedTags);
assertTrue(tagNames.contains("sport"));
assertTrue(tagNames.contains("weather"));
assertFalse(tagNames.contains("boy"));
assertFalse(tagNames.contains("girl"));
assertEquals("getLinkedTagsOfDocumentByScope failed! ", 2, linkedTags.size());
}
public void testGetLinkedTagsOfDocumentByScopeWithGroupScope() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "sport", "music" };
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
newFolksonomyService_.addGroupsTag(tags2, test2, COLLABORATION_WS, groups);
List<Node> linkedTags = newFolksonomyService_
.getLinkedTagsOfDocumentByScope(NewFolksonomyService.GROUP, "/platform/users", test, COLLABORATION_WS);
List<String> tagNames = getNodeNames(linkedTags);
assertTrue(tagNames.contains("sport"));
assertTrue(tagNames.contains("weather"));
assertFalse(tagNames.contains("music"));
assertEquals("getLinkedTagsOfDocumentByScope failed! ", 2, tagNames.size());
}
public void testGetLinkedTagsOfDocument() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath, tags, test, COLLABORATION_WS);
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath, tags2, test2, COLLABORATION_WS);
newFolksonomyService_.addPrivateTag(tags, test, COLLABORATION_WS, session.getUserID());
newFolksonomyService_.addPrivateTag(tags2, test2, COLLABORATION_WS, session.getUserID());
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
newFolksonomyService_.addGroupsTag(tags2, test2, COLLABORATION_WS, groups);
List<Node> linkedTags = newFolksonomyService_.getLinkedTagsOfDocument(test, COLLABORATION_WS);
List<String> tagNames = getNodeNames(linkedTags);
assertTrue(tagNames.contains("sport"));
assertTrue(tagNames.contains("weather"));
assertFalse(tagNames.contains("boy"));
assertFalse(tagNames.contains("girl"));
assertFalse(tagNames.contains("music"));
assertEquals("getLinkedTagsOfDocument failed! ", 8, tagNames.size());
}
public void testRemoveTagsOfNodeRecursively() throws Exception {
String[] tags = { "sport", "weather" };
String[] tags2 = { "boy", "girl", "sport" };
String publicFolksonomyTreePath = "/Application Data/Tags";
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath, tags, test, COLLABORATION_WS);
newFolksonomyService_.addPublicTag(publicFolksonomyTreePath, tags2, test2, COLLABORATION_WS);
newFolksonomyService_.addPrivateTag(tags, test, COLLABORATION_WS, session.getUserID());
newFolksonomyService_.addPrivateTag(tags2, test2, COLLABORATION_WS, session.getUserID());
newFolksonomyService_.addGroupsTag(tags, test, COLLABORATION_WS, groups);
newFolksonomyService_.addGroupsTag(tags2, test2, COLLABORATION_WS, groups);
newFolksonomyService_.removeTagsOfNodeRecursively(test, COLLABORATION_WS, session.getUserID(), "/platform/users;/platform/guests");
List<Node> linkedTags = newFolksonomyService_.getLinkedTagsOfDocument(test, COLLABORATION_WS);
List<String> tagNames = getNodeNames(linkedTags);
assertEquals("removeTagsOfNodeRecursively failed! ", 0, tagNames.size());
}
public void testManipulateTagStyle() throws Exception {
String normal = "normal";
String normalTagRange = "0..2";
String normalHtmlStyle = "font-size: 12px; font-weight: bold; color: #6b6b6b; font-family: verdana; text-decoration:none;";
String interesting = "interesting";
String interestingTagRange = "2..5";
String interestingHtmlStyle = "font-size: 13px; font-weight: bold; color: #5a66ce; font-family: verdana; text-decoration:none;";
String tagStylePath = "/jcr:system/exo:ecm/exo:folksonomies/exo:tagStyle";
// Test addTagStyle
newFolksonomyService_.addTagStyle(normal, normalTagRange, normalHtmlStyle, DMSSYSTEM_WS);
assertEquals(normalHtmlStyle, newFolksonomyService_.getTagStyle(tagStylePath + "/" + normal, DMSSYSTEM_WS));
// Test updateTagStyle
newFolksonomyService_.updateTagStyle(normal, interestingTagRange, interestingHtmlStyle, DMSSYSTEM_WS);
assertEquals(interestingHtmlStyle, newFolksonomyService_.getTagStyle(tagStylePath + "/" + normal, DMSSYSTEM_WS));
// Test addTagStyle
newFolksonomyService_.addTagStyle(interesting, interestingTagRange, interestingHtmlStyle, DMSSYSTEM_WS);
List<String> tagStyleNames = getNodeNames(newFolksonomyService_.getAllTagStyle(DMSSYSTEM_WS));
assertTrue(tagStyleNames.contains(normal));
assertTrue(tagStyleNames.contains(interesting));
assertFalse(tagStyleNames.contains("boy"));
assertEquals("testManipulateTagStyle failed! ", 2, tagStyleNames.size());
}
private List<String> getNodeNames(List<Node> nodes) throws RepositoryException {
List<String> nodeNames = new ArrayList<String>();
for (Node node : nodes) {
nodeNames.add(node.getName());
}
return nodeNames;
}
public void tearDown() throws Exception {
Node userNode = nodeHierarchyCreator.getUserNode(sessionProvider, "john");
String[] nodes = {"/Application Data/Tags",
"/Groups/platform/users/ApplicationData/Tags",
"/Groups/platform/guests/ApplicationData/Tags", "/SiteTags",
"/test","/test2", userNode.getNode("Private/" + TEST).getPath(), userNode.getNode("Private/" + TEST2).getPath(),
userNode.getNode("Private/Folksonomy").getPath(),
session.getUserID()};
for (String node : nodes)
if (session.itemExists(node)) {
//System.out.println("Delete: -----------------------------" + node);
Node n = (Node)session.getItem(node);
n.remove();
session.save();
}
Session dmsSession = sessionProvider.getSession(DMSSYSTEM_WS, repository);
String tagStylesPath = "/jcr:system/exo:ecm/exo:folksonomies/exo:tagStyle";
if (dmsSession.itemExists(tagStylesPath)) {
Node tagStylesNode = (Node)dmsSession.getItem(tagStylesPath);
for (NodeIterator iter = tagStylesNode.getNodes(); iter.hasNext();) {
iter.nextNode().remove();
}
}
dmsSession.save();
dmsSession.logout();
super.tearDown();
}
}