package org.mongodb.morphia.query.validation;
import java.util.List;
/**
* Provides validation based on the Value in the query
*/
public abstract class ValueValidator implements Validator {
/**
* Applied validation for the given field. If the value does not match the correct type, the validation is not applied and this method
* returns false. If the value is to be validated, then the validate method is called to see if the value and type are compatible.
* Errors are appended to the validationFailures list.
*
* @param type the Class of the field being queried
* @param value the non-null 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 (getRequiredValueType().isAssignableFrom(value.getClass())) {
validate(type, value, validationFailures);
return true;
}
return false;
}
/**
* Used by {@code apply} to figure out whether to apply the validation or simply return.
*
* @return the class the value should be in order to go ahead and perform validation
*/
protected abstract Class<?> getRequiredValueType();
protected abstract void validate(final Class<?> type, final Object value, final List<ValidationFailure> validationFailures);
}