/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.result; import java.util.List; import org.elasticsearch.search.facet.range.RangeFacet; public class RangeFacetResultSetCreator extends AbstractFacetResultSetCreator { protected FacetResultSet create( final String facetName, final RangeFacet facet ) { RangeFacetResultSet rangeFacetResultSet = new RangeFacetResultSet(); rangeFacetResultSet.setName( facetName ); final List<RangeFacet.Entry> entries = facet.getEntries(); for ( RangeFacet.Entry entry : entries ) { rangeFacetResultSet.addResult( createRangeFacetResultEntry( entry ) ); } return rangeFacetResultSet; } private RangeFacetResultEntry createRangeFacetResultEntry( RangeFacet.Entry entry ) { RangeFacetResultEntry rangeFacetResultEntry = new RangeFacetResultEntry(); rangeFacetResultEntry.setFrom( createRangeLimitValue( entry.getFromAsString() ) ); rangeFacetResultEntry.setTo( createRangeLimitValue( entry.getToAsString() ) ); rangeFacetResultEntry.setCount( entry.getCount() ); boolean isNumericFacetResult = isNumericFacetResult( entry ); if ( isNumericFacetResult ) { rangeFacetResultEntry.setMin( entry.getMin() ); rangeFacetResultEntry.setMean( entry.getMean() ); rangeFacetResultEntry.setMax( entry.getMax() ); rangeFacetResultEntry.setTotal( entry.getTotal() ); } return rangeFacetResultEntry; } private String createRangeLimitValue( final String value ) { final Double fromAsNumber = getAsNumber( value ); if ( fromAsNumber == null || !fromAsNumber.isInfinite() ) { return value; } return null; } private boolean isNumericFacetResult( final RangeFacet.Entry entry ) { if ( isNumericAndNotInifinte( entry.getFromAsString() ) || isNumericAndNotInifinte( entry.getToAsString() ) ) { return true; } return false; } private boolean isNumericAndNotInifinte( final String value ) { final Double asNumber = getAsNumber( value ); return asNumber != null && !asNumber.isInfinite(); } public Double getAsNumber( String value ) { try { return new Double( value ); } catch ( NumberFormatException e ) { return null; } } }