You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2018/03/16 22:59:06 UTC

[06/12] bval git commit: refactor decimal min/max constraints and support new #inclusive() members of associated constraints

refactor decimal min/max constraints and support new #inclusive() members of associated constraints


Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/e34b20bb
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/e34b20bb
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/e34b20bb

Branch: refs/heads/bv2
Commit: e34b20bb8eea81685b25f9aefeabe8575f17c28a
Parents: 0bf9b3a
Author: Matt Benson <mb...@apache.org>
Authored: Fri Mar 16 17:52:06 2018 -0500
Committer: Matt Benson <mb...@apache.org>
Committed: Fri Mar 16 17:52:06 2018 -0500

----------------------------------------------------------------------
 .../bval/constraints/DecimalMaxValidator.java   | 75 ++++++++++++++++++++
 .../DecimalMaxValidatorForNumber.java           | 56 ---------------
 .../DecimalMaxValidatorForString.java           | 54 --------------
 .../bval/constraints/DecimalMinValidator.java   | 75 ++++++++++++++++++++
 .../DecimalMinValidatorForNumber.java           | 56 ---------------
 .../DecimalMinValidatorForString.java           | 56 ---------------
 .../bval/jsr/DefaultConstraints.properties      | 10 +--
 7 files changed, 156 insertions(+), 226 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/e34b20bb/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidator.java
new file mode 100644
index 0000000..1862168
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidator.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.bval.constraints;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.DecimalMax;
+
+public abstract class DecimalMaxValidator<T> implements ConstraintValidator<DecimalMax, T> {
+    public static class ForString extends DecimalMaxValidator<String> {
+        @Override
+        public boolean isValid(String value, ConstraintValidatorContext context) {
+            return value == null || isValid(new BigDecimal(value));
+        }
+    }
+
+    public static class ForNumber extends DecimalMaxValidator<Number> {
+        @Override
+        public boolean isValid(Number value, ConstraintValidatorContext context) {
+            if (value == null) {
+                return true;
+            }
+            final BigDecimal bigValue;
+            if (value instanceof BigDecimal) {
+                bigValue = (BigDecimal) value;
+            } else if (value instanceof BigInteger) {
+                bigValue = new BigDecimal((BigInteger) value);
+            } else {
+                bigValue = new BigDecimal(value.doubleValue());
+            }
+            return isValid(bigValue);
+        }
+    }
+
+    private BigDecimal maxValue;
+    private boolean inclusive;
+
+    @Override
+    public void initialize(DecimalMax annotation) {
+        try {
+            this.maxValue = new BigDecimal(annotation.value());
+        } catch (NumberFormatException nfe) {
+            throw new IllegalArgumentException(annotation.value() + " does not represent a valid BigDecimal format");
+        }
+        this.inclusive = annotation.inclusive();
+    }
+
+    protected boolean isValid(BigDecimal value) {
+        // null values are valid
+        if (value == null) {
+            return true;
+        }
+        final int comparison = value.compareTo(maxValue);
+        return comparison < 0 || inclusive && comparison == 0;
+    }
+}

http://git-wip-us.apache.org/repos/asf/bval/blob/e34b20bb/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
deleted file mode 100644
index 725613c..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForNumber.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.bval.constraints;
-
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.constraints.DecimalMax;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/** Description: validate that number-value of passed object is <= maxvalue<br/> */
-public class DecimalMaxValidatorForNumber implements ConstraintValidator<DecimalMax, Number> {
-
-    private BigDecimal maxValue;
-
-    @Override
-    public void initialize(DecimalMax annotation) {
-        try {
-            this.maxValue = new BigDecimal(annotation.value());
-        } catch (NumberFormatException nfe) {
-            throw new IllegalArgumentException(annotation.value() + " does not represent a valid BigDecimal format");
-        }
-    }
-
-    @Override
-    public boolean isValid(Number value, ConstraintValidatorContext context) {
-        if (value == null) {
-            return true;
-        }
-        BigDecimal bigValue;
-        if (value instanceof BigDecimal) {
-            bigValue = (BigDecimal) value;
-        } else if (value instanceof BigInteger) {
-            bigValue = new BigDecimal((BigInteger) value);
-        } else {
-            bigValue = new BigDecimal(value.doubleValue());
-        }
-        return bigValue.compareTo(maxValue) < 1;
-    }
-}

http://git-wip-us.apache.org/repos/asf/bval/blob/e34b20bb/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
deleted file mode 100644
index cb0e232..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMaxValidatorForString.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.bval.constraints;
-
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.constraints.DecimalMax;
-import java.math.BigDecimal;
-
-/**
- * Check that the String being validated represents a number, and has a value
- * <= maxvalue
- */
-public class DecimalMaxValidatorForString implements ConstraintValidator<DecimalMax, String> {
-
-    private BigDecimal maxValue;
-
-    @Override
-    public void initialize(DecimalMax annotation) {
-        try {
-            this.maxValue = new BigDecimal(annotation.value());
-        } catch (NumberFormatException nfe) {
-            throw new IllegalArgumentException(annotation.value() + " does not represent a valid BigDecimal format");
-        }
-    }
-
-    @Override
-    public boolean isValid(String value, ConstraintValidatorContext context) {
-        if (value == null) {
-            return true;
-        }
-        try {
-            return new BigDecimal(value).compareTo(maxValue) < 1;
-        } catch (NumberFormatException nfe) {
-            return false;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/bval/blob/e34b20bb/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidator.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidator.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidator.java
new file mode 100644
index 0000000..9ada336
--- /dev/null
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidator.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.bval.constraints;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.DecimalMin;
+
+public abstract class DecimalMinValidator<T> implements ConstraintValidator<DecimalMin, T> {
+    public static class ForString extends DecimalMinValidator<String> {
+        @Override
+        public boolean isValid(String value, ConstraintValidatorContext context) {
+            return value == null || isValid(new BigDecimal(value));
+        }
+    }
+
+    public static class ForNumber extends DecimalMinValidator<Number> {
+        @Override
+        public boolean isValid(Number value, ConstraintValidatorContext context) {
+            if (value == null) {
+                return true;
+            }
+            final BigDecimal bigValue;
+            if (value instanceof BigDecimal) {
+                bigValue = (BigDecimal) value;
+            } else if (value instanceof BigInteger) {
+                bigValue = new BigDecimal((BigInteger) value);
+            } else {
+                bigValue = new BigDecimal(value.doubleValue());
+            }
+            return isValid(bigValue);
+        }
+    }
+
+    private BigDecimal minValue;
+    private boolean inclusive;
+
+    @Override
+    public void initialize(DecimalMin annotation) {
+        try {
+            this.minValue = new BigDecimal(annotation.value());
+        } catch (NumberFormatException nfe) {
+            throw new IllegalArgumentException(annotation.value() + " does not represent a valid BigDecimal format");
+        }
+        this.inclusive = annotation.inclusive();
+    }
+
+    protected boolean isValid(BigDecimal value) {
+        // null values are valid
+        if (value == null) {
+            return true;
+        }
+        final int comparison = value.compareTo(minValue);
+        return comparison > 0 || inclusive && comparison == 0;
+    }
+}

http://git-wip-us.apache.org/repos/asf/bval/blob/e34b20bb/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
deleted file mode 100644
index 17c6c38..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForNumber.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.bval.constraints;
-
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.constraints.DecimalMin;
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-/** Description: validate that number-value of passed object is >= minvalue<br/> */
-public class DecimalMinValidatorForNumber implements ConstraintValidator<DecimalMin, Number> {
-
-    private BigDecimal minValue;
-
-    @Override
-    public void initialize(DecimalMin annotation) {
-        try {
-            this.minValue = new BigDecimal(annotation.value());
-        } catch (NumberFormatException nfe) {
-            throw new IllegalArgumentException(annotation.value() + " does not represent a valid BigDecimal format");
-        }
-    }
-
-    @Override
-    public boolean isValid(Number value, ConstraintValidatorContext context) {
-        if (value == null) {
-            return true;
-        }
-        BigDecimal bigValue;
-        if (value instanceof BigDecimal) {
-            bigValue = (BigDecimal) value;
-        } else if (value instanceof BigInteger) {
-            bigValue = new BigDecimal((BigInteger) value);
-        } else {
-            bigValue = new BigDecimal(value.doubleValue());
-        }
-        return bigValue.compareTo(minValue) >= 0;
-    }
-}

http://git-wip-us.apache.org/repos/asf/bval/blob/e34b20bb/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java b/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
deleted file mode 100644
index ef62387..0000000
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/DecimalMinValidatorForString.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.bval.constraints;
-
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
-import javax.validation.constraints.DecimalMin;
-import java.math.BigDecimal;
-
-/**
- * Description:
- * Check that the String being validated represents a number, and has a value
- * >= minvalue
- */
-public class DecimalMinValidatorForString implements ConstraintValidator<DecimalMin, String> {
-
-    private BigDecimal minValue;
-
-    @Override
-    public void initialize(DecimalMin annotation) {
-        try {
-            this.minValue = new BigDecimal(annotation.value());
-        } catch (NumberFormatException nfe) {
-            throw new IllegalArgumentException(annotation.value() + " does not represent a valid BigDecimal format");
-        }
-    }
-
-    @Override
-    public boolean isValid(String value, ConstraintValidatorContext context) {
-        //null values are valid
-        if (value == null) {
-            return true;
-        }
-        try {
-            return new BigDecimal(value).compareTo(minValue) >= 0;
-        } catch (NumberFormatException nfe) {
-            return false;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/bval/blob/e34b20bb/bval-jsr/src/main/resources/org/apache/bval/jsr/DefaultConstraints.properties
----------------------------------------------------------------------
diff --git a/bval-jsr/src/main/resources/org/apache/bval/jsr/DefaultConstraints.properties b/bval-jsr/src/main/resources/org/apache/bval/jsr/DefaultConstraints.properties
index 6f481da..a092cfa 100644
--- a/bval-jsr/src/main/resources/org/apache/bval/jsr/DefaultConstraints.properties
+++ b/bval-jsr/src/main/resources/org/apache/bval/jsr/DefaultConstraints.properties
@@ -23,11 +23,13 @@
 javax.validation.constraints.AssertFalse=org.apache.bval.constraints.AssertFalseValidator
 javax.validation.constraints.AssertTrue=org.apache.bval.constraints.AssertTrueValidator
 
-javax.validation.constraints.DecimalMax=org.apache.bval.constraints.DecimalMaxValidatorForNumber,\
-  org.apache.bval.constraints.DecimalMaxValidatorForString
+javax.validation.constraints.DecimalMax=\
+  org.apache.bval.constraints.DecimalMaxValidator$ForNumber,\
+  org.apache.bval.constraints.DecimalMaxValidator$ForString
 
-javax.validation.constraints.DecimalMin=org.apache.bval.constraints.DecimalMinValidatorForNumber,\
-  org.apache.bval.constraints.DecimalMinValidatorForString
+javax.validation.constraints.DecimalMin=\
+  org.apache.bval.constraints.DecimalMinValidator$ForNumber,\
+  org.apache.bval.constraints.DecimalMinValidator$ForString
 
 javax.validation.constraints.Digits=org.apache.bval.constraints.DigitsValidatorForNumber,\
   org.apache.bval.constraints.DigitsValidatorForString