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