Skip to content

Commit d6614d5

Browse files
authored
Merge pull request #3 from JWaldecker/addRules
Add further validation rules
2 parents 4d87a17 + b05c349 commit d6614d5

File tree

8 files changed

+155
-0
lines changed

8 files changed

+155
-0
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@
3232
<version>5.4.2</version>
3333
<scope>test</scope>
3434
</dependency>
35+
<dependency>
36+
<groupId>com.sun.mail</groupId>
37+
<artifactId>javax.mail</artifactId>
38+
<version>1.6.2</version>
39+
</dependency>
3540
</dependencies>
3641

3742
<build>

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,14 @@ public class Validator {
3232
registerRuleType("ipv6", IPv6AddressRule.class);
3333
registerRuleType("int", IntegerRule.class);
3434
registerRuleType("integer", IntegerRule.class);
35+
registerRuleType("numeric", NumericRule.class);
3536
registerRuleType("date", DateRule.class);
3637
registerRuleType("array", ArrayRule.class);
3738
registerRuleType("list", ArrayRule.class);
39+
registerRuleType("alpha", AlphaRule.class);
40+
registerRuleType("alpha_num", AlphaNumRule.class);
41+
registerRuleType("alpha_dash", AlphaDashRule.class);
42+
registerRuleType("email", EmailRule.class);
3843
}
3944

4045
public static void registerRuleType(String name, Class<? extends ValidationRule> type) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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 class AlphaDashRule implements ValidationRule {
9+
@Override
10+
public String validate(ValidationContext context, Field field, AbstractElement value) {
11+
if (value == null)
12+
return null;
13+
14+
String pattern = "[A-Za-z0-9-_]*";
15+
if (!value.string().matches(pattern))
16+
return "Value must only contain alpha-numeric characters as well as dashes and underscores.";
17+
18+
return null;
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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 class AlphaNumRule implements ValidationRule {
9+
@Override
10+
public String validate(ValidationContext context, Field field, AbstractElement value) {
11+
if (value == null)
12+
return null;
13+
14+
String pattern = "[A-Za-z0-9]*";
15+
if (!value.string().matches(pattern))
16+
return "Value must only contain alpha-numeric characters.";
17+
18+
return null;
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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 class AlphaRule implements ValidationRule {
9+
@Override
10+
public String validate(ValidationContext context, Field field, AbstractElement value) {
11+
if (value == null)
12+
return null;
13+
14+
String pattern = "[A-Za-z]*";
15+
if (!value.string().matches(pattern))
16+
return "Value must only contain alphabetic characters.";
17+
18+
return null;
19+
}
20+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.javawebstack.validator.rule;
2+
3+
import org.javawebstack.abstractdata.AbstractElement;
4+
import org.javawebstack.validator.ValidationContext;
5+
6+
import javax.mail.internet.AddressException;
7+
import javax.mail.internet.InternetAddress;
8+
import java.lang.reflect.Field;
9+
10+
public class EmailRule implements ValidationRule {
11+
@Override
12+
public String validate(ValidationContext context, Field field, AbstractElement value) {
13+
if (value == null)
14+
return null;
15+
16+
try {
17+
InternetAddress emailAddr = new InternetAddress(value.string());
18+
emailAddr.validate();
19+
} catch (AddressException ex) {
20+
return "Value is not a valid email address";
21+
}
22+
23+
return null;
24+
}
25+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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 class NumericRule implements ValidationRule {
9+
@Override
10+
public String validate(ValidationContext context, Field field, AbstractElement value) {
11+
if (value == null)
12+
return null;
13+
14+
float v;
15+
if (value.isNumber())
16+
v = value.number().floatValue();
17+
else if (value.isString()) {
18+
try {
19+
v = Float.parseFloat(value.string());
20+
} catch(NumberFormatException ex) {
21+
return "Not a numeric value";
22+
}
23+
} else {
24+
return "Not a numeric value";
25+
}
26+
27+
return null;
28+
}
29+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package test.org.javawebstack.validator;
2+
3+
import org.javawebstack.abstractdata.AbstractMapper;
4+
import org.javawebstack.validator.Rule;
5+
import org.javawebstack.validator.ValidationContext;
6+
import org.javawebstack.validator.Validator;
7+
import org.junit.jupiter.api.Test;
8+
9+
import java.util.Random;
10+
11+
import static org.junit.jupiter.api.Assertions.assertFalse;
12+
import static org.junit.jupiter.api.Assertions.assertTrue;
13+
14+
public class EmailRuleTest {
15+
16+
@Test
17+
public void testSimpleRequiredRule(){
18+
Validator validator = Validator.getValidator(TestObject1.class);
19+
TestObject1 test = new TestObject1();
20+
test.email = "Test";
21+
assertFalse(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid());
22+
test.email = "info@test.de";
23+
assertTrue(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid());
24+
}
25+
26+
private static class TestObject1 {
27+
@Rule("email")
28+
String email;
29+
}
30+
31+
}

0 commit comments

Comments
 (0)