/*
@VaadinApache2LicenseForJavaFiles@
*/
package com.vaadin.data.validator;
/**
* An base implementation for validating any objects that implement
* {@link Comparable}.
*
* Verifies that the value is of the given type and within the (optionally)
* given limits. Typically you want to use a sub class of this like
* {@link IntegerRangeValidator}, {@link DoubleRangeValidator} or
* {@link DateRangeValidator} in applications.
*
* Note that {@link RangeValidator} always accept null values. Make a field
* required to ensure that no empty values are accepted or override
* {@link #isValidValue(Comparable)}.
*
*
* @param
* The type of Number to validate. Must implement Comparable so that
* minimum and maximum checks work.
* @author Vaadin Ltd.
* @since 7.0
*/
public class RangeValidator extends AbstractValidator {
private T minValue = null;
private boolean minValueIncluded = true;
private T maxValue = null;
private boolean maxValueIncluded = true;
private Class type;
/**
* Creates a new range validator of the given type.
*
* @param errorMessage
* The error message to use if validation fails
* @param type
* The type of object the validator can validate.
* @param minValue
* The minimum value that should be accepted or null for no limit
* @param maxValue
* The maximum value that should be accepted or null for no limit
*/
public RangeValidator(String errorMessage, Class type, T minValue,
T maxValue) {
super(errorMessage);
this.type = type;
this.minValue = minValue;
this.maxValue = maxValue;
}
/**
* Checks if the minimum value is part of the accepted range
*
* @return true if the minimum value is part of the range, false otherwise
*/
public boolean isMinValueIncluded() {
return minValueIncluded;
}
/**
* Sets if the minimum value is part of the accepted range
*
* @param minValueIncluded
* true if the minimum value should be part of the range, false
* otherwise
*/
public void setMinValueIncluded(boolean minValueIncluded) {
this.minValueIncluded = minValueIncluded;
}
/**
* Checks if the maximum value is part of the accepted range
*
* @return true if the maximum value is part of the range, false otherwise
*/
public boolean isMaxValueIncluded() {
return maxValueIncluded;
}
/**
* Sets if the maximum value is part of the accepted range
*
* @param maxValueIncluded
* true if the maximum value should be part of the range, false
* otherwise
*/
public void setMaxValueIncluded(boolean maxValueIncluded) {
this.maxValueIncluded = maxValueIncluded;
}
/**
* Gets the minimum value of the range
*
* @return the minimum value
*/
public T getMinValue() {
return minValue;
}
/**
* Sets the minimum value of the range. Use
* {@link #setMinValueIncluded(boolean)} to control whether this value is
* part of the range or not.
*
* @param minValue
* the minimum value
*/
public void setMinValue(T minValue) {
this.minValue = minValue;
}
/**
* Gets the maximum value of the range
*
* @return the maximum value
*/
public T getMaxValue() {
return maxValue;
}
/**
* Sets the maximum value of the range. Use
* {@link #setMaxValueIncluded(boolean)} to control whether this value is
* part of the range or not.
*
* @param maxValue
* the maximum value
*/
public void setMaxValue(T maxValue) {
this.maxValue = maxValue;
}
/*
* (non-Javadoc)
*
* @see
* com.vaadin.data.validator.AbstractValidator#isValidValue(java.lang.Object
* )
*/
@Override
protected boolean isValidValue(T value) {
if (value == null) {
return true;
}
if (getMinValue() != null) {
// Ensure that the min limit is ok
int result = value.compareTo(getMinValue());
if (result < 0) {
// value less than min value
return false;
} else if (result == 0 && !isMinValueIncluded()) {
// values equal and min value not included
return false;
}
}
if (getMaxValue() != null) {
// Ensure that the Max limit is ok
int result = value.compareTo(getMaxValue());
if (result > 0) {
// value greater than max value
return false;
} else if (result == 0 && !isMaxValueIncluded()) {
// values equal and max value not included
return false;
}
}
return true;
}
/*
* (non-Javadoc)
*
* @see com.vaadin.data.validator.AbstractValidator#getType()
*/
@Override
public Class getType() {
return type;
}
}