package net.toodarkpark.util.comparison;

import java.util.*;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections.Predicate;

// is a property equal to at least one of these values?
public class InPredicate implements Predicate
{
	protected Collection values;
	protected Comparator comparator;

	public InPredicate( Collection aList )
	{
		this( null, aList );
	}
	
	public InPredicate( Comparator aComparator, Collection aList )
	{
		super();
		
		comparator = aComparator;
		values = aList;
	}
	
	public boolean evaluate( Object comparison ) throws Exception
	{
		if( comparator == null )
		{
			return values.contains( comparison );
		}
		else
		{
			Iterator iterator = values.iterator();
			boolean isEqual = false;

			// slower than just checking for comparison in values
			while( iterator.hasNext() )
			{
				Object currentObj = iterator.next();

				if( comparator != null )
				{
					isEqual = (comparator.compare( comparison, currentObj ) == 0);
				}
				else
				{
					isEqual = comparison.equals( currentObj );
				}

				// first one to succeed wins $10,000!
				if( isEqual == true )
				{
					return true;
				}
			}
		}

		return false;
	}
}
