package rocks.inspectit.shared.cs.cmr.property.configuration.validator; import java.util.Collections; import rocks.inspectit.shared.cs.cmr.property.configuration.SingleProperty; import rocks.inspectit.shared.cs.cmr.property.configuration.validation.PropertyValidation; import rocks.inspectit.shared.cs.cmr.property.configuration.validation.ValidationError; /** * Abstract class for property validation. * * @author Ivan Senic * * @param <T> */ public abstract class AbstractSinglePropertyValidator<T> { /** * Proves that the given value is valid. * * @param value * Value to check. * @return True if value is valid to the validator, false otherwise. */ protected abstract boolean prove(T value); /** * Returns error message to put to the {@link ValidationError} when creating one. * * @param property * {@link SingleProperty} validation failed for. * @return Returns error message. */ protected abstract String getErrorMessage(SingleProperty<? extends T> property); /** * {@inheritDoc} */ public void validate(SingleProperty<? extends T> property, PropertyValidation propertyValidation) { if (!prove(property.getValue())) { addValidationError(property, propertyValidation, getErrorMessage(property)); } } /** * {@inheritDoc} */ public void validateForValue(SingleProperty<? extends T> property, PropertyValidation propertyValidation, T value) { if (!prove(value)) { addValidationError(property, propertyValidation, getErrorMessage(property)); } } /** * Adds {@link ValidationError} to the {@link PropertyValidation}. * * @param property * {@link SingleProperty} being validated. * @param propertyValidation * {@link PropertyValidation} to add error to. * @param message * Message to add to {@link ValidationError}. */ private void addValidationError(SingleProperty<? extends T> property, PropertyValidation propertyValidation, String message) { ValidationError validationError = new ValidationError(Collections.<SingleProperty<?>> singletonList(property), message); propertyValidation.addValidationError(validationError); } }