package org.exoplatform.portal.mop.page;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.exoplatform.portal.mop.Described;
import org.exoplatform.portal.mop.ProtectedContainer;
import org.exoplatform.portal.mop.ProtectedResource;
import org.exoplatform.portal.mop.QueryResult;
import org.exoplatform.portal.mop.SiteKey;
import org.exoplatform.portal.mop.SiteType;
import org.exoplatform.portal.pom.data.MappedAttributes;
import org.gatein.mop.api.Attributes;
import org.gatein.mop.api.workspace.ObjectType;
import org.gatein.mop.api.workspace.Page;
/** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */
public class TestPageService extends AbstractTestPageService {
public void testLoad() {
mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "load_page").getRootPage()
.addChild("pages");
sync(true);
//
SiteKey site = SiteKey.portal("load_page");
// Read twice (to load and check and the get from cache and check)
assertNull(service.loadPage(site.page("foo")));
assertNull(service.loadPage(site.page("foo")));
//
Page foo = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "load_page").getRootPage()
.getChild("pages").addChild("foo");
Described fooDescribed = foo.adapt(Described.class);
fooDescribed.setName("foo_name");
fooDescribed.setDescription("foo_description");
ProtectedResource fooResource = foo.adapt(ProtectedResource.class);
fooResource.setAccessPermissions(Collections.singletonList("foo_access_permission"));
fooResource.setEditPermission("foo_edit_permission");
Attributes fooAttrs = foo.getAttributes();
fooAttrs.setValue(MappedAttributes.FACTORY_ID, "foo_factory_id");
fooAttrs.setValue(MappedAttributes.SHOW_MAX_WINDOW, true);
ProtectedContainer pc = foo.adapt(ProtectedContainer.class);
pc.setMoveAppsPermissions(Collections.singletonList("foo-move-apps-permissions"));
pc.setMoveContainersPermissions(Collections.singletonList("foo-move-containers-permissions"));
sync(true);
//
service.clearCache();
PageContext page = service.loadPage(site.page("foo"));
assertNotNull(page);
assertNull(page.state);
assertNotNull(page.data);
PageState state = page.getState();
assertEquals("foo_name", state.getDisplayName());
assertEquals("foo_description", state.getDescription());
assertEquals(Collections.singletonList("foo_access_permission"), state.getAccessPermissions());
assertEquals("foo_edit_permission", state.getEditPermission());
assertEquals("foo_factory_id", state.getFactoryId());
assertEquals(true, state.getShowMaxWindow());
assertEquals(Collections.singletonList("foo-move-apps-permissions"), state.getMoveAppsPermissions());
assertEquals(Collections.singletonList("foo-move-containers-permissions"), state.getMoveContainersPermissions());
}
public void testLoadPages() {
mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "load_pages").getRootPage()
.addChild("pages");
sync(true);
//
SiteKey site = SiteKey.portal("load_pages");
// Read twice (to load and check and the get from cache and check)
assertNotNull(service.loadPages(site));
assertNotNull(service.loadPages(site));
assertEquals(0, service.loadPages(site).size());
//
Page foo = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "load_pages").getRootPage()
.getChild("pages").addChild("foo");
Described fooDescribed = foo.adapt(Described.class);
fooDescribed.setName("foo_name");
fooDescribed.setDescription("foo_description");
ProtectedResource fooResource = foo.adapt(ProtectedResource.class);
fooResource.setAccessPermissions(Collections.singletonList("foo_access_permission"));
fooResource.setEditPermission("foo_edit_permission");
Attributes fooAttrs = foo.getAttributes();
fooAttrs.setValue(MappedAttributes.FACTORY_ID, "foo_factory_id");
fooAttrs.setValue(MappedAttributes.SHOW_MAX_WINDOW, true);
ProtectedContainer pc = foo.adapt(ProtectedContainer.class);
pc.setMoveAppsPermissions(Collections.singletonList("foo-move-apps-permissions"));
pc.setMoveContainersPermissions(Collections.singletonList("foo-move-containers-permissions"));
Page bar = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "load_pages").getRootPage()
.getChild("pages").addChild("bar");
Described barDescribed = bar.adapt(Described.class);
barDescribed.setName("bar_name");
barDescribed.setDescription("bar_description");
ProtectedResource barResource = bar.adapt(ProtectedResource.class);
barResource.setAccessPermissions(Collections.singletonList("bar_access_permission"));
barResource.setEditPermission("bar_edit_permission");
Attributes barAttrs = bar.getAttributes();
barAttrs.setValue(MappedAttributes.FACTORY_ID, "bar_factory_id");
barAttrs.setValue(MappedAttributes.SHOW_MAX_WINDOW, true);
pc = bar.adapt(ProtectedContainer.class);
pc.setMoveAppsPermissions(Collections.singletonList("bar-move-apps-permissions"));
pc.setMoveContainersPermissions(Collections.singletonList("bar-move-containers-permissions"));
sync(true);
//
service.clearCache();
List<PageContext> pages = service.loadPages(site);
assertNotNull(pages);
assertEquals(2, pages.size());
Iterator<PageContext> iterator = pages.iterator();
PageContext page = iterator.next();
assertNotNull(page);
assertNull(page.state);
assertNotNull(page.data);
PageState state = page.getState();
assertEquals("foo_name", state.getDisplayName());
assertEquals("foo_description", state.getDescription());
assertEquals(Collections.singletonList("foo_access_permission"), state.getAccessPermissions());
assertEquals("foo_edit_permission", state.getEditPermission());
assertEquals("foo_factory_id", state.getFactoryId());
assertEquals(true, state.getShowMaxWindow());
assertEquals(Collections.singletonList("foo-move-apps-permissions"), state.getMoveAppsPermissions());
assertEquals(Collections.singletonList("foo-move-containers-permissions"), state.getMoveContainersPermissions());
page = iterator.next();
assertNotNull(page);
assertNull(page.state);
assertNotNull(page.data);
state = page.getState();
assertEquals("bar_name", state.getDisplayName());
assertEquals("bar_description", state.getDescription());
assertEquals(Collections.singletonList("bar_access_permission"), state.getAccessPermissions());
assertEquals("bar_edit_permission", state.getEditPermission());
assertEquals("bar_factory_id", state.getFactoryId());
assertEquals(true, state.getShowMaxWindow());
assertEquals(Collections.singletonList("bar-move-apps-permissions"), state.getMoveAppsPermissions());
assertEquals(Collections.singletonList("bar-move-containers-permissions"), state.getMoveContainersPermissions());
}
public void testCreate() {
mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "create_page").getRootPage()
.addChild("pages");
sync(true);
//
SiteKey site = SiteKey.portal("create_page");
//
PageContext page = new PageContext(site.page("foo"), new PageState("foo_name", "foo_description", true,
"foo_factory_id", Collections.singletonList("foo_access_permission"), "foo_edit_permission",
Collections.singletonList("foo-move-apps-permissions"), Collections.singletonList("foo-move-containers-permissions")));
assertTrue(service.savePage(page));
sync(true);
//
Page foo = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "create_page").getRootPage()
.getChild("pages").getChild("foo");
assertNotNull(foo);
Described fooDescribed = foo.adapt(Described.class);
assertEquals("foo_name", fooDescribed.getName());
assertEquals("foo_description", fooDescribed.getDescription());
ProtectedResource fooResource = foo.adapt(ProtectedResource.class);
assertEquals(Collections.singletonList("foo_access_permission"), fooResource.getAccessPermissions());
assertEquals("foo_edit_permission", fooResource.getEditPermission());
Attributes fooAttrs = foo.getAttributes();
assertEquals("foo_factory_id", fooAttrs.getValue(MappedAttributes.FACTORY_ID));
assertEquals(Boolean.TRUE, fooAttrs.getValue(MappedAttributes.SHOW_MAX_WINDOW));
ProtectedContainer pc = foo.adapt(ProtectedContainer.class);
assertEquals(Collections.singletonList("foo-move-apps-permissions"), pc.getMoveAppsPermissions());
assertEquals(Collections.singletonList("foo-move-containers-permissions"), pc.getMoveContainersPermissions());
}
public void testUpdate() {
Page foo = mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "update_page").getRootPage()
.addChild("pages").addChild("foo");
Described fooDescribed = foo.adapt(Described.class);
fooDescribed.setName("foo_name");
fooDescribed.setDescription("foo_description");
ProtectedResource fooResource = foo.adapt(ProtectedResource.class);
fooResource.setAccessPermissions(Collections.singletonList("foo_access_permission"));
fooResource.setEditPermission("foo_edit_permission");
Attributes fooAttrs = foo.getAttributes();
fooAttrs.setValue(MappedAttributes.FACTORY_ID, "foo_factory_id");
fooAttrs.setValue(MappedAttributes.SHOW_MAX_WINDOW, true);
ProtectedContainer pc = foo.adapt(ProtectedContainer.class);
pc.setMoveAppsPermissions(Collections.singletonList("foo-move-apps-permissions"));
pc.setMoveContainersPermissions(Collections.singletonList("foo-move-containers-permissions"));
sync(true);
//
SiteKey site = SiteKey.portal("update_page");
//
PageContext page = new PageContext(site.page("foo"), new PageState("foo_name_2", "foo_description_2", false,
"foo_factory_id_2", Arrays.asList("foo_access_permission_2", "foo_2_access_permission_2"),
"foo_edit_permission_2", Collections.singletonList("foo-move-apps-permissions-2"),
Collections.singletonList("foo-move-containers-permissions-2")));
assertFalse(service.savePage(page));
sync(true);
//
foo = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "update_page").getRootPage()
.getChild("pages").getChild("foo");
assertNotNull(foo);
fooDescribed = foo.adapt(Described.class);
assertEquals("foo_name_2", fooDescribed.getName());
assertEquals("foo_description_2", fooDescribed.getDescription());
fooResource = foo.adapt(ProtectedResource.class);
assertEquals(Arrays.asList("foo_access_permission_2", "foo_2_access_permission_2"), fooResource.getAccessPermissions());
assertEquals("foo_edit_permission_2", fooResource.getEditPermission());
fooAttrs = foo.getAttributes();
assertEquals("foo_factory_id_2", fooAttrs.getValue(MappedAttributes.FACTORY_ID));
assertEquals(Boolean.FALSE, fooAttrs.getValue(MappedAttributes.SHOW_MAX_WINDOW));
pc = foo.adapt(ProtectedContainer.class);
assertEquals(Collections.singletonList("foo-move-apps-permissions-2"), pc.getMoveAppsPermissions());
assertEquals(Collections.singletonList("foo-move-containers-permissions-2"), pc.getMoveContainersPermissions());
}
public void testDestroy() {
mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "destroy_page").getRootPage()
.addChild("pages");
sync(true);
//
SiteKey site = SiteKey.portal("destroy_page");
//
assertFalse(service.destroyPage(site.page("foo")));
//
Page foo = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "destroy_page").getRootPage()
.getChild("pages").addChild("foo");
Described fooDescribed = foo.adapt(Described.class);
fooDescribed.setName("foo_name");
fooDescribed.setDescription("foo_description");
ProtectedResource fooResource = foo.adapt(ProtectedResource.class);
fooResource.setAccessPermissions(Collections.singletonList("foo_access_permission"));
fooResource.setEditPermission("foo_edit_permission");
Attributes fooAttrs = foo.getAttributes();
fooAttrs.setValue(MappedAttributes.FACTORY_ID, "foo_factory_id");
fooAttrs.setValue(MappedAttributes.SHOW_MAX_WINDOW, true);
ProtectedContainer pc = foo.adapt(ProtectedContainer.class);
pc.setMoveAppsPermissions(Collections.singletonList("foo-move-apps-permissions"));
pc.setMoveContainersPermissions(Collections.singletonList("foo-move-containers-permissions"));
sync(true);
//
assertTrue(service.destroyPage(site.page("foo")));
assertNull(service.loadPage(CLASSIC_FOO));
sync(true);
//
foo = mgr.getPOMService().getModel().getWorkspace().getSite(ObjectType.PORTAL_SITE, "destroy_page").getRootPage()
.getChild("pages").getChild("foo");
assertNull(foo);
}
public void testFind() throws Exception {
Page pages = mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "find_pages").getRootPage()
.addChild("pages");
pages.addChild("foo");
pages.addChild("bar");
sync(true);
//
QueryResult<PageContext> result = service.findPages(0, 10, SiteType.PORTAL, "find_pages", null, null);
assertEquals(2, result.getSize());
}
public void testFindOrder() throws Exception {
Page pages = mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "find_pages_order").getRootPage()
.addChild("pages");
pages.addChild("page01").adapt(Described.class).setName("page01");
pages.addChild("page02").adapt(Described.class).setName("page02");
pages.addChild("page03").adapt(Described.class).setName("page03");
pages.addChild("page04").adapt(Described.class).setName("page04");
pages.addChild("page05").adapt(Described.class).setName("page05");
pages.addChild("page06").adapt(Described.class).setName("page06");
pages.addChild("page07").adapt(Described.class).setName("page07");
pages.addChild("page08").adapt(Described.class).setName("page08");
pages.addChild("page09").adapt(Described.class).setName("page09");
pages.addChild("page10").adapt(Described.class).setName("page10");
pages.addChild("page11").adapt(Described.class).setName("page11");
pages.addChild("page12").adapt(Described.class).setName("page12");
sync(true);
QueryResult<PageContext> result = service.findPages(0, 10, SiteType.PORTAL, "find_pages_order", null, null);
Iterator<PageContext> iterator = result.iterator();
assertEquals("portal::find_pages_order::page01", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page02", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page03", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page04", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page05", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page06", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page07", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page08", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page09", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page10", iterator.next().getKey().format());
result = service.findPages(10, 12, SiteType.PORTAL, "find_pages_order", null, null);
iterator = result.iterator();
assertEquals("portal::find_pages_order::page11", iterator.next().getKey().format());
assertEquals("portal::find_pages_order::page12", iterator.next().getKey().format());
}
public void testClone() throws Exception {
Page foo = mgr.getPOMService().getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "clone_page").getRootPage()
.addChild("pages").addChild("foo");
Described fooDescribed = foo.adapt(Described.class);
fooDescribed.setName("foo_name");
fooDescribed.setDescription("foo_description");
ProtectedResource fooResource = foo.adapt(ProtectedResource.class);
fooResource.setAccessPermissions(Collections.singletonList("foo_access_permission"));
fooResource.setEditPermission("foo_edit_permission");
Attributes fooAttrs = foo.getAttributes();
fooAttrs.setValue(MappedAttributes.FACTORY_ID, "foo_factory_id");
fooAttrs.setValue(MappedAttributes.SHOW_MAX_WINDOW, true);
ProtectedContainer pc = foo.adapt(ProtectedContainer.class);
pc.setMoveAppsPermissions(Collections.singletonList("foo-move-apps-permissions"));
pc.setMoveContainersPermissions(Collections.singletonList("foo-move-containers-permissions"));
sync(true);
//
SiteKey site = SiteKey.portal("clone_page");
//
PageContext bar = service.clone(site.page("foo"), site.page("bar"));
assertNotNull(bar);
assertNull(bar.state);
assertNotNull(bar.data);
PageState state = bar.getState();
assertEquals("foo_name", state.getDisplayName());
assertEquals("foo_description", state.getDescription());
assertEquals(Collections.singletonList("foo_access_permission"), state.getAccessPermissions());
assertEquals("foo_edit_permission", state.getEditPermission());
assertEquals("foo_factory_id", state.getFactoryId());
assertEquals(true, state.getShowMaxWindow());
assertEquals(Collections.singletonList("foo-move-apps-permissions"), state.getMoveAppsPermissions());
assertEquals(Collections.singletonList("foo-move-containers-permissions"), state.getMoveContainersPermissions());
//
// DataStorage dataStorage = (DataStorage)PortalContainer.getInstance().getComponentInstanceOfType(DataStorage.class);
/*
*
*
* // Check instance id format
*
* // Check state Portlet pagePrefs = storage_.load(instanceId, ApplicationType.PORTLET); assertEquals(new
* PortletBuilder().add("template", "par:/groovy/groovy/webui/component/UIBannerPortlet.gtmpl") .build(), pagePrefs);
*
* // Now save the cloned page storage_.save(clone);
*
* // Get cloned page clone = storage_.getPage("portal::test::_test4"); assertEquals(2, clone.getChildren().size());
* banner1 = (Application<Portlet>)clone.getChildren().get(0); instanceId = banner1.getState();
*
* // Check instance id format assertEquals("web/BannerPortlet", storage_.getId(banner1.getState()));
*
* // Update site prefs PortletPreferences sitePrefs = new PortletPreferences();
* sitePrefs.setWindowId("portal#test:/web/BannerPortlet/banner"); sitePrefs.setPreferences(new
* ArrayList<Preference>(Collections.singleton(new Preference())));
* sitePrefs.getPreferences().get(0).setName("template"); sitePrefs.getPreferences().get(0).getValues().add("bar");
* storage_.save(sitePrefs);
*
* // Check that page prefs have not changed pagePrefs = storage_.load(instanceId, ApplicationType.PORTLET);
* assertEquals(new PortletBuilder().add("template", "par:/groovy/groovy/webui/component/UIBannerPortlet.gtmpl")
* .build(), pagePrefs);
*
* // Update page prefs pagePrefs.setValue("template", "foo"); storage_.save(instanceId, pagePrefs);
*
* // Check that page prefs have changed pagePrefs = storage_.load(instanceId, ApplicationType.PORTLET);
* assertEquals(new PortletBuilder().add("template", "foo").build(), pagePrefs);
*
* // Check that site prefs have not changed sitePrefs =
* storage_.getPortletPreferences("portal#test:/web/BannerPortlet/banner"); assertEquals("bar",
* sitePrefs.getPreferences().get(0).getValues().get(0));
*
* // Now check the container Container container = (Container)clone.getChildren().get(1); assertEquals(2,
* container.getChildren().size());
*
* // Application banner2 = (Application)container.getChildren().get(0); // assertEquals(banner2.getInstanceId(),
* banner1.getInstanceId());
*
* // Page srcPage = storage_.getPage("portal::test::test4"); srcPage.setEditPermission("Administrator");
* Application<Portlet>portlet = (Application<Portlet>)srcPage.getChildren().get(0);
* portlet.setDescription("NewPortlet");
*
* ArrayList<ModelObject> modelObject = srcPage.getChildren(); modelObject.set(0, portlet);
*
* srcPage.setChildren(modelObject);
*
* storage_.save(srcPage); Page dstPage = storage_.clonePage(srcPage.getPageId(), srcPage.getOwnerType(),
* srcPage.getOwnerId(), "_PageTest1234"); Application<Portlet>portlet1 =
* (Application<Portlet>)dstPage.getChildren().get(0); // Check src's edit permission and dst's edit permission
* assertEquals(srcPage.getEditPermission(), dstPage.getEditPermission());
*
* // Check src's children and dst's children assertEquals(portlet.getDescription(), portlet1.getDescription());
*/
}
public void testLoadWithoutSite() {
assertNull(service.loadPage(SiteKey.portal("foo").page("homepage")));
}
public void testCreateWithoutSite() {
PageContext page = new PageContext(SiteKey.portal("foo").page("homepage"), new PageState("foo", "Foo", false,
"factory-id", Collections.singletonList("*:/platform/administrators"), "Everyone",
Collections.singletonList("foo_add_application_permission"), Collections.singletonList("foo_add_container_permission")));
try {
service.savePage(page);
fail();
} catch (PageServiceException e) {
assertEquals(PageError.NO_SITE, e.getError());
}
}
public void testDestroyWithoutSite() {
try {
service.destroyPage(SiteKey.portal("foo").page("homepage"));
fail();
} catch (PageServiceException e) {
assertEquals(PageError.NO_SITE, e.getError());
}
}
}