/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.facet.builder; import org.elasticsearch.search.facet.termsstats.TermsStatsFacet; import org.elasticsearch.search.facet.termsstats.TermsStatsFacetBuilder; import com.google.common.base.Strings; import com.enonic.cms.core.search.facet.FacetQueryException; import com.enonic.cms.core.search.facet.model.TermsStatsFacetModel; import com.enonic.cms.core.search.query.IndexQueryException; public class ElasticsearchTermsStatsFacetBuilder extends AbstractElasticsearchFacetBuilder { final TermsStatsFacetBuilder build( TermsStatsFacetModel termsStatsFacetModel ) { try { termsStatsFacetModel.validate(); } catch ( Exception e ) { throw new FacetQueryException( "Error in terms-stats-facet definition", e ); } TermsStatsFacetBuilder builder = new TermsStatsFacetBuilder( termsStatsFacetModel.getName() ); setField( termsStatsFacetModel, builder ); setSize( termsStatsFacetModel, builder ); setOrder( termsStatsFacetModel, builder ); return builder; } protected void setField( final TermsStatsFacetModel termsStatsFacetModel, final TermsStatsFacetBuilder builder ) { builder.keyField( createQueryFieldName( termsStatsFacetModel.getIndex() ) ); builder.valueField( createNumericFieldName( termsStatsFacetModel.getValueIndex() ) ); } protected void setSize( final TermsStatsFacetModel termsStatsFacetModel, final TermsStatsFacetBuilder builder ) { if ( termsStatsFacetModel.getCount() != null ) { builder.size( termsStatsFacetModel.getCount() ); } } protected void setOrder( final TermsStatsFacetModel termsStatsFacetModel, final TermsStatsFacetBuilder builder ) { final String elasticsearchOrderBy = createElasticsearchOrderByString( termsStatsFacetModel.getFacetOrderBy() ); if ( !Strings.isNullOrEmpty( elasticsearchOrderBy ) ) { final TermsStatsFacet.ComparatorType comparatorType = getTermsFacetComperatorType( elasticsearchOrderBy ); builder.order( comparatorType ); } } private TermsStatsFacet.ComparatorType getTermsFacetComperatorType( final String elasticsearchOrderBy ) { try { return TermsStatsFacet.ComparatorType.valueOf( elasticsearchOrderBy.toUpperCase() ); } catch ( Exception e ) { throw new IndexQueryException( "Parameter value '" + elasticsearchOrderBy + "' not valid order value", e ); } } }