/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.contenttype;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import com.enonic.cms.framework.xml.XMLDocument;
import com.enonic.cms.framework.xml.XMLDocumentFactory;
import com.enonic.cms.core.CalendarUtil;
import com.enonic.cms.core.resource.ResourceFolder;
import com.enonic.cms.core.resource.ResourceKey;
public class ContentTypeXmlCreator
{
private boolean includeContentCount = false;
private ResourceFolder resourceRoot = null;
public void includeContentCountInfo( boolean includeContentCount )
{
this.includeContentCount = includeContentCount;
}
public void setResourceRoot( ResourceFolder resourceRoot )
{
this.resourceRoot = resourceRoot;
}
public XMLDocument createContentTypesDocument( List<ContentTypeEntity> contentTypes )
{
final Element root = new Element( "contenttypes" );
for ( ContentTypeEntity contentType : contentTypes )
{
root.addContent( doCreateContentTypeElement( contentType ) );
}
return XMLDocumentFactory.create( new Document( root ) );
}
private Element doCreateContentTypeElement( ContentTypeEntity contentType )
{
final Element elem = new Element( "contenttype" );
setHandlerAttributes( elem, contentType.getContentHandler() );
setDefaultCssAttributes( elem, contentType.getDefaultCssKey() );
elem.setAttribute( "key", String.valueOf( contentType.getKey() ) );
elem.addContent( new Element( "name" ).setText( contentType.getName() ) );
if ( includeContentCount )
{
/* Not implemented yet
int count = getContentCountByContentType( entity.getKey() );
elem.setAttribute( "contentcount", String.valueOf( count ) );
*/
}
elem.addContent( doCreateModuelData( contentType ) );
if ( contentType.getDescription() != null )
{
elem.addContent( new Element( "description" ).setText( contentType.getDescription() ) );
}
elem.addContent( new Element( "timestamp" ).setText( CalendarUtil.formatTimestamp( contentType.getTimestamp(), true ) ) );
return elem;
}
private void setHandlerAttributes( Element elem, ContentHandlerEntity handler )
{
elem.setAttribute( "contenthandlerkey", String.valueOf( handler.getKey() ) );
elem.setAttribute( "handler", handler.getClassName() );
}
private void setDefaultCssAttributes( Element elem, ResourceKey defaultCssKey )
{
if ( defaultCssKey != null )
{
elem.setAttribute( "csskey", defaultCssKey.toString() );
if ( resourceRoot != null )
{
elem.setAttribute( "csskeyexists", resourceRoot.getFile( defaultCssKey.toString() ) != null ? "true" : "false" );
}
}
}
private Element doCreateModuelData( ContentTypeEntity contentType )
{
Element modulDataEl = new Element( "moduledata" );
if ( contentType.getData() != null )
{
Document dataDoc = contentType.getData();
Element dataRootEl = dataDoc.getRootElement();
if ( dataRootEl.getName().equals( "module" ) )
{
modulDataEl.addContent( dataRootEl.detach() );
}
else
{
modulDataEl = (Element) dataRootEl.detach();
}
}
return modulDataEl;
}
}