package org.mongodb.morphia.query.validation;

import org.mongodb.morphia.mapping.MappedField;
import org.mongodb.morphia.query.FilterOperator;

import java.util.List;

Extend this abstract class to provide a way of validating part of a query that contains a FilterOperator. Currently all subclasses of this are final and singletons so this isn't the root of a massive class hierarchy.
/** * Extend this abstract class to provide a way of validating part of a query that contains a {@code FilterOperator}. Currently all * subclasses of this are final and singletons so this isn't the root of a massive class hierarchy. */
public abstract class OperationValidator implements Validator {
Apply validation for the given operator. If the operator does not match the operator required by the implementing class, then this method will return false to show validation was not applied. If the operator is the one being validated, this method will return true, and any failures in validation will be added to the list of validationFailures.
Params:
  • mappedField – the field being queried
  • operator – any FilterOperator for a query
  • value – the query value, to apply the operator to
  • validationFailures – the list to add any failures to. If validation passes or appliesTo returned false, this list will not change.
Returns:true if validation was applied, false if this validation doesn't apply to this operator.
/** * Apply validation for the given operator. If the operator does not match the operator required by the implementing class, then this * method will return false to show validation was not applied. If the operator is the one being validated, this method will return * true, and any failures in validation will be added to the list of {@code validationFailures}. * * @param mappedField the field being queried * @param operator any FilterOperator for a query * @param value the query value, to apply the operator to * @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 operator. */
public boolean apply(final MappedField mappedField, final FilterOperator operator, final Object value, final List<ValidationFailure> validationFailures) { if (getOperator().equals(operator)) { validate(mappedField, value, validationFailures); return true; } return false; }
This method is called by the apply method to determine whether to validate the query. The validator will only work for a single FilterOperator, and this will be returned by this method
Returns:the FilterOperator this validator cares about.
/** * This method is called by the {@code apply} method to determine whether to validate the query. The validator will only work for a * single FilterOperator, and this will be returned by this method * * @return the FilterOperator this validator cares about. */
protected abstract FilterOperator getOperator();
Performs the actual validation, and assumes appliesTo has returned true
Params:
  • mappedField – the field being queried
  • value – the query value, to apply the operator to. This should not be null.
  • validationFailures – the list to add any new ValidationFailures to. If validation passed this list will not change.
/** * Performs the actual validation, and assumes {@code appliesTo} has returned true * * @param mappedField the field being queried * @param value the query value, to apply the operator to. This should not be null. * @param validationFailures the list to add any new {@code ValidationFailures} to. If validation passed this list will not change. */
protected abstract void validate(final MappedField mappedField, final Object value, final List<ValidationFailure> validationFailures); }