/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.structure.page; import java.util.Date; import org.junit.Test; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; import com.enonic.cms.core.structure.menuitem.MenuItemKey; import com.enonic.cms.core.structure.page.template.PageTemplateEntity; import com.enonic.cms.core.structure.page.template.PageTemplatePortletEntity; import com.enonic.cms.core.structure.page.template.PageTemplatePortletKey; import com.enonic.cms.core.structure.page.template.PageTemplateRegionEntity; import com.enonic.cms.core.structure.portlet.PortletEntity; import com.enonic.cms.core.structure.portlet.PortletKey; import static org.junit.Assert.*; /** * Aug 21, 2009 */ public class RegionFactoryTest { @Test public void createRegionsOriginatingPageTemplate() { // setup PageTemplateEntity pageTemplate = new PageTemplateEntity(); pageTemplate.setKey( 0 ); pageTemplate.addPageTemplateRegion( createPageTemplateRegion( 1, "north", pageTemplate ) ); pageTemplate.addPageTemplateRegion( createPageTemplateRegion( 2, "center", pageTemplate ) ); pageTemplate.addPageTemplateRegion( createPageTemplateRegion( 3, "west", pageTemplate ) ); pageTemplate.addPageTemplateRegion( createPageTemplateRegion( 4, "east", pageTemplate ) ); pageTemplate.addPageTemplateRegion( createPageTemplateRegion( 5, "south", pageTemplate ) ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "north", createPortlet( 1, "Portlet-1" ), pageTemplate ) ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "west", createPortlet( 2, "Portlet-2" ), pageTemplate ) ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "east", createPortlet( 3, "Portlet-3" ), pageTemplate ) ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "center", createPortlet( 4, "Portlet-4" ), pageTemplate ) ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "south", createPortlet( 5, "Portlet-5" ), pageTemplate ) ); MenuItemEntity menuItem = createMenuItem( 1, "forsiden", null ); // excercise Regions regions = RegionFactory.createRegionsOriginatingPageTemplate( pageTemplate, menuItem ); // verify assertEquals( 5, regions.numberOfRegions() ); } @Test public void pagePortletsOverridesAllTemplatePortlets() { // setup PageTemplateEntity pageTemplate = new PageTemplateEntity(); pageTemplate.setKey( 0 ); PageTemplateRegionEntity region_leftColumn = createPageTemplateRegion( 1, "leftColumn", pageTemplate ); PageTemplateRegionEntity region_mainColumn = createPageTemplateRegion( 2, "mainColumn", pageTemplate ); pageTemplate.addPageTemplateRegion( region_leftColumn ); pageTemplate.addPageTemplateRegion( region_mainColumn ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "leftColumn", createPortlet( 11, "Portlet-1" ), pageTemplate ) ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "mainColumn", createPortlet( 22, "Portlet-2" ), pageTemplate ) ); PageEntity page = createPage( 1, pageTemplate ); page.addPortletPlacement( createPagePortletWindow( page, region_leftColumn, createPortlet( 101, "Overriding-Portlet-1" ) ) ); page.addPortletPlacement( createPagePortletWindow( page, region_mainColumn, createPortlet( 102, "Overriding-Portlet-2" ) ) ); MenuItemEntity menuItem = createMenuItem( 123, "forsiden", page ); // excercise Regions regions = RegionFactory.createRegionsForPage( pageTemplate, menuItem ); // verify correct portlet windows in leftColumn region assertEquals( 2, regions.numberOfRegions() ); Region actualLeftColumnRegion = regions.getRegion( "leftColumn" ); assertNotNull( actualLeftColumnRegion ); assertNotNull( actualLeftColumnRegion.getWindow( new WindowKey( new MenuItemKey( 123 ), new PortletKey( 101 ) ) ) ); assertEquals( 1, actualLeftColumnRegion.numberOfWindows() ); // verify correct portlet windows in mainColumn region Region actualMainColumnRegion = regions.getRegion( "mainColumn" ); assertNotNull( actualMainColumnRegion ); assertNotNull( "expected window missing", actualMainColumnRegion.getWindow( new WindowKey( new MenuItemKey( 123 ), new PortletKey( 102 ) ) ) ); assertEquals( 1, actualMainColumnRegion.numberOfWindows() ); } @Test public void onePagePortletOverridesATemplatePortlet() { // setup PageTemplateEntity pageTemplate = new PageTemplateEntity(); pageTemplate.setKey( 0 ); PageTemplateRegionEntity region_leftColumn = createPageTemplateRegion( 1, "leftColumn", pageTemplate ); PageTemplateRegionEntity region_mainColumn = createPageTemplateRegion( 2, "mainColumn", pageTemplate ); pageTemplate.addPageTemplateRegion( region_leftColumn ); pageTemplate.addPageTemplateRegion( region_mainColumn ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "leftColumn", createPortlet( 11, "Portlet-1" ), pageTemplate ) ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "mainColumn", createPortlet( 22, "Portlet-2" ), pageTemplate ) ); PageEntity page = createPage( 1, pageTemplate ); page.addPortletPlacement( createPagePortletWindow( page, region_leftColumn, createPortlet( 101, "Overriding-Portlet-1" ) ) ); MenuItemEntity menuItem = createMenuItem( 123, "forsiden", page ); // excercise Regions regions = RegionFactory.createRegionsForPage( pageTemplate, menuItem ); // verify correct portlet windows in leftColumn region assertEquals( 2, regions.numberOfRegions() ); Region actualLeftColumnRegion = regions.getRegion( "leftColumn" ); assertNotNull( actualLeftColumnRegion ); assertNotNull( actualLeftColumnRegion.getWindow( new WindowKey( new MenuItemKey( 123 ), new PortletKey( 101 ) ) ) ); assertNull( actualLeftColumnRegion.getWindow( new WindowKey( new MenuItemKey( 123 ), new PortletKey( 11 ) ) ) ); // verify correct portlet windows in mainColumn region Region actualMainColumnRegion = regions.getRegion( "mainColumn" ); assertNotNull( actualMainColumnRegion ); assertNotNull( actualMainColumnRegion.getWindow( new WindowKey( new MenuItemKey( 123 ), new PortletKey( 22 ) ) ) ); } @Test public void twoPagePortletOverridesATemplatePortlet() { // setup PageTemplateEntity pageTemplate = new PageTemplateEntity(); pageTemplate.setKey( 0 ); PageTemplateRegionEntity region_leftColumn = createPageTemplateRegion( 1, "leftColumn", pageTemplate ); pageTemplate.addPageTemplateRegion( region_leftColumn ); pageTemplate.addPageTemplatePortlet( createPageTemplatePortlet( "leftColumn", createPortlet( 11, "Portlet-1" ), pageTemplate ) ); PageEntity page = createPage( 1, pageTemplate ); page.addPortletPlacement( createPagePortletWindow( page, region_leftColumn, createPortlet( 101, "Overriding-Portlet-1" ) ) ); page.addPortletPlacement( createPagePortletWindow( page, region_leftColumn, createPortlet( 102, "Overriding-Portlet-2" ) ) ); MenuItemEntity menuItem = createMenuItem( 123, "forsiden", page ); // excercise Regions regions = RegionFactory.createRegionsForPage( pageTemplate, menuItem ); // verify correct portlet windows in leftColumn region assertEquals( 1, regions.numberOfRegions() ); Region actualLeftColumnRegion = regions.getRegion( "leftColumn" ); assertNotNull( actualLeftColumnRegion ); assertEquals( 2, actualLeftColumnRegion.numberOfWindows() ); assertNotNull( actualLeftColumnRegion.getWindow( new WindowKey( new MenuItemKey( 123 ), new PortletKey( 101 ) ) ) ); assertNotNull( actualLeftColumnRegion.getWindow( new WindowKey( new MenuItemKey( 123 ), new PortletKey( 102 ) ) ) ); } private PageWindowEntity createPagePortletWindow( PageEntity page, PageTemplateRegionEntity region, PortletEntity portlet ) { PageWindowEntity pagePortletWindow = new PageWindowEntity(); pagePortletWindow.setKey( new PageWindowKey( page.getKey(), portlet.getKey() ) ); pagePortletWindow.setOrder( 0 ); pagePortletWindow.setPage( page ); pagePortletWindow.setPortlet( portlet ); pagePortletWindow.setPageTemplateRegion( region ); return pagePortletWindow; } private PageEntity createPage( int key, PageTemplateEntity pageTemplate ) { PageEntity page = new PageEntity(); page.setKey( key ); page.setTemplate( pageTemplate ); return page; } private MenuItemEntity createMenuItem( int key, String name, PageEntity page ) { MenuItemEntity menuItem = new MenuItemEntity(); menuItem.setKey( new MenuItemKey( key ) ); menuItem.setName( name ); menuItem.setPage( page ); return menuItem; } private PortletEntity createPortlet( int key, String name ) { PortletEntity portlet = new PortletEntity(); portlet.setKey( key ); portlet.setName( name ); return portlet; } private PageTemplatePortletEntity createPageTemplatePortlet( String regionName, PortletEntity portlet, PageTemplateEntity pageTemplate ) { PageTemplatePortletEntity i = new PageTemplatePortletEntity(); i.setKey( new PageTemplatePortletKey( pageTemplate.getKey(), portlet.getKey() ) ); i.setPortlet( portlet ); i.setPageTemplate( pageTemplate ); i.setPageTemplateRegion( findPageTemplateRegion( regionName, pageTemplate ) ); i.setTimestamp( new Date() ); return i; } private PageTemplateRegionEntity findPageTemplateRegion( String name, PageTemplateEntity pageTemplate ) { for ( PageTemplateRegionEntity region : pageTemplate.getPageTemplateRegions() ) { if ( name.equals( region.getName() ) ) { return region; } } return null; } private PageTemplateRegionEntity createPageTemplateRegion( int key, String name, PageTemplateEntity pageTemplate ) { PageTemplateRegionEntity i = new PageTemplateRegionEntity(); i.setKey( key ); i.setName( name ); i.setMultiple( true ); i.setOverride( true ); i.setSeparator( "dummySeparator" ); i.setPageTemplate( pageTemplate ); return i; } }