/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content;
import java.util.Date;
import org.jdom.Element;
import com.enonic.cms.core.CmsDateAndTimeFormats;
import com.enonic.cms.core.content.category.CategoryEntity;
import com.enonic.cms.core.content.category.UnitEntity;
import com.enonic.cms.core.content.contenttype.ContentHandlerEntity;
import com.enonic.cms.core.content.contenttype.ContentTypeEntity;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
/**
* Jun 17, 2009
*/
public class ContentTitleXmlCreator
{
private Date onlineCheckDate;
private boolean includeSectionInfo = false;
private MenuItemEntity currentSection;
public ContentTitleXmlCreator( Date onlineCheckDate )
{
this.onlineCheckDate = onlineCheckDate;
}
public void setIncludeIsInHomeSectionInfo( boolean includeIsInHomeSectionInfo, MenuItemEntity currentSection )
{
this.includeSectionInfo = includeIsInHomeSectionInfo;
this.currentSection = currentSection;
}
public Element createContentTitleElement( ContentEntity content )
{
return doCreateContentTitleElement( content, "contenttitle" );
}
public Element createTotalContentTitleElement( ContentEntity content )
{
return doCreateContentTitleElement( content, "totalcontent" );
}
private Element doCreateContentTitleElement( ContentEntity content, String elementName )
{
ContentVersionEntity mainVersion = content.getMainVersion();
CategoryEntity category = content.getCategory();
UnitEntity unit = category.getUnitExcludeDeleted();
ContentTypeEntity contentType = category.getContentType();
ContentHandlerEntity contentHandler = contentType.getContentHandler();
Element el = new Element( elementName );
el.setAttribute( "key", content.getKey().toString() );
el.setAttribute( "categorykey", category.getKey().toString() );
el.setAttribute( "unitkey", unit.getKey().toString() );
el.setAttribute( "contenttypekey", String.valueOf( contentType.getKey() ) );
el.setAttribute( "contenthandlerkey", String.valueOf( contentHandler.getKey() ) );
el.setAttribute( "contenthandler-class-name", contentHandler.getClassName() );
setDateAttributeConditional( el, "publishfrom", content.getAvailableFrom() );
setDateAttributeConditional( el, "publishto", content.getAvailableTo() );
setDateAttributeConditional( el, "timestamp", mainVersion.getModifiedAt() );
el.setAttribute( "state", Integer.toString( mainVersion.getState( onlineCheckDate ) ) );
el.setAttribute( "status", Integer.toString( mainVersion.getStatus().getKey() ) );
el.setAttribute( "has-draft", Boolean.toString( content.hasDraft() ) );
el.setAttribute( "draft-key", content.hasDraft() ? content.getDraftVersion().getKey().toString() : "" );
el.setAttribute( "path-to-content", content.getPathAsString() );
if ( includeSectionInfo )
{
boolean isActivatedInSection = content.isActiviatedInSection( currentSection );
ContentLocationSpecification contentLocationSpecification = new ContentLocationSpecification();
contentLocationSpecification.setSiteKey( currentSection.getSite().getKey() );
contentLocationSpecification.setIncludeInactiveLocationsInSection( true );
ContentLocations contentLocations = content.getLocations( contentLocationSpecification );
ContentLocation homeLocation = contentLocations.getHomeLocation( currentSection.getSite().getKey() );
if ( homeLocation != null && homeLocation.isLocationFor( currentSection ) )
{
el.setAttribute( "is-home", "true" );
}
else
{
el.setAttribute( "is-home", "false" );
if ( homeLocation != null && homeLocation.getType() == ContentLocationType.MENUITEM )
{
el.setAttribute( "is-link-to-menuitem", "true" );
}
}
el.setAttribute( "approved", Boolean.toString( isActivatedInSection ) );
}
el.setText( mainVersion.getTitle() );
return el;
}
private static void setDateAttributeConditional( Element el, String attribute, Date date )
{
if ( date != null )
{
el.setAttribute( attribute, CmsDateAndTimeFormats.printAs_XML_DATE( date ) );
}
}
}