/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.facet.builder;
import java.util.Set;
import org.elasticsearch.search.facet.FacetBuilder;
import com.google.common.collect.Sets;
import com.enonic.cms.core.search.facet.model.DateHistogramFacetModel;
import com.enonic.cms.core.search.facet.model.FacetModel;
import com.enonic.cms.core.search.facet.model.FacetsModel;
import com.enonic.cms.core.search.facet.model.HistogramFacetModel;
import com.enonic.cms.core.search.facet.model.RangeFacetModel;
import com.enonic.cms.core.search.facet.model.TermsFacetModel;
import com.enonic.cms.core.search.facet.model.TermsStatsFacetModel;
public class ElasticsearchFacetBuilder
{
private final ElasticsearchTermsFacetBuilder termFacetBuilder = new ElasticsearchTermsFacetBuilder();
private final ElasticsearchRangeFacetBuilder rangeFacetBuilder = new ElasticsearchRangeFacetBuilder();
private final ElasticsearchHistogramFacetBuilder histogramFacetBuilder = new ElasticsearchHistogramFacetBuilder();
private final ElasticsearchDateHistogramFacetBuilder dateHistogramFacetBuilder = new ElasticsearchDateHistogramFacetBuilder();
private final ElasticsearchTermsStatsFacetBuilder termsStatsFacetBuilder = new ElasticsearchTermsStatsFacetBuilder();
public Set<FacetBuilder> build( FacetsModel facetsModel )
{
Set<FacetBuilder> facetBuilders = Sets.newHashSet();
final Set<FacetModel> facetModels = facetsModel.getFacetModels();
for ( FacetModel model : facetModels )
{
if ( model instanceof TermsFacetModel )
{
facetBuilders.add( termFacetBuilder.build( (TermsFacetModel) model ) );
}
else if ( model instanceof RangeFacetModel )
{
facetBuilders.add( rangeFacetBuilder.build( (RangeFacetModel) model ) );
}
else if ( model instanceof HistogramFacetModel )
{
facetBuilders.add( histogramFacetBuilder.build( (HistogramFacetModel) model ) );
}
else if ( model instanceof DateHistogramFacetModel )
{
facetBuilders.add( dateHistogramFacetBuilder.build( (DateHistogramFacetModel) model ) );
}
else if ( model instanceof TermsStatsFacetModel )
{
facetBuilders.add( termsStatsFacetBuilder.build( (TermsStatsFacetModel) model ) );
}
}
return facetBuilders;
}
}