Author: rwhitcomb Date: Mon Apr 14 19:12:33 2014 New Revision: 1587287 URL: http://svn.apache.org/r1587287 Log: Some fixes for validators: * Minor typo in an error message in ComparableRangeValidator * Change the comparison logic in IntRangeValidator to use BigInteger for all compares, so that hugely out-of-range values will be correctly flagged (esp. for the default min/max of Integer.MIN_VALUE or MAX_VALUE) * Clone IntRangeValidator to a new LongRangeValidator.
Added: pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/LongRangeValidator.java Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/ComparableRangeValidator.java pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/IntRangeValidator.java Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/ComparableRangeValidator.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/ComparableRangeValidator.java?rev=1587287&r1=1587286&r2=1587287&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/ComparableRangeValidator.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/ComparableRangeValidator.java Mon Apr 14 19:12:33 2014 @@ -63,7 +63,7 @@ public class ComparableRangeValidator<T public void setMaximum(T maxValue) { if (minValue == null) { - throw new IllegalArgumentException("minValue must be not null"); + throw new IllegalArgumentException("maxValue must be not null"); } this.maxValue = maxValue; } Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/IntRangeValidator.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/IntRangeValidator.java?rev=1587287&r1=1587286&r2=1587287&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/IntRangeValidator.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/IntRangeValidator.java Mon Apr 14 19:12:33 2014 @@ -13,12 +13,13 @@ */ package org.apache.pivot.wtk.validation; +import java.math.BigInteger; import java.util.Locale; /** - * A validator for an int value limited to a range. <p> Beware that usual math - * rules for native primitive types (and related approximations) are applied - * here. + * A validator for an <tt>int</tt> value limited to a range. + * <p> {@link BigInteger} math is used here so that proper checks against + * the limits of the type can be done. * * @see ComparableRangeValidator */ @@ -68,14 +69,13 @@ public class IntRangeValidator extends I boolean valid = false; if (super.isValid(text)) { - final int i = textToObject(text); - valid = (i >= minValue && i <= maxValue); + BigInteger min = BigInteger.valueOf((long)minValue); + BigInteger max = BigInteger.valueOf((long)maxValue); + BigInteger value = new BigInteger(text); + valid = value.compareTo(min) >= 0 && value.compareTo(max) <= 0; } return valid; } - private final Integer textToObject(String text) { - return parseNumber(text).intValue(); - } } Added: pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/LongRangeValidator.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/LongRangeValidator.java?rev=1587287&view=auto ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/LongRangeValidator.java (added) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/validation/LongRangeValidator.java Mon Apr 14 19:12:33 2014 @@ -0,0 +1,81 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.pivot.wtk.validation; + +import java.math.BigInteger; +import java.util.Locale; + +/** + * A validator for a <tt>long</tt> value limited to a range. + * <p> {@link BigInteger} math is used here so that proper checks against + * the limits of the type can be done. + * + * @see ComparableRangeValidator + */ +public class LongRangeValidator extends IntValidator { + private long minValue, maxValue; + + public LongRangeValidator() { + this.minValue = Long.MIN_VALUE; + this.maxValue = Long.MAX_VALUE; + } + + public LongRangeValidator(Locale locale) { + super(locale); + this.minValue = Long.MIN_VALUE; + this.maxValue = Long.MAX_VALUE; + } + + public LongRangeValidator(long minValue, long maxValue) { + this.minValue = minValue; + this.maxValue = maxValue; + } + + public LongRangeValidator(Locale locale, long minValue, long maxValue) { + super(locale); + this.minValue = minValue; + this.maxValue = maxValue; + } + + public long getMinimum() { + return minValue; + } + + public void setMinimum(long minValue) { + this.minValue = minValue; + } + + public long getMaximum() { + return maxValue; + } + + public void setMaximum(long maxValue) { + this.maxValue = maxValue; + } + + @Override + public boolean isValid(String text) { + boolean valid = false; + + if (super.isValid(text)) { + BigInteger min = BigInteger.valueOf(minValue); + BigInteger max = BigInteger.valueOf(maxValue); + BigInteger value = new BigInteger(text); + valid = value.compareTo(min) >= 0 && value.compareTo(max) <= 0; + } + + return valid; + } + +}