package com.googlecode.objectify.condition;
import com.googlecode.objectify.ObjectifyFactory;
/**
* <p>A simple interface that defines a condition test for a field value or whole
* entity. For example, you could have a class that tests against null values called IfNull.
* This interface is used by the @IgnoreSave, @Index, and @Unindex annotations.</p>
*
* <p>The matching engine will call both methods; if either return true the condition
* is considered true.</p>
*
* <p>All implementations of this interface will be created with {@code ObjectifyFactory.construct()}.
* If the implementation also implements the {@code InitializeIf} interface, the {@code init()} method
* will be called immediately after construction.</p>
*
* @see InitializeIf
* @see ObjectifyFactory#construct(Class)
*
* @author Jeff Schnitzer <jeff@infohazard.org>
*/
public interface If<V, P>
{
/**
* Test a simple property value.
*
* @param value is the actual value of a particular field
* @return true if the value matches the condition defined by an instance of this interface.
*/
public boolean matchesValue(V value);
/**
* Override this method to test a whole pojo for your condition. The pojo might
* be an entity or an embedded class object - whichever holds the field being tested.
*
* @param pojo is the entity object on which the field/value exists
* @return true if the value matches the condition defined by an instance of this interface.
*/
public boolean matchesPojo(P pojo);
}