package org.mongodb.morphia.query.validation;
import java.util.List;
/**
* Extend this class to provide specific validation for field types for query validation.
*/
public abstract class TypeValidator implements Validator {
/**
* Apply validation for the given field. If the field is not of a type in the list returned by getTypeClasses, the validation is not
* applied and this method returns false. If the type is in the list, then the validate method is called to see if the value is of a
* type that can be applied to the given field type. Errors are appended to the validationFailures list.
*
* @param type the Class of the field being queried
* @param value the value being used for a query
* @param validationFailures the list to add any failures to. If validation passes or {@code appliesTo} returned false, this list will
* not change.
* @return true if validation was applied, false if this validation doesn't apply to this field type.
*/
public boolean apply(final Class<?> type, final Object value,
final List<ValidationFailure> validationFailures) {
if (appliesTo(type)) {
validate(type, value, validationFailures);
return true;
}
return false;
}
/**
* Used by apply to figure out whether to apply the validation or simply return.
*
* @param type the type to be validated
* @return true if this validator applies to this type, false otherwise
*/
protected abstract boolean appliesTo(final Class<?> type);
protected abstract void validate(final Class<?> type, final Object value, final List<ValidationFailure> validationFailures);
}