You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by rw...@apache.org on 2014/04/14 21:12:33 UTC

svn commit: r1587287 - in /pivot/trunk/wtk/src/org/apache/pivot/wtk/validation: ComparableRangeValidator.java IntRangeValidator.java LongRangeValidator.java

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;
+    }
+
+}