/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.result;
import java.util.Set;
import org.jdom.Element;
import org.joda.time.DateTime;
import com.enonic.cms.core.CmsDateAndTimeFormats;
import com.enonic.cms.core.search.ElasticSearchFormatter;
public class RangeFacetResultSetXmlCreator
extends AbstractFacetResultXmlCreator
{
public Element create( RangeFacetResultSet rangeFacet )
{
final Element rangeFacetRootElement = createFacetRootElement( "ranges", rangeFacet );
final Set<RangeFacetResultEntry> resultEntries = rangeFacet.getResultEntries();
for ( RangeFacetResultEntry result : resultEntries )
{
Element resultEl = new Element( "range" );
addAttributeIfNotNull( resultEl, "hits", result.getCount() );
addAttributeIfNotNull( resultEl, "from", getFacetRangeValueAsFormattedString( result.getFrom() ) );
addAttributeIfNotNull( resultEl, "to", getFacetRangeValueAsFormattedString( result.getTo() ) );
addAttributeIfNotNull( resultEl, "min", result.getMin() );
addAttributeIfNotNull( resultEl, "mean", result.getMean() );
addAttributeIfNotNull( resultEl, "max", result.getMax() );
addAttributeIfNotNull( resultEl, "sum", result.getTotal() );
rangeFacetRootElement.addContent( resultEl );
}
return rangeFacetRootElement;
}
private String getFacetRangeValueAsFormattedString( final String valueString )
{
if ( valueString == null )
{
return null;
}
if ( isNumber( valueString ) )
{
return valueString;
}
final DateTime parsedDateTime = ElasticSearchFormatter.parseStringAsElasticsearchDateOptionalTimeFormat( valueString );
if ( parsedDateTime != null )
{
return CmsDateAndTimeFormats.printAs_XML_TIMESTAMP( parsedDateTime.toLocalDateTime().toDate() );
}
return null;
}
private boolean isNumber( String value )
{
try
{
new Double( value );
return true;
}
catch ( NumberFormatException e )
{
// do Nothing
return false;
}
}
}