Skip to content

Commit 4beb22a

Browse files
committed
Added double rule
1 parent 0f67bab commit 4beb22a

File tree

4 files changed

+110
-1
lines changed

4 files changed

+110
-1
lines changed

src/main/java/org/javawebstack/validator/Validator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class Validator {
3333
registerRuleType("ipv6", IPv6AddressRule.Validator.class, IPv6AddressRule.class);
3434
registerRuleType("int", IntegerRule.Validator.class, IntegerRule.class);
3535
registerRuleType("integer", IntegerRule.Validator.class, IntegerRule.class);
36+
registerRuleType("double", DoubleRule.Validator.class, DoubleRule.class);
3637
registerRuleType("numeric", NumericRule.Validator.class, NumericRule.class);
3738
registerRuleType("num", NumericRule.Validator.class, NumericRule.class);
3839
registerRuleType("date", DateRule.Validator.class, DateRule.class);
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.javawebstack.validator.rule;
2+
3+
import org.javawebstack.abstractdata.AbstractElement;
4+
import org.javawebstack.validator.ValidationContext;
5+
6+
import java.lang.reflect.Field;
7+
8+
public @interface DoubleRule {
9+
10+
double min() default Double.MIN_VALUE;
11+
double max() default Double.MAX_VALUE;
12+
13+
class Validator implements ValidationRule {
14+
15+
private final double min;
16+
private final double max;
17+
18+
public Validator(DoubleRule rule) {
19+
this(rule.min(), rule.max());
20+
}
21+
22+
public Validator(double min, double max) {
23+
this.min = min;
24+
this.max = max;
25+
}
26+
27+
public Validator(String[] params) {
28+
double min = Double.MIN_VALUE;
29+
double max = Double.MAX_VALUE;
30+
if (params.length > 0)
31+
min = Double.parseDouble(params[0]);
32+
if (params.length > 1)
33+
max = Double.parseDouble(params[1]);
34+
this.min = min;
35+
this.max = max;
36+
}
37+
38+
public String validate(ValidationContext context, Field field, AbstractElement value) {
39+
if (value == null || value.isNull())
40+
return null;
41+
double v;
42+
if (value.isNumber()) {
43+
v = value.number().doubleValue();
44+
} else if (value.isString()) {
45+
try {
46+
v = Double.parseDouble(value.string());
47+
} catch (NumberFormatException ex) {
48+
return "Not a double value";
49+
}
50+
} else {
51+
return "Not a double value";
52+
}
53+
if (v < min)
54+
return String.format("Smaller than the minimum value (%f < %f)", v, min);
55+
if (v > max)
56+
return String.format("Greater than the maximum value (%f > %f)", v, max);
57+
return null;
58+
}
59+
60+
public String toString() {
61+
return "Validator{" +
62+
"min=" + min +
63+
", max=" + max +
64+
'}';
65+
}
66+
67+
}
68+
}

src/main/java/org/javawebstack/validator/rule/IntegerRule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
@Retention(RetentionPolicy.RUNTIME)
1717
public @interface IntegerRule {
1818
int min();
19-
int max();
19+
int max() default Integer.MAX_VALUE;
2020
int step() default 1;
2121

2222
class Validator implements ValidationRule {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package test.org.javawebstack.validator;
2+
3+
import org.javawebstack.abstractdata.AbstractMapper;
4+
import org.javawebstack.validator.ValidationContext;
5+
import org.javawebstack.validator.Validator;
6+
import org.javawebstack.validator.rule.DoubleRule;
7+
import org.junit.jupiter.api.Test;
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
public class DoubleRuleTest {
11+
@Test
12+
public void testSimple() {
13+
Validator validator = Validator.getValidator(SimpleTest.class);
14+
SimpleTest test = new SimpleTest();
15+
test.value = "hello world";
16+
assertFalse(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid());
17+
test.value = "13.37";
18+
assertTrue(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid());
19+
}
20+
21+
@Test
22+
public void testEdgeCases() {
23+
Validator validator = Validator.getValidator(EdgeTest.class);
24+
EdgeTest test = new EdgeTest();
25+
test.value = "9.9";
26+
assertFalse(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid());
27+
test.value = "10.1";
28+
assertTrue(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid());
29+
}
30+
31+
private class SimpleTest {
32+
@DoubleRule
33+
String value;
34+
}
35+
36+
private class EdgeTest {
37+
@DoubleRule(min = 10)
38+
String value;
39+
}
40+
}

0 commit comments

Comments
 (0)