/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import org.jdom.Document;
import org.jdom.Element;
import com.enonic.cms.framework.util.JDOMUtil;
import com.enonic.cms.core.content.ContentEntity;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.content.ContentStatus;
import com.enonic.cms.core.content.ContentVersionEntity;
import com.enonic.cms.core.content.ContentVersionKey;
import com.enonic.cms.core.content.binary.BinaryDataEntity;
import com.enonic.cms.core.content.binary.ContentBinaryDataEntity;
import com.enonic.cms.core.content.binary.ContentBinaryDataKey;
import com.enonic.cms.core.content.category.CategoryEntity;
import com.enonic.cms.core.content.category.CategoryKey;
import com.enonic.cms.core.content.contentdata.custom.BinaryDataEntry;
import com.enonic.cms.core.content.contentdata.custom.CustomContentData;
import com.enonic.cms.core.content.contentdata.custom.DateDataEntry;
import com.enonic.cms.core.content.contentdata.custom.stringbased.TextDataEntry;
import com.enonic.cms.core.content.contenttype.ContentHandlerEntity;
import com.enonic.cms.core.content.contenttype.ContentHandlerName;
import com.enonic.cms.core.content.contenttype.ContentTypeConfig;
import com.enonic.cms.core.content.contenttype.ContentTypeConfigParser;
import com.enonic.cms.core.content.contenttype.ContentTypeEntity;
import com.enonic.cms.core.content.contenttype.dataentryconfig.DataEntryConfig;
import com.enonic.cms.core.content.contenttype.dataentryconfig.DataEntryConfigType;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: 11/29/11
* Time: 3:11 PM
*/
public class ContentTestDataBuilder
{
private ContentTypeConfig config;
private Document standardConfigDoc;
private ContentEntity content;
public void buildConfig( String configXml )
throws Exception
{
this.standardConfigDoc = JDOMUtil.parseDocument( configXml.toString() );
this.config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, getStandardConfigRoot() );
}
public ContentTestDataBuilder createContent( int key, String name )
{
ContentHandlerEntity contentHandler = new ContentHandlerEntity();
contentHandler.setClassName( ContentHandlerName.CUSTOM.getHandlerClassShortName() );
ContentTypeEntity contentType = new ContentTypeEntity();
contentType.setContentHandler( contentHandler );
contentType.setData( this.getStandardConfigDoc() );
CategoryEntity cat = new CategoryEntity();
cat.setKey( new CategoryKey( "1" ) );
cat.setContentType( contentType );
final Date now = Calendar.getInstance().getTime();
ContentEntity content = new ContentEntity();
content.setCategory( cat );
content.setKey( new ContentKey( key ) );
content.setName( name );
content.setAvailableFrom( now );
content.setCreatedAt( now );
this.content = content;
return this;
}
public ContentTestDataBuilder addMainVersion( int key, ContentStatus status )
{
ContentVersionEntity contentVersion = new ContentVersionEntity();
contentVersion.setKey( new ContentVersionKey( key ) );
contentVersion.setStatus( status );
this.content.setMainVersion( contentVersion );
this.content.addVersion( contentVersion );
return this;
}
public ContentTestDataBuilder addCustomContent( Map<String, Object> contentDataMap )
{
CustomContentData contentData = new CustomContentData( config );
for ( String dataEntryName : contentDataMap.keySet() )
{
DataEntryConfig dataEntryConfig = config.getInputConfig( dataEntryName );
if ( dataEntryConfig == null )
{
throw new IllegalArgumentException(
"Input with name: " + dataEntryName + " not found in config. Please check your config" );
}
if ( dataEntryConfig.getType().equals( DataEntryConfigType.TEXT ) )
{
contentData.add( new TextDataEntry( dataEntryConfig, contentDataMap.get( dataEntryName ).toString() ) );
}
if ( dataEntryConfig.getType().equals( DataEntryConfigType.DATE ) )
{
contentData.add( new DateDataEntry( dataEntryConfig, (Date) contentDataMap.get( dataEntryName ) ) );
}
if ( dataEntryConfig.getType().equals( DataEntryConfigType.BINARY ) )
{
contentData.add( new BinaryDataEntry( dataEntryConfig, contentDataMap.get( dataEntryName ).toString() ) );
}
}
this.content.getMainVersion().setContentData( contentData );
return this;
}
public ContentTestDataBuilder addBinaryData( int key, String blobKey )
{
ContentBinaryDataEntity contentBinaryData = new ContentBinaryDataEntity();
contentBinaryData.setKey( new ContentBinaryDataKey( key ) );
contentBinaryData.setLabel( "source" );
BinaryDataEntity binaryData = new BinaryDataEntity();
binaryData.setKey( key );
binaryData.setBlobKey( blobKey );
contentBinaryData.setBinaryData( binaryData );
this.content.getMainVersion().addContentBinaryData( contentBinaryData );
return this;
}
public DataEntryConfig getDataEntryConfig( String dataEntryName )
{
return this.config.getInputConfig( dataEntryName );
}
private Element getStandardConfigRoot()
{
return this.standardConfigDoc.getRootElement();
}
public ContentTypeConfig getConfig()
{
return config;
}
public void setConfig( ContentTypeConfig config )
{
this.config = config;
}
public Document getStandardConfigDoc()
{
return standardConfigDoc;
}
public void setStandardConfigDoc( Document standardConfigDoc )
{
this.standardConfigDoc = standardConfigDoc;
}
public ContentEntity build()
{
return this.content;
}
}