/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.facet.builder;
import org.elasticsearch.search.facet.datehistogram.DateHistogramFacetBuilder;
import org.joda.time.DateTimeZone;
import com.google.common.base.Strings;
import com.enonic.cms.core.search.facet.FacetQueryException;
import com.enonic.cms.core.search.facet.model.DateHistogramFacetModel;
public class ElasticsearchDateHistogramFacetBuilder
extends AbstractElasticsearchFacetBuilder
{
final DateHistogramFacetBuilder build( DateHistogramFacetModel dateHistogramFacetModel )
{
try
{
dateHistogramFacetModel.validate();
}
catch ( Exception e )
{
throw new FacetQueryException( "Error in date histogram-facet definition", e );
}
DateHistogramFacetBuilder builder = new DateHistogramFacetBuilder( dateHistogramFacetModel.getName() );
setField( dateHistogramFacetModel, builder );
setInterval( dateHistogramFacetModel, builder );
setTimeZoneSettings( dateHistogramFacetModel, builder );
return builder;
}
private void setTimeZoneSettings( final DateHistogramFacetModel model, final DateHistogramFacetBuilder builder )
{
if ( Strings.isNullOrEmpty( model.getPreZone() ) )
{
builder.preZone( DateTimeZone.getDefault().getID() );
}
else
{
builder.preZone( model.getPreZone() );
}
if ( !Strings.isNullOrEmpty( model.getPostZone() ) )
{
builder.postZone( model.getPostZone() );
}
builder.preZoneAdjustLargeInterval( true );
}
private void setInterval( final DateHistogramFacetModel dateHistogramFacetModel, final DateHistogramFacetBuilder builder )
{
builder.interval( dateHistogramFacetModel.getInterval() );
}
protected void setField( final DateHistogramFacetModel histogramFacetModel, final DateHistogramFacetBuilder builder )
{
final String indexName = histogramFacetModel.getIndex();
if ( !Strings.isNullOrEmpty( histogramFacetModel.getValueIndex() ) )
{
builder.keyField( createDateFieldName( indexName ) );
builder.valueField( createNumericFieldName( histogramFacetModel.getValueIndex() ) );
}
else
{
builder.field( createDateFieldName( indexName ) );
}
}
}