com.enonic.cms.core.search.query.QueryValue.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.core.search.query.QueryValue.java

Source

/*
 * Copyright 2000-2013 Enonic AS
 * http://www.enonic.com/license
 */

package com.enonic.cms.core.search.query;

import org.apache.commons.lang.StringUtils;
import org.joda.time.DateTimeZone;
import org.joda.time.MutableDateTime;
import org.joda.time.ReadableDateTime;

import com.enonic.cms.core.search.ElasticSearchFormatter;

public class QueryValue {
    private final Number numericValue;

    private final String stringValue;

    private final ReadableDateTime dateTimeValue;

    public QueryValue(final Object value) {
        if (value instanceof Number) {
            numericValue = (Number) value;
            stringValue = doNormalizeString(value.toString());
            dateTimeValue = null;
        } else if (value instanceof ReadableDateTime) {
            dateTimeValue = toUTCTimeZone((ReadableDateTime) value);
            stringValue = doNormalizeString(
                    ElasticSearchFormatter.formatDateAsStringIgnoreTimezone((ReadableDateTime) value));
            numericValue = null;
        } else {
            stringValue = doNormalizeString(value == null ? "" : value.toString());
            numericValue = null;
            dateTimeValue = null;
        }
    }

    public Double getNumericValue() {
        return numericValue != null ? numericValue.doubleValue() : null;
    }

    public boolean isNumeric() {
        return numericValue != null;
    }

    public ReadableDateTime getDateTime() {
        return dateTimeValue;
    }

    public boolean isDateTime() {
        return dateTimeValue != null;
    }

    public String getStringValueNormalized() {
        if (isWildcardValue()) {
            return getWildcardValue();
        }

        return stringValue != null ? StringUtils.lowerCase(stringValue) : null;
    }

    boolean isWildcardValue() {
        return StringUtils.contains(this.stringValue, "%");
    }

    String getWildcardValue() {
        final String replacedWildcardsString = StringUtils.replace(this.stringValue, "%", "*");
        return StringUtils.lowerCase(replacedWildcardsString);
    }

    private String doNormalizeString(final String stringValue) {
        return StringUtils.lowerCase(stringValue);
    }

    public boolean isEmpty() {
        return StringUtils.isBlank(stringValue) && dateTimeValue == null && numericValue == null;
    }

    private ReadableDateTime toUTCTimeZone(final ReadableDateTime dateTime) {
        if (DateTimeZone.UTC.equals(dateTime.getZone())) {
            return dateTime;
        }
        final MutableDateTime dateInUTC = dateTime.toMutableDateTime();
        dateInUTC.setZone(DateTimeZone.UTC);
        return dateInUTC.toDateTime();
    }
}