/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.query;
import java.util.Set;
import com.google.common.collect.Sets;
public class QueryFieldAndMultipleValues
extends AbstractQueryFieldAndValue
{
private final Set<QueryValue> queryValues = Sets.newHashSet();
private Boolean isEmpty;
public QueryFieldAndMultipleValues( final String fieldName, final Set<QueryValue> queryValues )
{
super( new QueryField( fieldName ) );
this.queryValues.addAll( queryValues );
}
public Object[] getValues()
{
Set<Object> values = Sets.newHashSet();
if ( isQueryValueNumeric() )
{
for ( QueryValue value : queryValues )
{
if ( !value.isEmpty() )
{
values.add( value.getNumericValue() );
}
}
}
else if ( isQueryOnDateValue() )
{
for ( QueryValue value : queryValues )
{
if ( !value.isEmpty() )
{
values.add( value.getDateTime() );
}
}
}
else
{
for ( QueryValue value : queryValues )
{
if ( !value.isEmpty() )
{
values.add( value.getStringValueNormalized() );
}
}
}
return values.toArray();
}
@Override
protected boolean isQueryOnDateValue()
{
if ( isEmpty() )
{
return false;
}
for ( QueryValue queryValue : queryValues )
{
if ( !queryValue.isEmpty() && !queryValue.isDateTime() )
{
return false;
}
}
return true;
}
@Override
protected boolean isQueryValueNumeric()
{
if ( isEmpty() )
{
return false;
}
for ( QueryValue queryValue : queryValues )
{
if ( !queryValue.isEmpty() && !queryValue.isNumeric() )
{
return false;
}
}
return true;
}
boolean isEmpty()
{
if ( isEmpty == null )
{
isEmpty = getIsEmptyValue();
}
return isEmpty;
}
private boolean getIsEmptyValue()
{
for ( QueryValue queryValue : queryValues )
{
if ( queryValue == null || !queryValue.isEmpty() )
{
return false;
}
}
return true;
}
@Override
protected boolean queryPathIsDateAndValueEmpty()
{
return isDateField() && isEmpty();
}
}