/*
* Copyright (C) 2003-2009 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.forum.common.jcr;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.Node;
import org.exoplatform.container.component.ComponentPlugin;
import org.exoplatform.container.xml.InitParams;
import org.exoplatform.container.xml.ValueParam;
import org.exoplatform.forum.common.jcr.KSDataLocation.Locations;
import org.exoplatform.services.jcr.ext.common.SessionProvider;
import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator;
import junit.framework.TestCase;
/**
* @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice Lamarque</a>
* @version $Revision$
*/
public class TestKSDataLocation extends TestCase {
private String repo = "test-repo";
private String ws = "test-ws";
public void testConstructorWithNullCreator() {
KSDataLocation location = new KSDataLocation(initParams(), null);
assertEquals(repo, location.getRepository());
assertEquals(ws, location.getWorkspace());
assertEquals(repo, location.getSessionManager().getRepositoryName());
assertEquals(ws, location.getSessionManager().getWorkspaceName());
// if not NodeHierarchyCreator is null, no prefix is used for pathes
assertEquals(Locations.KS_USER_AVATAR, location.getAvatarsLocation());
assertEquals(Locations.BANIP_HOME, location.getBanIPLocation());
assertEquals(Locations.BBCODE_HOME, location.getBBCodesLocation());
assertEquals(Locations.FAQ_CATEGORY_HOME, location.getFaqCategoriesLocation());
assertEquals(Locations.FAQ_SERVICE, location.getFaqHomeLocation());
assertEquals(Locations.SETTING_HOME, location.getFaqSettingsLocation());
assertEquals(Locations.TEMPLATE_HOME, location.getFaqTemplatesLocation());
assertEquals(Locations.USER_SETTING_HOME, location.getFaqUserSettingsLocation());
assertEquals(Locations.FORUM_BAN_IP, location.getForumBanIPLocation());
assertEquals(Locations.CATEGORY_HOME, location.getForumCategoriesLocation());
assertEquals(Locations.FORUM_DATA, location.getForumDataLocation());
assertEquals(Locations.FORUM_SERVICE, location.getForumHomeLocation());
assertEquals(Locations.FORUM_STATISTIC, location.getForumStatisticsLocation());
assertEquals(Locations.FORUM_SYSTEM, location.getForumSystemLocation());
assertEquals(Locations.STATISTIC_HOME, location.getStatisticsLocation());
assertEquals(Locations.TAG_HOME, location.getTagsLocation());
assertEquals(Locations.TOPIC_TYPE_HOME, location.getTopicTypesLocation());
assertEquals(Locations.USER_PROFILE_HOME, location.getUserProfilesLocation());
}
public void testGetPath() {
Map<String, String> pathes = new HashMap<String, String>();
pathes.put("blabla", "/some/path");
KSDataLocation location = new KSDataLocation(initParams(), new TestNodeHierarchyCreator(pathes));
// returns pathes relative to root
assertEquals("some/path", location.getPath("blabla"));
}
public void testConstructorWithCreator() {
Map<String, String> pathes = new HashMap<String, String>();
pathes.put(Locations.ADMINISTRATION_HOME, "/forum/settings");
pathes.put(Locations.KS_USER_AVATAR, "/user-data/avatars");
pathes.put(Locations.BANIP_HOME, "/forum/data/bans/global");
pathes.put(Locations.BBCODE_HOME, "/shared/bbcodes");
pathes.put(Locations.FAQ_CATEGORY_HOME, "/faq/categories");
pathes.put(Locations.FAQ_SERVICE, "/faq");
pathes.put(Locations.SETTING_HOME, "/faq/settings");
pathes.put(Locations.TEMPLATE_HOME, "/faq/templates");
pathes.put(Locations.USER_SETTING_HOME, "/user-data/settings/faq");
pathes.put(Locations.FORUM_BAN_IP, "/forum/data/bans/forum");
pathes.put(Locations.CATEGORY_HOME, "/forum/data/categories");
pathes.put(Locations.FORUM_DATA, "/forum/data");
pathes.put(Locations.FORUM_SERVICE, "/forum");
pathes.put(Locations.FORUM_STATISTIC, "/statistics/forum");
pathes.put(Locations.FORUM_SYSTEM, "/forum/system");
pathes.put(Locations.STATISTIC_HOME, "/statistics");
pathes.put(Locations.TAG_HOME, "/shared/tags");
pathes.put(Locations.TOPIC_TYPE_HOME, "/forum/data/topic-types");
pathes.put(Locations.USER_PROFILE_HOME, "/user-data/profiles");
KSDataLocation location = new KSDataLocation(initParams(), new TestNodeHierarchyCreator(pathes));
assertEquals(repo, location.getRepository());
assertEquals(ws, location.getWorkspace());
assertEquals(repo, location.getSessionManager().getRepositoryName());
assertEquals(ws, location.getSessionManager().getWorkspaceName());
// if not NodeHierarchyCreator was passed, use it to resolve pathes
assertEquals("shared/bbcodes", location.getBBCodesLocation());
assertEquals("shared/tags", location.getTagsLocation());
assertEquals("faq", location.getFaqHomeLocation());
assertEquals("faq/settings", location.getFaqSettingsLocation());
assertEquals("faq/templates", location.getFaqTemplatesLocation());
assertEquals("faq/categories", location.getFaqCategoriesLocation());
assertEquals("user-data/settings/faq", location.getFaqUserSettingsLocation());
assertEquals("user-data/profiles", location.getUserProfilesLocation());
assertEquals("user-data/avatars", location.getAvatarsLocation());
assertEquals("forum", location.getForumHomeLocation());
assertEquals("forum/data", location.getForumDataLocation());
assertEquals("forum/data/bans/global", location.getBanIPLocation());
assertEquals("forum/data/bans/forum", location.getForumBanIPLocation());
assertEquals("forum/data/categories", location.getForumCategoriesLocation());
assertEquals("forum/system", location.getForumSystemLocation());
assertEquals("forum/data/topic-types", location.getTopicTypesLocation());
assertEquals("forum/settings", location.getAdministrationLocation());
assertEquals("statistics", location.getStatisticsLocation());
assertEquals("statistics/forum", location.getForumStatisticsLocation());
}
private InitParams initParams() {
InitParams params = new InitParams();
params.addParam(valueParam(KSDataLocation.REPOSITORY_PARAM, repo));
params.addParam(valueParam(KSDataLocation.WORKSPACE_PARAM, ws));
return params;
}
private ValueParam valueParam(String name, String value) {
ValueParam param = new ValueParam();
param.setName(name);
param.setValue(value);
return param;
}
/**
* Fake iplementation of NodeHierarchyCreator that honor {@link #getJcrPath(String)} thank to a map passed in constructor.
* @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice Lamarque</a>
* @version $Revision$
*/
public class TestNodeHierarchyCreator implements NodeHierarchyCreator {
Map<String, String> pathes;
public TestNodeHierarchyCreator(Map<String, String> pathes) {
this.pathes = pathes;
}
public void addPlugin(ComponentPlugin plugin) {
}
public String getJcrPath(String alias) {
return pathes.get(alias);
}
public Node getPublicApplicationNode(SessionProvider sessionProvider) throws Exception {
return null;
}
public Node getUserApplicationNode(SessionProvider sessionProvider, String userName) throws Exception {
return null;
}
public Node getUserNode(SessionProvider sessionProvider, String userName) throws Exception {
return null;
}
public void init(String repository) throws Exception {
}
}
}