/** * 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.gatein.mop.core.api.workspace; import org.gatein.mop.api.Scope; import org.gatein.mop.api.workspace.Templatized; import org.gatein.mop.api.workspace.ui.UIComponent; import org.gatein.mop.core.util.Tools; import org.gatein.mop.api.workspace.ObjectType; import org.gatein.mop.api.workspace.Site; import org.gatein.mop.api.workspace.Page; import org.gatein.mop.api.workspace.Workspace; import org.gatein.mop.api.workspace.Navigation; import org.gatein.mop.api.workspace.ui.UIContainer; import org.gatein.mop.api.workspace.link.PageLink; import org.gatein.mop.core.api.AbstractPOMTestCase; import org.gatein.mop.core.api.ModelImpl; import org.junit.After; import org.junit.Before; import java.util.Collection; import java.util.HashSet; import java.util.Collections; import java.util.List; /** * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> * @version $Revision$ */ public class WorkspaceTestCase extends AbstractPOMTestCase { @Before public void ensureNoSites() { Workspace workspace = pomService.getModel().getWorkspace(); assertEquals(0, workspace.getSites().size()); } @After public void cleanUp() { Workspace workspace = pomService.getModel().getWorkspace(); for (Site s : workspace.getSites()) { s.destroy(); } pomService.getModel().save(); } public void testGetSite() { ModelImpl model = pomService.getModel(); Workspace workspace = model.getWorkspace(); Site site = workspace.addSite(ObjectType.GROUP_SITE, "get-site"); assertNotNull(site); assertEquals("get-site", site.getName()); Site s2 = model.findObjectById(ObjectType.SITE, site.getObjectId()); assertEquals(site, s2); assertEquals(workspace, site.getWorkspace()); } public void testGetPortal() { ModelImpl model = pomService.getModel(); Workspace workspace = model.getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "get-portal"); assertNotNull(portal); Site s2 = model.findObjectById(ObjectType.SITE, portal.getObjectId()); assertEquals(portal, s2); } public void testGetSites() { Workspace workspace = pomService.getModel().getWorkspace(); assertEquals(0, workspace.getSites(ObjectType.GROUP_SITE).size()); Site s1 = workspace.addSite(ObjectType.GROUP_SITE, "get-sites-s1"); assertNotNull(s1); Site s2 = workspace.addSite(ObjectType.GROUP_SITE, "get-sites-s2"); assertNotNull(s2); assertEquals(Tools.set(workspace.getSites(ObjectType.GROUP_SITE)), Tools.set(s1, s2)); } public void testRootPage() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "root-page-portal"); Page root = portal.getRootPage(); assertEquals(portal, root.getSite()); } public void testPageAddChild() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "page-add-child-portal"); Page root = portal.getRootPage(); assertEquals(portal, root.getSite()); Page foo = root.addChild("page-add-child-foo"); assertNotNull(foo); assertEquals(root, foo.getParent()); assertEquals(portal, foo.getSite()); Collection<? extends Page> children = root.getChildren(); assertEquals(Tools.set(foo), new HashSet<Page>(children)); } public void testPortalTemplate() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "portal-template-portal"); Page template = portal.getRootPage().addChild("template"); Navigation rootNav = portal.getRootNavigation(); assertNull(rootNav.getTemplatized()); Templatized templatized = template.templatize(rootNav); assertSame(templatized, rootNav.getTemplatized()); assertNull(templatized.getScope()); templatized.setScope(Scope.INHERITED); assertEquals(Scope.INHERITED, templatized.getScope()); assertEquals(template, templatized.getTemplate()); } public void testLoading() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "loading-portal"); String portalId = portal.getObjectId(); Page root = portal.getRootPage(); String rootId = root.getObjectId(); Page foo = root.addChild("loading-foo"); String fooId = foo.getObjectId(); /* // Test loading Workspace workspace2 = getWorkspace(workspace); // foo = workspace2.getPage(fooId); assertNotNull(foo); root = workspace2.getPage(rootId); assertNotNull(root); portal = workspace2.getSite(portalId); assertEquals(root, foo.getParent()); assertEquals(portal, foo.getSite()); assertEquals(portal, root.getSite()); */ } public void testNavigationHierarchy() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "navigation-hierarchy-portal"); Navigation rootNav = portal.getRootNavigation(); assertNotNull(rootNav); assertNotNull(rootNav.getAttributes()); assertNull(rootNav.getParent()); assertTrue(rootNav.getChildren().isEmpty()); Navigation fooNav = rootNav.addChild("navigation-hierarchy-foo"); assertNotNull(fooNav); assertNotNull(fooNav.getAttributes()); assertSame(rootNav, fooNav.getParent()); assertTrue(fooNav.getChildren().isEmpty()); assertEquals(Collections.singleton(fooNav), new HashSet<Navigation>(rootNav.getChildren())); } public void testLink() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "link-portal"); Navigation rootNav = portal.getRootNavigation(); assertNull(rootNav.getLink()); // PageLink link = rootNav.linkTo(ObjectType.PAGE_LINK); assertNotNull(link); assertSame(link, rootNav.getLink()); Page rootPage = portal.getRootPage(); link.setPage(rootPage); assertEquals(rootPage, link.getPage()); } public void testNavigationClear() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "clear-portal"); Navigation rootNav = portal.getRootNavigation(); rootNav.addChild("clear-a"); rootNav.addChild("clear-b"); assertEquals(2, rootNav.getChildren().size()); rootNav.getChildren().clear(); assertEquals(0, rootNav.getChildren().size()); } public void testNavigationGetSite() { Workspace workspace = pomService.getModel().getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "navigation-get-site-portal"); Navigation rootNav = portal.getRootNavigation(); Navigation a = rootNav.addChild("a"); Site site = a.getSite(); assertSame(portal, site); } public void testRemoveReferencedTemplate() { ModelImpl pom = pomService.getModel(); Workspace workspace = pom.getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "remove-referenced-template-portal"); Page root = portal.getRootPage(); Page template = root.addChild("template"); template.templatize(portal.getRootNavigation()); pom.save(); pom = pomService.getModel(); portal = workspace.getSite(ObjectType.PORTAL_SITE, "remove-referenced-template-portal"); portal.getRootPage().getChild("template").destroy(); pom.save(); // pom = pomService.getModel(); portal = workspace.getSite(ObjectType.PORTAL_SITE, "remove-referenced-template-portal"); portal.destroy(); pom.save(); pom = pomService.getModel(); portal = workspace.addSite(ObjectType.PORTAL_SITE, "remove-referenced-template-portal"); } public void testComponentOrder() { ModelImpl pom = pomService.getModel(); Workspace workspace = pom.getWorkspace(); Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "component-order-portal2"); Page root = portal.getRootPage(); UIContainer container = root.getRootComponent(); container.add(ObjectType.WINDOW, "2"); container.add(0, ObjectType.WINDOW, "0"); List<UIComponent> components = container.getComponents(); assertEquals("0", components.get(0).getName()); assertEquals("2", components.get(1).getName()); assertEquals(2, components.size()); container.add(1, ObjectType.WINDOW, "1"); assertEquals("0", components.get(0).getName()); assertEquals("1", components.get(1).getName()); assertEquals("2", components.get(2).getName()); assertEquals(3, components.size()); components.add(0, components.get(2)); assertEquals("2", components.get(0).getName()); assertEquals("0", components.get(1).getName()); assertEquals("1", components.get(2).getName()); assertEquals(3, components.size()); } }