Author: woonsan Date: Tue Oct 4 16:14:35 2011 New Revision: 1178850 URL: http://svn.apache.org/viewvc?rev=1178850&view=rev Log: JS2-1259: adding (skeletal) dbpm based page layout component test case
Added: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring-dbpm.xml (with props) portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/AbstractTestPageLayout.java (with props) portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/TestPageLayoutWithDBPM.java (with props) Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/TestPageLayout.java Added: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring-dbpm.xml URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring-dbpm.xml?rev=1178850&view=auto ============================================================================== --- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring-dbpm.xml (added) +++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring-dbpm.xml Tue Oct 4 16:14:35 2011 @@ -0,0 +1,190 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> + + <!-- Page Layout Test Spring Configuration--> + + <!-- IDGenerator --> + <bean id="IdGenerator" + class="org.apache.jetspeed.idgenerator.JetspeedIdGenerator" init-method="start" destroy-method="stop" > + <meta key="j2:cat" value="xmlPageManager" /> + <!-- ID Start value --> + <constructor-arg index="0"><value>65536</value></constructor-arg> + <!-- ID Prefix --> + <constructor-arg index="1"><value>P-</value></constructor-arg> + <!-- ID Suffix --> + <constructor-arg index="2"><value></value></constructor-arg> + </bean> + + <!-- PageFileCache --> + <bean id="PageFileCache" + class="org.apache.jetspeed.cache.file.FileCache" + init-method="startFileScanner" + destroy-method="stopFileScanner"> + <meta key="j2:cat" value="xmlPageManager" /> + <!-- Scan rate for changes in cached files on the file system --> + <constructor-arg index="0"><value>10</value></constructor-arg> + <!-- Cache size --> + <constructor-arg index="1"><value>100</value></constructor-arg> + </bean> + + <!-- DocumentHandlerFactory --> + <bean id="PsmlDocumentHandler" + class="org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>/JETSPEED-INF/castor/page-mapping.xml</value></constructor-arg> + <constructor-arg index="2"><value>.psml</value></constructor-arg> + <constructor-arg index="3" ><value>org.apache.jetspeed.om.page.psml.PageImpl</value></constructor-arg> + <constructor-arg index="4" ><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="5" ><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <bean id="TpsmlDocumentHandler" + class="org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>/JETSPEED-INF/castor/page-mapping.xml</value></constructor-arg> + <constructor-arg index="2"><value>.tpsml</value></constructor-arg> + <constructor-arg index="3" ><value>org.apache.jetspeed.om.page.psml.PageTemplateImpl</value></constructor-arg> + <constructor-arg index="4" ><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="5" ><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <bean id="DpsmlDocumentHandler" + class="org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>/JETSPEED-INF/castor/page-mapping.xml</value></constructor-arg> + <constructor-arg index="2"><value>.dpsml</value></constructor-arg> + <constructor-arg index="3" ><value>org.apache.jetspeed.om.page.psml.DynamicPageImpl</value></constructor-arg> + <constructor-arg index="4" ><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="5" ><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <bean id="FpsmlDocumentHandler" + class="org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>/JETSPEED-INF/castor/page-mapping.xml</value></constructor-arg> + <constructor-arg index="2"><value>.fpsml</value></constructor-arg> + <constructor-arg index="3" ><value>org.apache.jetspeed.om.page.psml.FragmentDefinitionImpl</value></constructor-arg> + <constructor-arg index="4" ><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="5" ><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <bean id="LinkDocumentHandler" + class="org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>/JETSPEED-INF/castor/page-mapping.xml</value></constructor-arg> + <constructor-arg index="2"><value>.link</value></constructor-arg> + <constructor-arg index="3" ><value>org.apache.jetspeed.om.page.psml.LinkImpl</value></constructor-arg> + <constructor-arg index="4" ><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="5" ><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <bean id="FolderMetaDataDocumentHandler" + class="org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>/JETSPEED-INF/castor/page-mapping.xml</value></constructor-arg> + <constructor-arg index="2"><value>folder.metadata</value></constructor-arg> + <constructor-arg index="3" ><value>org.apache.jetspeed.om.folder.psml.FolderMetaDataImpl</value></constructor-arg> + <constructor-arg index="4" ><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="5" ><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <bean id="PageSecurityDocumentHandler" + class="org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>/JETSPEED-INF/castor/page-mapping.xml</value></constructor-arg> + <constructor-arg index="2"><value>page.security</value></constructor-arg> + <constructor-arg index="3" ><value>org.apache.jetspeed.om.page.psml.PageSecurityImpl</value></constructor-arg> + <constructor-arg index="4" ><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="5" ><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <bean id="DocumentHandlerFactory" + class="org.apache.jetspeed.page.document.psml.DocumentHandlerFactoryImpl" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg> + <map> + <entry key=".psml"> + <ref bean="PsmlDocumentHandler" /> + </entry> + <entry key=".tpsml"> + <ref bean="TpsmlDocumentHandler" /> + </entry> + <entry key=".dpsml"> + <ref bean="DpsmlDocumentHandler" /> + </entry> + <entry key=".fpsml"> + <ref bean="FpsmlDocumentHandler" /> + </entry> + <entry key=".link"> + <ref bean="LinkDocumentHandler" /> + </entry> + <entry key="folder.metadata"> + <ref bean="FolderMetaDataDocumentHandler" /> + </entry> + <entry key="page.security"> + <ref bean="PageSecurityDocumentHandler" /> + </entry> + </map> + </constructor-arg> + </bean> + + <!-- FolderHandler --> + <bean id="FolderHandler" + class="org.apache.jetspeed.page.document.psml.FileSystemFolderHandler" > + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><value>${applicationRoot}/WEB-INF/pages</value></constructor-arg> + <constructor-arg index="2"><ref bean="DocumentHandlerFactory"/></constructor-arg> + <constructor-arg index="3"><ref bean="PageFileCache"/></constructor-arg> + </bean> + + <!-- PageManager --> + <bean id="org.apache.jetspeed.page.PageManager" + name="pageManager" + class="org.apache.jetspeed.page.psml.CastorXmlPageManager" init-method="init" destroy-method="destroy"> + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="IdGenerator"/></constructor-arg> + <constructor-arg index="1"><ref bean="DocumentHandlerFactory"/></constructor-arg> + <constructor-arg index="2"><ref bean="FolderHandler"/></constructor-arg> + <constructor-arg index="3"><ref bean="PageFileCache"/></constructor-arg> + <!-- permissions security enabled flag, default=false --> + <constructor-arg index="4"><value>false</value></constructor-arg> + <!-- constraints security enabled flag, default=true --> + <constructor-arg index="5"><value>false</value></constructor-arg> + </bean> + + <!-- PageLayoutComponent --> + <bean id="org.apache.jetspeed.layout.PageLayoutComponent" + name="pageLayout" + class="org.apache.jetspeed.layout.impl.PageLayoutComponentImpl"> + <meta key="j2:cat" value="xmlPageManager" /> + <constructor-arg index="0"><ref bean="org.apache.jetspeed.page.PageManager" /></constructor-arg> + <constructor-arg index="1"><value>jetspeed-layouts::VelocityOneColumn</value></constructor-arg> + </bean> + +</beans> Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/JETSPEED-INF/spring/test-spring-dbpm.xml ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/AbstractTestPageLayout.java URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/AbstractTestPageLayout.java?rev=1178850&view=auto ============================================================================== --- portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/AbstractTestPageLayout.java (added) +++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/AbstractTestPageLayout.java Tue Oct 4 16:14:35 2011 @@ -0,0 +1,655 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jetspeed.layout; + +import java.security.PrivilegedAction; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.security.auth.Subject; + +import org.apache.jetspeed.components.test.AbstractSpringTestCase; +import org.apache.jetspeed.om.folder.Folder; +import org.apache.jetspeed.om.page.ContentFragment; +import org.apache.jetspeed.om.page.ContentPage; +import org.apache.jetspeed.om.page.DynamicPage; +import org.apache.jetspeed.om.page.Fragment; +import org.apache.jetspeed.om.page.FragmentDefinition; +import org.apache.jetspeed.om.page.Page; +import org.apache.jetspeed.om.page.PageTemplate; +import org.apache.jetspeed.page.PageManager; +import org.apache.jetspeed.security.JSSubject; +import org.apache.jetspeed.security.JetspeedPrincipal; +import org.apache.jetspeed.security.JetspeedPrincipalType; +import org.apache.jetspeed.security.PrincipalsSet; +import org.apache.jetspeed.security.SecurityAttributeType; +import org.apache.jetspeed.security.SecurityAttributeTypes; +import org.apache.jetspeed.security.User; +import org.apache.jetspeed.security.impl.TransientJetspeedPrincipal; + +/** + * TestPageLayout + * + * @author <a href="mailto:rwat...@apache.org">Randy Watler</a> + * @version $Id$ + */ +public abstract class AbstractTestPageLayout extends AbstractSpringTestCase +{ + /** + * PageManager component + */ + private PageManager pageManager; + + /** + * PageLayout component + */ + private PageLayoutComponent pageLayout; + + /** + * Test user subject + */ + private Subject userSubject; + + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception + { + // setup components, subjects, and cleanup from previous run + super.setUp(); + pageManager = (PageManager) scm.getComponent("pageManager"); + pageLayout = (PageLayoutComponent) scm.getComponent("pageLayout"); + Set principals = new PrincipalsSet(); + principals.add(new TestUser("user")); + userSubject = new Subject(true, principals, new HashSet(), new HashSet()); + cleanupTest(); + } + + /* (non-Javadoc) + * @see junit.framework.TestCase#tearDown() + */ + protected void tearDown() throws Exception + { + // cleanup from test run and teardown + //cleanupTest(); + pageManager = null; + pageLayout = null; + userSubject = null; + super.tearDown(); + } + + /** + * Cleanup test artifacts. + */ + protected void cleanupTest() throws Exception + { + // cleanup test artifacts + if (pageManager.pageExists("/newpage.psml")) + { + pageManager.removePage(pageManager.getPage("/newpage.psml")); + } + if (pageManager.dynamicPageExists("/newcontentpage.dpsml")) + { + pageManager.removeDynamicPage(pageManager.getDynamicPage("/newcontentpage.dpsml")); + } + if (pageManager.pageTemplateExists("/newtemplate.tpsml")) + { + pageManager.removePageTemplate(pageManager.getPageTemplate("/newtemplate.tpsml")); + } + if (pageManager.fragmentDefinitionExists("/newdefinition0.fpsml")) + { + pageManager.removeFragmentDefinition(pageManager.getFragmentDefinition("/newdefinition0.fpsml")); + } + if (pageManager.fragmentDefinitionExists("/newdefinition1.fpsml")) + { + pageManager.removeFragmentDefinition(pageManager.getFragmentDefinition("/newdefinition1.fpsml")); + } + } + + /** + * Test PageManager test configuration + * + * @throws Exception + */ + public void testPageManagerSetup() throws Exception + { + // validate test setup + assertNotNull(pageManager); + Folder folder = pageManager.getFolder("/"); + assertNotNull(folder); + Page page = pageManager.getPage("/page.psml"); + assertNotNull(page); + DynamicPage docPage = pageManager.getDynamicPage("/docpage.dpsml"); + assertNotNull(docPage); + DynamicPage contentPage = pageManager.getDynamicPage("/contentpage.dpsml"); + assertNotNull(contentPage); + FragmentDefinition definition0 = pageManager.getFragmentDefinition("/definition0.fpsml"); + assertNotNull(definition0); + FragmentDefinition definition1 = pageManager.getFragmentDefinition("/definition1.fpsml"); + assertNotNull(definition1); + PageTemplate template = pageManager.getPageTemplate("/template.tpsml"); + assertNotNull(template); + } + + /** + * Test PageLayout component + * + * @throws Exception + */ + public void testPageLayoutComponent() throws Exception + { + assertNotNull(pageManager); + assertNotNull(pageLayout); + + // load definitions and templates + Map fragmentDefinitions = new HashMap(); + FragmentDefinition definition0 = pageManager.getFragmentDefinition("/definition0.fpsml"); + assertNotNull(definition0); + assertEquals("fake-fragment-definition-0", definition0.getDefId()); + fragmentDefinitions.put(definition0.getDefId(), definition0); + FragmentDefinition definition1 = pageManager.getFragmentDefinition("/definition1.fpsml"); + assertNotNull(definition1); + fragmentDefinitions.put(definition1.getDefId(), definition1); + assertEquals("fake-fragment-definition-1", definition1.getDefId()); + PageTemplate template = pageManager.getPageTemplate("/template.tpsml"); + assertNotNull(template); + + // create and validate content page for concrete page + Page page = pageManager.getPage("/page.psml"); + assertNotNull(page); + ContentPage pageContentPage = pageLayout.newContentPage(page, template, fragmentDefinitions); + assertNotNull(pageContentPage); + assertEquals("/page.psml", pageContentPage.getTitle()); + ContentFragment pageContentFragment0 = pageContentPage.getFragmentByFragmentId("fake-template"); + assertNotNull(pageContentFragment0); + assertEquals("fake-template", pageContentFragment0.getId()); + ContentFragment pageContentFragment1 = pageContentPage.getFragmentByFragmentId("fake-fragment-definition-0"); + assertNotNull(pageContentFragment1); + assertEquals("fake-template__fake-fragment-reference__fake-fragment-definition-0", pageContentFragment1.getId()); + assertEquals("fake-fragment-definition-0", pageContentFragment1.getRefId()); + ContentFragment pageContentFragment2 = pageContentPage.getFragmentByFragmentId("fake"); + assertNotNull(pageContentFragment2); + assertEquals("fake-template__fake-page-fragment__fake", pageContentFragment2.getId()); + ContentFragment pageContentFragment3 = pageContentPage.getFragmentByFragmentId("fake-fragment-definition-1"); + assertNotNull(pageContentFragment3); + assertEquals("fake-template__fake-page-fragment__fake__fake-fragment-reference__fake-fragment-definition-1", pageContentFragment3.getId()); + assertEquals("fake-fragment-definition-1", pageContentFragment3.getRefId()); + ContentFragment pageContentFragment4 = pageContentPage.getFragmentByFragmentId("fake-portlet"); + assertNotNull(pageContentFragment4); + assertEquals("fake-template__fake-page-fragment__fake__fake-portlet", pageContentFragment4.getId()); + + // create and validate content pages for concrete dynamic pages + DynamicPage docPage = pageManager.getDynamicPage("/docpage.dpsml"); + assertNotNull(docPage); + ContentPage docPageContentPage = pageLayout.newContentPage(docPage, template, fragmentDefinitions); + assertNotNull(docPageContentPage); + assertEquals("/docpage.dpsml", docPageContentPage.getTitle()); + assertEquals("doc-type", docPageContentPage.getContentType()); + assertTrue(docPageContentPage.isInheritable()); + pageContentFragment0 = docPageContentPage.getFragmentByFragmentId("fake-template"); + assertNotNull(pageContentFragment0); + assertEquals("fake-template", pageContentFragment0.getId()); + pageContentFragment1 = docPageContentPage.getFragmentByFragmentId("fake-fragment-definition-0"); + assertNotNull(pageContentFragment1); + assertEquals("fake-template__fake-fragment-reference__fake-fragment-definition-0", pageContentFragment1.getId()); + assertEquals("fake-fragment-definition-0", pageContentFragment1.getRefId()); + pageContentFragment2 = docPageContentPage.getFragmentByFragmentId("fake"); + assertNotNull(pageContentFragment2); + assertEquals("fake-template__fake-page-fragment__fake", pageContentFragment2.getId()); + DynamicPage contentPage = pageManager.getDynamicPage("/contentpage.dpsml"); + assertNotNull(contentPage); + ContentPage contentPageContentPage = pageLayout.newContentPage(contentPage, template, fragmentDefinitions); + assertNotNull(contentPageContentPage); + assertEquals("/contentpage.dpsml", contentPageContentPage.getTitle()); + assertEquals("*", contentPageContentPage.getContentType()); + assertTrue(contentPageContentPage.isInheritable()); + pageContentFragment0 = contentPageContentPage.getFragmentByFragmentId("fake-template"); + assertNotNull(pageContentFragment0); + assertEquals("fake-template", pageContentFragment0.getId()); + pageContentFragment1 = contentPageContentPage.getFragmentByFragmentId("fake-fragment-definition-0"); + assertNotNull(pageContentFragment1); + assertEquals("fake-template__fake-fragment-reference__fake-fragment-definition-0", pageContentFragment1.getId()); + assertEquals("fake-fragment-definition-0", pageContentFragment1.getRefId()); + pageContentFragment2 = contentPageContentPage.getFragmentByFragmentId("fake"); + assertNotNull(pageContentFragment2); + assertEquals("fake-template__fake-page-fragment__fake", pageContentFragment2.getId()); + + // create and validate content page for page template + ContentPage templateContentPage = pageLayout.newContentPage(template, template, fragmentDefinitions); + assertNotNull(templateContentPage); + assertEquals("/template.tpsml", templateContentPage.getTitle()); + ContentFragment templateContentFragment0 = templateContentPage.getFragmentByFragmentId("fake-template", true); + assertNotNull(templateContentFragment0); + assertEquals("fake-template__fake-page-fragment__fake-template", templateContentFragment0.getId()); + ContentFragment templateContentFragment1 = templateContentPage.getFragmentByFragmentId("fake-page-fragment", true); + assertNotNull(templateContentFragment1); + assertEquals("fake-template__fake-page-fragment__fake-template__fake-page-fragment", templateContentFragment1.getId()); + ContentFragment templateContentFragment2 = templateContentPage.getFragmentByFragmentId("fake-fragment-definition-0", true); + assertNotNull(templateContentFragment2); + assertEquals("fake-template__fake-page-fragment__fake-template__fake-fragment-reference__fake-fragment-definition-0", templateContentFragment2.getId()); + assertEquals("fake-fragment-definition-0", templateContentFragment2.getRefId()); + + // create and validate content page for page template + ContentPage fragmentDefinitionContentPage = pageLayout.newContentPage(definition0, template, fragmentDefinitions); + assertNotNull(fragmentDefinitionContentPage); + assertEquals("/definition0.fpsml", fragmentDefinitionContentPage.getTitle()); + ContentFragment fragmentDefinitionContentFragment0 = fragmentDefinitionContentPage.getFragmentByFragmentId("fake-fragment-definition-0"); + assertNotNull(fragmentDefinitionContentFragment0); + assertEquals("fake-template__fake-page-fragment__fake-fragment-definition-0", fragmentDefinitionContentFragment0.getId()); + + // create new PSML pages, content pages, templates, and fragment definitions + fragmentDefinitionContentPage.newSiblingFragmentDefinition("newdefinition1", null, "new-fake-fragment-definition-1", "/newdefinition1.fpsml", "/newdefinition1.fpsml"); + fragmentDefinitionContentPage.newSiblingFragmentDefinition("newdefinition0", "new-fake-fragment-definition-0", "new-fake-fragment-definition-0", "/newdefinition0.fpsml", "/newdefinition0.fpsml"); + templateContentPage.newSiblingPageTemplate("newtemplate", "new-fake-template", "/newtemplate.tpsml", "/newtemplate.tpsml"); + contentPageContentPage.newSiblingDynamicPage("newcontentpage", "*", "new-fake", "/newcontentpage.dpsml", "/newcontentpage.dpsml"); + pageContentPage.newSiblingPage("newpage", "new-fake", "/newpage.psml", "/newpage.psml"); + Map newFragmentDefinitions = new HashMap(); + FragmentDefinition newDefinition1 = pageManager.getFragmentDefinition("/newdefinition1.fpsml"); + assertNotNull(newDefinition1); + String newDefinition1Id = newDefinition1.getRootFragment().getId(); + newFragmentDefinitions.put(newDefinition1Id, newDefinition1); + FragmentDefinition newDefinition0 = pageManager.getFragmentDefinition("/newdefinition0.fpsml"); + assertNotNull(newDefinition0); + assertEquals("new-fake-fragment-definition-0", newDefinition0.getRootFragment().getId()); + newFragmentDefinitions.put("new-fake-fragment-definition-0", newDefinition0); + PageTemplate newTemplate = pageManager.getPageTemplate("/newtemplate.tpsml"); + assertNotNull(newTemplate); + DynamicPage newContentPage = pageManager.getDynamicPage("/newcontentpage.dpsml"); + assertNotNull(newContentPage); + assertEquals("*", newContentPage.getContentType()); + assertTrue(newContentPage.isInheritable()); + Page newPage = pageManager.getPage("/newpage.psml"); + assertNotNull(newPage); + + // create and validate new content pages + ContentPage newFragmentDefinition1ContentPage = pageLayout.newContentPage(newDefinition1, newTemplate, newFragmentDefinitions); + assertNotNull(newFragmentDefinition1ContentPage); + List contentFragments = newFragmentDefinition1ContentPage.getFragmentsByName("new-fake-fragment-definition-1"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + assertEquals(newDefinition1Id, newDefinition1.getDefId()); + ContentPage newFragmentDefinition0ContentPage = pageLayout.newContentPage(newDefinition0, newTemplate, newFragmentDefinitions); + assertNotNull(newFragmentDefinition0ContentPage); + contentFragments = newFragmentDefinition0ContentPage.getFragmentsByName("new-fake-fragment-definition-0"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + assertEquals("new-fake-fragment-definition-0", ((ContentFragment)contentFragments.get(0)).getFragmentId()); + assertEquals("new-fake-fragment-definition-0", newDefinition0.getDefId()); + ContentPage newTemplateContentPage = pageLayout.newContentPage(newTemplate, newTemplate, newFragmentDefinitions); + assertNotNull(newTemplateContentPage); + newTemplateContentPage.addFragmentReference("new-fake-fragment-definition-0"); + newTemplateContentPage = pageLayout.newContentPage(newTemplate, newTemplate, newFragmentDefinitions); + ContentPage newContentPageContentPage = pageLayout.newContentPage(newContentPage, newTemplate, newFragmentDefinitions); + assertNotNull(newContentPageContentPage); + ContentPage newPageContentPage = pageLayout.newContentPage(newPage, newTemplate, newFragmentDefinitions); + assertNotNull(newPageContentPage); + contentFragments = newPageContentPage.getFragmentsByName("new-fake"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + ContentFragment newPageRootFragment = (ContentFragment)contentFragments.get(0); + pageLayout.addFragmentReference(newPageRootFragment, newDefinition1Id, 0, 0); + pageLayout.addPortlet(newPageRootFragment, Fragment.PORTLET, "new-fake-portlet", 1, 0); + pageLayout.addFragmentReference(newPageRootFragment, "nonexistent-reference-id", 2, 0); + newPageContentPage = pageLayout.newContentPage(newPage, newTemplate, newFragmentDefinitions); + assertNotNull(newPageContentPage); + + // validate new PSML pages, content pages, templates, and fragment definitions + assertEquals("/newpage.psml", newPageContentPage.getTitle()); + contentFragments = newPageContentPage.getFragmentsByName("new-fake-template"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + contentFragments = newPageContentPage.getFragmentsByName("new-fake-fragment-definition-0"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + assertEquals("new-fake-fragment-definition-0", ((ContentFragment)contentFragments.get(0)).getRefId()); + contentFragments = newPageContentPage.getFragmentsByName("new-fake"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + contentFragments = ((ContentFragment)contentFragments.get(0)).getFragments(); + assertNotNull(contentFragments); + assertEquals(3, contentFragments.size()); + ContentFragment newPageReferenceContentFragment = null; + Iterator contentFragmentsIter = contentFragments.iterator(); + while (contentFragmentsIter.hasNext()) + { + ContentFragment contentFragment = (ContentFragment)contentFragmentsIter.next(); + if (contentFragment.getType().equals(ContentFragment.PORTLET) && contentFragment.getName().equals("new-fake-portlet")) + { + } + else if (contentFragment.getType().equals(ContentFragment.PORTLET) && contentFragment.getName().equals("new-fake-fragment-definition-1")) + { + assertEquals(newDefinition1Id, contentFragment.getRefId()); + } + else if (contentFragment.getType().equals(ContentFragment.REFERENCE)) + { + assertEquals("nonexistent-reference-id", contentFragment.getRefId()); + newPageReferenceContentFragment = contentFragment; + } + else + { + fail("Unexpected content fragment: "+contentFragment.getType()+"/"+contentFragment.getName()); + } + } + assertEquals("/newcontentpage.dpsml", newContentPageContentPage.getTitle()); + assertEquals("*", newContentPageContentPage.getContentType()); + assertTrue(newContentPageContentPage.isInheritable()); + contentFragments = newContentPageContentPage.getFragmentsByName("new-fake-template"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + contentFragments = newContentPageContentPage.getFragmentsByName("new-fake-fragment-definition-0"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + assertEquals("new-fake-fragment-definition-0", ((ContentFragment)contentFragments.get(0)).getRefId()); + contentFragments = newContentPageContentPage.getFragmentsByName("new-fake"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + assertEquals("/newtemplate.tpsml", newTemplateContentPage.getTitle()); + contentFragments = newTemplateContentPage.getFragmentsByName("new-fake-template", true); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + contentFragments = ((ContentFragment)contentFragments.get(0)).getFragments(); + assertNotNull(contentFragments); + assertEquals(2, contentFragments.size()); + contentFragmentsIter = contentFragments.iterator(); + while (contentFragmentsIter.hasNext()) + { + ContentFragment contentFragment = (ContentFragment)contentFragmentsIter.next(); + if (contentFragment.getType().equals(ContentFragment.PAGE)) + { + } + else if (contentFragment.getType().equals(ContentFragment.PORTLET) && contentFragment.getName().equals("new-fake-fragment-definition-0")) + { + assertEquals("new-fake-fragment-definition-0", contentFragment.getRefId()); + } + else + { + fail("Unexpected content fragment: "+contentFragment.getType()+"/"+contentFragment.getName()); + } + } + assertEquals("/newdefinition0.fpsml", newFragmentDefinition0ContentPage.getTitle()); + contentFragments = newFragmentDefinition0ContentPage.getFragmentsByName("new-fake-fragment-definition-0"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + assertEquals("new-fake-fragment-definition-0", ((ContentFragment)contentFragments.get(0)).getFragmentId()); + assertEquals("new-fake-fragment-definition-0", newFragmentDefinition0ContentPage.getDefId()); + assertEquals("/newdefinition1.fpsml", newFragmentDefinition1ContentPage.getTitle()); + contentFragments = newFragmentDefinition1ContentPage.getFragmentsByName("new-fake-fragment-definition-1"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + assertEquals(newDefinition1Id, ((ContentFragment)contentFragments.get(0)).getFragmentId()); + assertEquals(newDefinition1Id, newFragmentDefinition1ContentPage.getDefId()); + + // update pages via content pages and fragments + newFragmentDefinition1ContentPage.updateTitles(null, "new-fragment-definition-1-updated"); + ContentFragment updateContentFragment = (ContentFragment)(newFragmentDefinition1ContentPage.getFragmentsByName("new-fake-fragment-definition-1").get(0)); + updateContentFragment.updateProperty("global-prop", "global-fragment-definition"); + updateContentFragment.updateProperty("prop", "global-fragment-definition"); + updateContentFragment.updateProperty("prop", "user-fragment-definition", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment.updateProperty("user-prop", "user-fragment-definition", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment.updateProperty("global-fragment-definition-prop", "global-fragment-definition"); + updateContentFragment.updateProperty("fragment-definition-prop", "global-fragment-definition"); + updateContentFragment.updateProperty("fragment-definition-prop", "user-fragment-definition", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment.updateProperty("user-fragment-definition-prop", "user-fragment-definition", ContentFragment.USER_PROPERTY_SCOPE, "user"); + newTemplateContentPage.updateTitles(null, "new-page-template-updated"); + updateContentFragment = (ContentFragment)(newTemplateContentPage.getFragmentsByName("new-fake-template", true).get(0)); + updateContentFragment.updateProperty("global-prop", "global-template"); + updateContentFragment.updateProperty("prop", "global-template"); + updateContentFragment.updateProperty("prop", "user-template", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment.updateProperty("user-prop", "user-template", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment = (ContentFragment)(newTemplateContentPage.getFragmentsByName("new-fake-fragment-definition-0", true).get(0)); + updateContentFragment.updateProperty("global-prop", "global-template"); + updateContentFragment.updateProperty("prop", "global-template"); + updateContentFragment.updateProperty("prop", "user-template", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment.updateProperty("user-prop", "user-template", ContentFragment.USER_PROPERTY_SCOPE, "user"); + newPageContentPage.updateTitles(null, "new-page-updated"); + updateContentFragment = newPageContentPage.getRootFragment(); + updateContentFragment.updateProperty("user-prop", "user-page", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment = (ContentFragment)(newPageContentPage.getFragmentsByName("new-fake").get(0)); + updateContentFragment.updateProperty("global-prop", "global-page"); + updateContentFragment.updateProperty("prop", "global-page"); + updateContentFragment.updateProperty("prop", "user-page", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment.updateProperty("user-prop", "user-page", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment = (ContentFragment)(newPageContentPage.getFragmentsByName("new-fake-fragment-definition-0").get(0)); + updateContentFragment.updateProperty("user-prop", "user-page", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment = (ContentFragment)(newPageContentPage.getFragmentsByName("new-fake-fragment-definition-1").get(0)); + updateContentFragment.updateProperty("global-prop", "global-page"); + updateContentFragment.updateProperty("prop", "global-page"); + updateContentFragment.updateProperty("prop", "user-page", ContentFragment.USER_PROPERTY_SCOPE, "user"); + updateContentFragment.updateProperty("user-prop", "user-page", ContentFragment.USER_PROPERTY_SCOPE, "user"); + newPageReferenceContentFragment.updateRefId("fake-fragment-definition-0"); + newContentPageContentPage.updateTitles(null, "new-content-page-updated"); + newContentPageContentPage.updateContent("new-doc-type", false); + + // continue test case as user + Exception exception = (Exception)JSSubject.doAsPrivileged(userSubject, new PrivilegedAction() + { + public Object run() + { + try + { + // reload PSML pages, content pages, templates, and fragment definitions + Map newFragmentDefinitions = new HashMap(); + FragmentDefinition definition0 = pageManager.getFragmentDefinition("/definition0.fpsml"); + assertNotNull(definition0); + newFragmentDefinitions.put(definition0.getDefId(), definition0); + FragmentDefinition newDefinition1 = pageManager.getFragmentDefinition("/newdefinition1.fpsml"); + assertNotNull(newDefinition1); + newFragmentDefinitions.put(newDefinition1.getDefId(), newDefinition1); + FragmentDefinition newDefinition0 = pageManager.getFragmentDefinition("/newdefinition0.fpsml"); + assertNotNull(newDefinition0); + newFragmentDefinitions.put(newDefinition0.getDefId(), newDefinition0); + PageTemplate newTemplate = pageManager.getPageTemplate("/newtemplate.tpsml"); + assertNotNull(newTemplate); + Page newPage = pageManager.getPage("/newpage.psml"); + assertNotNull(newPage); + DynamicPage newContentPage = pageManager.getDynamicPage("/newcontentpage.dpsml"); + assertNotNull(newContentPage); + + // verify content page and fragment updates + ContentPage newFragmentDefinition1ContentPage = pageLayout.newContentPage(newDefinition1, newTemplate, newFragmentDefinitions); + assertNotNull(newFragmentDefinition1ContentPage); + assertEquals("new-fragment-definition-1-updated", newFragmentDefinition1ContentPage.getShortTitle()); + ContentFragment updatedContentFragment = (ContentFragment)(newFragmentDefinition1ContentPage.getFragmentsByName("new-fake-fragment-definition-1").get(0)); + assertEquals("global-fragment-definition", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-fragment-definition", updatedContentFragment.getProperty("prop")); + assertEquals("user-fragment-definition", updatedContentFragment.getProperty("user-prop")); + assertEquals("global-fragment-definition", updatedContentFragment.getProperty("global-fragment-definition-prop")); + assertEquals("user-fragment-definition", updatedContentFragment.getProperty("fragment-definition-prop")); + assertEquals("user-fragment-definition", updatedContentFragment.getProperty("user-fragment-definition-prop")); + ContentPage newFragmentDefinition0ContentPage = pageLayout.newContentPage(newDefinition0, newTemplate, newFragmentDefinitions); + assertNotNull(newFragmentDefinition0ContentPage); + ContentPage newTemplateContentPage = pageLayout.newContentPage(newTemplate, newTemplate, newFragmentDefinitions); + assertNotNull(newTemplateContentPage); + assertEquals("new-page-template-updated", newTemplateContentPage.getShortTitle()); + updatedContentFragment = newTemplateContentPage.getRootFragment(); + assertEquals("global-template", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-template", updatedContentFragment.getProperty("prop")); + assertEquals("user-page", updatedContentFragment.getProperty("user-prop")); + updatedContentFragment = (ContentFragment)(newTemplateContentPage.getFragmentsByName("new-fake-template", true).get(0)); + assertEquals("global-template", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-template", updatedContentFragment.getProperty("prop")); + assertEquals("user-page", updatedContentFragment.getProperty("user-prop")); + updatedContentFragment = (ContentFragment)(newTemplateContentPage.getFragmentsByName("new-fake-fragment-definition-0", true).get(0)); + assertEquals("global-template", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-template", updatedContentFragment.getProperty("prop")); + assertEquals("user-page", updatedContentFragment.getProperty("user-prop")); + ContentPage newPageContentPage = pageLayout.newContentPage(newPage, newTemplate, newFragmentDefinitions); + assertNotNull(newPageContentPage); + assertEquals("new-page-updated", newPageContentPage.getShortTitle()); + updatedContentFragment = newPageContentPage.getRootFragment(); + assertEquals("global-template", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-template", updatedContentFragment.getProperty("prop")); + assertEquals("user-page", updatedContentFragment.getProperty("user-prop")); + updatedContentFragment = (ContentFragment)(newPageContentPage.getFragmentsByName("new-fake").get(0)); + assertEquals("global-page", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-page", updatedContentFragment.getProperty("prop")); + assertEquals("user-page", updatedContentFragment.getProperty("user-prop")); + updatedContentFragment = (ContentFragment)(newPageContentPage.getFragmentsByName("new-fake-fragment-definition-0").get(0)); + assertEquals("global-template", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-template", updatedContentFragment.getProperty("prop")); + assertEquals("user-page", updatedContentFragment.getProperty("user-prop")); + updatedContentFragment = (ContentFragment)(newPageContentPage.getFragmentsByName("new-fake-fragment-definition-1").get(0)); + assertEquals("global-page", updatedContentFragment.getProperty("global-prop")); + assertEquals("user-page", updatedContentFragment.getProperty("prop")); + assertEquals("user-page", updatedContentFragment.getProperty("user-prop")); + assertEquals("global-fragment-definition", updatedContentFragment.getProperty("global-fragment-definition-prop")); + assertEquals("user-fragment-definition", updatedContentFragment.getProperty("fragment-definition-prop")); + assertEquals("user-fragment-definition", updatedContentFragment.getProperty("user-fragment-definition-prop")); + List contentFragments = newPageContentPage.getFragmentsByName("new-fake"); + assertNotNull(contentFragments); + assertEquals(1, contentFragments.size()); + contentFragments = ((ContentFragment)contentFragments.get(0)).getFragments(); + assertNotNull(contentFragments); + assertEquals(3, contentFragments.size()); + Iterator contentFragmentsIter = contentFragments.iterator(); + while (contentFragmentsIter.hasNext()) + { + ContentFragment contentFragment = (ContentFragment)contentFragmentsIter.next(); + if (contentFragment.getType().equals(ContentFragment.PORTLET) && contentFragment.getName().equals("new-fake-portlet")) + { + } + else if (contentFragment.getType().equals(ContentFragment.PORTLET) && contentFragment.getName().equals("new-fake-fragment-definition-1")) + { + assertEquals(newDefinition1.getDefId(), contentFragment.getRefId()); + } + else if (contentFragment.getType().equals(ContentFragment.PORTLET) && contentFragment.getName().equals("fake-fragment-definition-0")) + { + assertEquals("fake-fragment-definition-0", contentFragment.getRefId()); + } + else + { + fail("Unexpected content fragment: "+contentFragment.getType()+"/"+contentFragment.getName()); + } + } + ContentPage newContentPageContentPage = pageLayout.newContentPage(newContentPage, newTemplate, newFragmentDefinitions); + assertNotNull(newContentPageContentPage); + assertEquals("new-content-page-updated", newContentPageContentPage.getShortTitle()); + assertEquals("new-doc-type", newContentPageContentPage.getContentType()); + assertFalse(newContentPageContentPage.isInheritable()); + + return null; + } + catch (Exception e) + { + return e; + } + finally + { + JSSubject.clearSubject(); + } + } + }, null); + if (exception != null) + { + throw exception; + } + } + + public void testUpdateSecurityConstraints() throws Exception { + assertNotNull(pageManager); + assertNotNull(pageLayout); + + Page page = pageManager.getPage("/page.psml"); + assertNotNull(page); + ContentPage pageContentPage = pageLayout.newContentPage(page, pageManager.getPageTemplate("/template.tpsml"), Collections.emptyMap()); + assertNotNull(pageContentPage); + ContentFragment contentFrag = pageContentPage.getFragmentByFragmentId("fake-portlet"); + assertNotNull(contentFrag); + + pageLayout.updateSecurityConstraints(contentFrag, null); + assertNull(contentFrag.getSecurityConstraints()); + } + + public static abstract class AbstractTestPrincipal extends TransientJetspeedPrincipal + { + private static final SecurityAttributeTypes attributeTypes = new SecurityAttributeTypes() + { + + public Map<String, SecurityAttributeType> getAttributeTypeMap() + { + return Collections.emptyMap(); + } + + public Map<String, SecurityAttributeType> getAttributeTypeMap(String category) + { + return Collections.emptyMap(); + } + + public boolean isExtendable() + { + return false; + } + + public boolean isReadOnly() + { + return true; + } + }; + + private JetspeedPrincipalType type; + + private static final long serialVersionUID = 1L; + + + public AbstractTestPrincipal(final String type, String name) + { + super(type, name); + this.type = new JetspeedPrincipalType() + { + public SecurityAttributeTypes getAttributeTypes() + { + return attributeTypes; + } + + public String getClassName() + { + return null; + } + + public String getName() + { + return type; + } + + public Class<JetspeedPrincipal> getPrincipalClass() + { + return null; + } + }; + } + + public synchronized JetspeedPrincipalType getType() + { + return type; + } + } + + public static class TestUser extends AbstractTestPrincipal implements User + { + private static final long serialVersionUID = 1L; + + public TestUser(String name) + { + super(JetspeedPrincipalType.USER, name); + } + } +} Propchange: portals/jetspeed-2/portal/trunk/components/jetspeed-page-layout/src/test/java/org/apache/jetspeed/layout/AbstractTestPageLayout.java ------------------------------------------------------------------------------ svn:mime-type = text/plain --------------------------------------------------------------------- To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org