/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.structure.page;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
import com.enonic.cms.core.structure.page.template.PageTemplatePortletEntity;
import com.enonic.cms.core.structure.portlet.PortletEntity;
/**
* May 15, 2009
*/
public class Region
{
private String name;
private String separator;
private RegionOrigin origin;
private LinkedHashMap<String, PageTemplatePortletEntity> pageTemplatePortlets = new LinkedHashMap<String, PageTemplatePortletEntity>();
private LinkedHashMap<WindowKey, Window> windows = new LinkedHashMap<WindowKey, Window>();
public Region( String name, String separator, Collection<PageTemplatePortletEntity> pageTemplatePortletWindows )
{
this.name = name;
this.separator = separator;
this.origin = RegionOrigin.PAGETEMPLATE;
for ( PageTemplatePortletEntity pageTemplatePortletWindow : pageTemplatePortletWindows )
{
if ( name.equals( pageTemplatePortletWindow.getPageTemplateRegion().getName() ) )
{
final PortletEntity portlet = pageTemplatePortletWindow.getPortlet();
pageTemplatePortlets.put( portlet.getName(), pageTemplatePortletWindow );
}
}
}
public Region( String name, String separator, RegionOrigin origin )
{
this.name = name;
this.separator = separator;
this.origin = origin;
}
@Override
public String toString()
{
return "Region{ name='" + name + "\' separator='" + separator + "\'}";
}
public String getName()
{
return name;
}
public String getSeparator()
{
return separator;
}
public RegionOrigin getOrigin()
{
return origin;
}
public void addWindow( Window value )
{
windows.put( value.getKey(), value );
}
public Collection<Window> getWindows()
{
return Collections.unmodifiableCollection( windows.values() );
}
protected void makeWindowsOfTemplates( MenuItemEntity menuItem )
{
for ( PageTemplatePortletEntity pageTemplatePortlet : pageTemplatePortlets.values() )
{
WindowKey key = new WindowKey( menuItem.getKey(), pageTemplatePortlet.getPortlet().getPortletKey() );
Window window = new Window();
window.setKey( key );
window.setPortlet( pageTemplatePortlet.getPortlet() );
window.setRegion( this );
windows.put( key, window );
}
}
public boolean originatesFrom( RegionOrigin givenRegion )
{
return this.origin.equals( givenRegion );
}
public Region cloneWithoutPortletWindows( RegionOrigin origin )
{
Region region = new Region( getName(), getSeparator(), origin );
for ( PageTemplatePortletEntity e : region.pageTemplatePortlets.values() )
{
region.addPageTemplatePortlet( e );
}
return region;
}
private void addPageTemplatePortlet( PageTemplatePortletEntity value )
{
PortletEntity portlet = value.getPortlet();
pageTemplatePortlets.put( portlet.getName(), value );
}
public int numberOfWindows()
{
return windows.size();
}
public Window getWindow( WindowKey windowKey )
{
return windows.get( windowKey );
}
public Collection<PageTemplatePortletEntity> getPageTemplatePortlets()
{
return pageTemplatePortlets.values();
}
}