/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.springframework.util.Assert;
import com.enonic.cms.core.structure.SiteEntity;
import com.enonic.cms.core.structure.SiteKey;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
import com.enonic.cms.core.structure.menuitem.MenuItemKey;
public class ContentLocation
{
private ContentLocationType type;
private ContentEntity content;
private SiteEntity site;
private String siteName;
private MenuItemKey menuItemKey;
private String menuItemName;
private MenuItemEntity menuItem;
private String menuItemPathAsString;
private boolean isApproved;
private boolean isUserDefinedSectionHome;
public static ContentLocation createMenuItemLocation( ContentEntity content, MenuItemEntity menuItem )
{
ContentLocation location = new ContentLocation( ContentLocationType.MENUITEM, content, menuItem );
return location;
}
public static ContentLocation createSectionHomeLocation( ContentEntity content, MenuItemEntity menuItem )
{
ContentLocation location = new ContentLocation( ContentLocationType.SECTION_HOME, content, menuItem );
location.isUserDefinedSectionHome = true;
return location;
}
public static ContentLocation createSectionLocation( ContentEntity content, MenuItemEntity menuItem, boolean isApprovedInSection )
{
ContentLocation location = new ContentLocation( ContentLocationType.SECTION, content, menuItem, isApprovedInSection );
return location;
}
public static ContentLocation createSectionAndSectionHomeLocation( ContentEntity content, MenuItemEntity menuItem,
boolean isApprovedInSection )
{
ContentLocation location =
new ContentLocation( ContentLocationType.SECTION_AND_SECTION_HOME, content, menuItem, isApprovedInSection );
location.isUserDefinedSectionHome = true;
return location;
}
private ContentLocation( ContentLocationType type, ContentEntity content, MenuItemEntity menuItem )
{
this( type, content, menuItem, false );
}
private ContentLocation( ContentLocationType type, ContentEntity content, MenuItemEntity menuItem, boolean isApprovedInSection )
{
Assert.notNull( type );
Assert.notNull( content );
Assert.notNull( menuItem );
this.type = type;
this.menuItemKey = menuItem.getKey();
this.menuItemName = menuItem.getName();
this.content = content;
this.menuItem = menuItem;
this.site = menuItem.getSite();
this.siteName = this.site.getName();
this.menuItemPathAsString = this.menuItem.getPath().toString();
this.isApproved = isApprovedInSection;
}
public ContentEntity getContent()
{
return content;
}
public MenuItemEntity getMenuItem()
{
return menuItem;
}
public MenuItemKey getMenuItemKey()
{
return menuItemKey;
}
public String getMenuItemName()
{
return menuItemName;
}
public ContentLocationType getType()
{
return type;
}
public boolean isInSection()
{
return type == ContentLocationType.SECTION || type == ContentLocationType.SECTION_AND_SECTION_HOME;
}
public boolean isHomeButNotInSection()
{
return type == ContentLocationType.SECTION_HOME;
}
public boolean isOnMenuItem()
{
return type == ContentLocationType.MENUITEM;
}
public boolean isInSectionOrSectionHome()
{
return type == ContentLocationType.SECTION || type == ContentLocationType.SECTION_AND_SECTION_HOME ||
type == ContentLocationType.SECTION_HOME;
}
public String getMenuItemPathAsString()
{
return menuItemPathAsString;
}
public SiteKey getSiteKey()
{
return site.getKey();
}
public SiteEntity getSite()
{
return site;
}
public String getSiteName()
{
return siteName;
}
public boolean isApproved()
{
return isApproved;
}
public boolean isUserDefinedSectionHome()
{
return isUserDefinedSectionHome;
}
@Override
public boolean equals( Object o )
{
if ( this == o )
{
return true;
}
if ( o == null || getClass() != o.getClass() )
{
return false;
}
ContentLocation that = (ContentLocation) o;
if ( !menuItem.equals( that.menuItem ) )
{
return false;
}
return true;
}
@Override
public int hashCode()
{
return menuItem.hashCode();
}
public String toString()
{
ToStringBuilder s = new ToStringBuilder( this );
s.append( "menuItemKey", menuItemKey );
s.append( "type", type );
return s.toString();
}
public boolean isLocationFor( MenuItemEntity menuItem )
{
return this.menuItem.equals( menuItem );
}
}