/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.builder; import java.util.Date; import java.util.Set; import org.apache.commons.lang.StringUtils; import com.google.common.collect.Sets; public class ContentIndexDataFieldValueSetFactory extends IndexFieldNameConstants { public static Set<ContentIndexDataFieldAndValue> create( ContentIndexDataElement element ) { final Set<ContentIndexDataFieldAndValue> contentIndexDataFieldAndValues = Sets.newHashSet(); addStringFieldValue( element, contentIndexDataFieldAndValues ); addNumericFieldValue( element, contentIndexDataFieldAndValues ); addDateFieldValue( element, contentIndexDataFieldAndValues ); if ( !contentIndexDataFieldAndValues.isEmpty() ) { addOrderbyValue( element, contentIndexDataFieldAndValues ); } return contentIndexDataFieldAndValues; } private static void addStringFieldValue( ContentIndexDataElement element, final Set<ContentIndexDataFieldAndValue> set ) { final Set<String> elementStringValues = element.getStringValues(); if ( elementStringValues != null && !elementStringValues.isEmpty() ) { set.add( new ContentIndexDataFieldAndValue( element.getFieldBaseName(), elementStringValues ) ); } } private static void addNumericFieldValue( ContentIndexDataElement element, final Set<ContentIndexDataFieldAndValue> contentIndexDataFieldAndValues ) { final Set<Double> elementNumericValues = element.getNumericValues(); if ( elementNumericValues != null && !elementNumericValues.isEmpty() ) { contentIndexDataFieldAndValues.add( new ContentIndexDataFieldAndValue( element.getFieldBaseName() + INDEX_FIELD_TYPE_SEPARATOR + NUMBER_FIELD_POSTFIX, elementNumericValues ) ); } } private static void addDateFieldValue( ContentIndexDataElement element, final Set<ContentIndexDataFieldAndValue> contentIndexDataFieldAndValues ) { final Set<Date> elementDateTimeValues = element.getDateTimeValues(); if ( elementDateTimeValues != null && !elementDateTimeValues.isEmpty() ) { contentIndexDataFieldAndValues.add( new ContentIndexDataFieldAndValue( element.getFieldBaseName() + INDEX_FIELD_TYPE_SEPARATOR + DATE_FIELD_POSTFIX, elementDateTimeValues ) ); } } private static void addOrderbyValue( ContentIndexDataElement element, final Set<ContentIndexDataFieldAndValue> contentIndexDataFieldAndValues ) { final String elementOrderBy = element.getOrderBy(); if ( StringUtils.isNotBlank( elementOrderBy ) ) { contentIndexDataFieldAndValues.add( new ContentIndexDataFieldAndValue( element.getFieldBaseName() + INDEX_FIELD_TYPE_SEPARATOR + ORDERBY_FIELDNAME_POSTFIX, elementOrderBy ) ); } } }