/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.builder;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.enonic.cms.core.content.index.UserDefinedField;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: 2/1/12
* Time: 3:18 PM
*/
public class ContentIndexDataCustomDataFactory
extends IndexFieldNameConstants
{
public void create( final ContentIndexData contentIndexData, final Collection<UserDefinedField> userDefinedFields )
{
final Set<String> allUserdataFieldValues = new HashSet<String>();
final List<String> handledFieldNames = Lists.newArrayList();
for ( final UserDefinedField userDefinedField : userDefinedFields )
{
final String fieldName = userDefinedField.getName();
final boolean alreadyHandledThisField = handledFieldNames.contains( fieldName );
if ( alreadyHandledThisField )
{
continue;
}
final Set<String> allValuesForField = getAllValuesForFieldName( fieldName, userDefinedFields );
contentIndexData.addContentIndexDataElement( fieldName, allValuesForField );
allUserdataFieldValues.addAll( allValuesForField );
handledFieldNames.add( fieldName );
}
addAllUserdataField( contentIndexData, allUserdataFieldValues );
}
private Set<String> getAllValuesForFieldName( String fieldName, final Collection<UserDefinedField> userDefinedFields )
{
final Set<String> values = Sets.newTreeSet();
for ( final UserDefinedField userDefinedField : userDefinedFields )
{
if ( fieldName.equals( userDefinedField.getName() ) )
{
values.add( userDefinedField.getValue().getText() );
}
}
return values;
}
private void addAllUserdataField( final ContentIndexData contentIndexData, final Set<String> allUserdataValue )
{
contentIndexData.addContentIndexDataElement( ALL_USERDATA_FIELDNAME, allUserdataValue, false );
}
}