/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal.datasource.context;
import org.jdom.Element;
import com.enonic.cms.core.content.ContentEntity;
import com.enonic.cms.core.portal.PageRequestType;
import com.enonic.cms.core.portal.datasource.executor.DataSourceExecutorContext;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
import com.enonic.cms.core.structure.page.template.PageTemplateEntity;
/**
* Jul 28, 2009
*/
final class ResourceContextXmlCreator
{
private PageTemplateEntity pageTemplate;
private MenuItemEntity menuItem;
private ContentEntity contentFromRequest;
private PageRequestType pageRequestType;
private PathContextXmlCreator pathContextXmlCreator;
public ResourceContextXmlCreator( DataSourceExecutorContext datasourceExecutorContext )
{
this.menuItem = datasourceExecutorContext.getMenuItem();
this.contentFromRequest = datasourceExecutorContext.getContentFromRequest();
this.pageRequestType = datasourceExecutorContext.getPageRequestType();
this.pageTemplate = datasourceExecutorContext.getPageTemplate();
pathContextXmlCreator = new PathContextXmlCreator();
}
public Element createResourceElement()
{
Element resourceEl = new Element( "resource" );
resourceEl.setAttribute( "key", resolveKey() );
resourceEl.setAttribute( "type", resolveResourceType() );
resourceEl.addContent(
new Element( "name" ).setText( ResourceNameResolver.resolveName( pageRequestType, contentFromRequest, menuItem ) ) );
Element menuNameEl =
new Element( "menu-name" ).setText( asEmptyIfNull( ResourceNameResolver.resolveMenuName( pageRequestType, menuItem ) ) );
resourceEl.addContent( menuNameEl );
resourceEl.addContent( new Element( "display-name" ).setText(
ResourceNameResolver.resolveDisplayName( pageRequestType, contentFromRequest, menuItem ) ) );
if ( menuItem != null )
{
resourceEl.addContent( new Element( "show-in-menu" ).setText( menuItem.getHidden() ? "false" : "true" ) );
resourceEl.addContent( new Element( "keywords" ).setText( asEmptyIfNull( menuItem.getKeywords() ) ) );
resourceEl.addContent( new Element( "description" ).setText( asEmptyIfNull( menuItem.getDescription() ) ) );
}
resourceEl.addContent( new Element( "type" ).setText( resolveType() ) );
if ( menuItem != null && pageRequestType == PageRequestType.MENUITEM )
{
Element documentEl = menuItem.getDocumentElementAsClonedJDOMElement();
if ( documentEl != null )
{
resourceEl.addContent( documentEl );
}
}
// Menuitem can be null when rendering a newsletter
if ( menuItem != null )
{
resourceEl.addContent( pathContextXmlCreator.createPathElement( menuItem ) );
}
return resourceEl;
}
private String resolveKey()
{
if ( PageRequestType.CONTENT.equals( pageRequestType ) )
{
return contentFromRequest.getKey().toString();
}
else if ( menuItem != null )
{
return menuItem.getKey().toString();
}
else
{
return pageTemplate.getPageTemplateKey().toString();
}
}
private String resolveResourceType()
{
if ( PageRequestType.CONTENT.equals( pageRequestType ) )
{
return "content";
}
else if ( menuItem != null )
{
return "menuitem";
}
else
{
return "page-template";
}
}
private String resolveType()
{
if ( contentFromRequest != null )
{
return contentFromRequest.getContentType().getName();
}
else if ( menuItem != null )
{
return menuItem.getType().getName();
}
return "";
}
private String asEmptyIfNull( final String value )
{
return value != null ? value : "";
}
}