com.enonic.cms.core.search.result.RangeFacetResultSetXmlCreator.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.core.search.result.RangeFacetResultSetXmlCreator.java

Source

/*
 * 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;
        }
    }
}