Skip to content

Commit d965f80

Browse files
committed
Added ValidationContext
1 parent 36150ce commit d965f80

File tree

16 files changed

+81
-44
lines changed

16 files changed

+81
-44
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.javawebstack.validator;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class ValidationContext {
7+
8+
private Validator validator;
9+
private final Map<String, Object> attributes = new HashMap<>();
10+
11+
void setValidator(Validator validator) {
12+
this.validator = validator;
13+
}
14+
15+
public Validator getValidator() {
16+
return validator;
17+
}
18+
19+
public <T> T attrib(String key) {
20+
return (T) attributes.get(key);
21+
}
22+
23+
public ValidationContext attrib(String key, Object value) {
24+
attributes.put(key, value);
25+
return this;
26+
}
27+
28+
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@
66

77
public class ValidationResult {
88

9+
private final ValidationContext context;
910
private final Map<String[], List<String>> errors;
1011

11-
ValidationResult(Map<String[], List<String>> errors){
12+
ValidationResult(ValidationContext context, Map<String[], List<String>> errors){
13+
this.context = context;
1214
this.errors = errors;
1315
}
1416

17+
public ValidationContext getContext() {
18+
return context;
19+
}
20+
1521
public Map<String[], List<String>> getErrors(){
1622
return errors;
1723
}

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,16 @@ public static Validator getValidator(Class<?> type){
103103
return validator;
104104
}
105105

106-
public static <T> T map(Class<T> type, AbstractElement element, AbstractMapper mapper){
106+
public static <T> T map(ValidationContext context, Class<T> type, AbstractElement element, AbstractMapper mapper){
107107
Validator validator = getValidator(type);
108-
ValidationResult result = validator.validate(element);
108+
ValidationResult result = validator.validate(context, element);
109109
if(!result.isValid())
110110
throw new ValidationException(result);
111111
return mapper.fromAbstract(element, type);
112112
}
113113

114-
public static <T> T map(Class<T> type, AbstractElement element){
115-
return map(type, element, new AbstractMapper());
114+
public static <T> T map(ValidationContext context, Class<T> type, AbstractElement element){
115+
return map(context, type, element, new AbstractMapper());
116116
}
117117

118118
private final Map<String[], ValidationConfig> rules = new HashMap<>();
@@ -139,20 +139,21 @@ public Validator rule(String key, ValidationRule... rules){
139139
return rule(key, Arrays.asList(rules));
140140
}
141141

142-
public ValidationResult validate(AbstractElement rootElement){
142+
public ValidationResult validate(ValidationContext context, AbstractElement rootElement) {
143+
context.setValidator(this);
143144
Map<String[], List<String>> errors = new HashMap<>();
144145
for(String[] key : rules.keySet()){
145-
errors.putAll(check(rules, new String[0], new String[0], key, rootElement));
146+
errors.putAll(check(context, rules, new String[0], new String[0], key, rootElement));
146147
}
147-
return new ValidationResult(errors);
148+
return new ValidationResult(context, errors);
148149
}
149150

150-
private Map<String[], List<String>> check(Map<String[], ValidationConfig> rules, String[] keyPrefix, String[] resolvedKeyPrefix, String[] key, AbstractElement element){
151+
private Map<String[], List<String>> check(ValidationContext context, Map<String[], ValidationConfig> rules, String[] keyPrefix, String[] resolvedKeyPrefix, String[] key, AbstractElement element){
151152
if(key.length == 0){
152153
Map<String[], List<String>> errors = new HashMap<>();
153154
ValidationConfig config = getMapValue(rules, keyPrefix);
154155
for(ValidationRule rule : config.rules){
155-
String error = rule.validate(this, config.field, element);
156+
String error = rule.validate(context, config.field, element);
156157
if(error != null){
157158
if(!errors.containsKey(resolvedKeyPrefix))
158159
errors.put(resolvedKeyPrefix, new ArrayList<>());
@@ -175,15 +176,15 @@ private Map<String[], List<String>> check(Map<String[], ValidationConfig> rules,
175176
String[] innerResolvedKeyPrefix = new String[keyPrefix.length+1];
176177
System.arraycopy(resolvedKeyPrefix, 0, innerResolvedKeyPrefix, 0, resolvedKeyPrefix.length);
177178
innerResolvedKeyPrefix[innerResolvedKeyPrefix.length-1] = String.valueOf(i);
178-
errors.putAll(check(rules, innerKeyPrefix, innerResolvedKeyPrefix, innerKey, element.array().get(i)));
179+
errors.putAll(check(context, rules, innerKeyPrefix, innerResolvedKeyPrefix, innerKey, element.array().get(i)));
179180
}
180181
}
181182
if(element.isObject()){
182183
for(String k : element.object().keys()){
183184
String[] innerResolvedKeyPrefix = new String[keyPrefix.length+1];
184185
System.arraycopy(resolvedKeyPrefix, 0, innerResolvedKeyPrefix, 0, resolvedKeyPrefix.length);
185186
innerResolvedKeyPrefix[innerResolvedKeyPrefix.length-1] = k;
186-
errors.putAll(check(rules, innerKeyPrefix, innerResolvedKeyPrefix, innerKey, element.object().get(k)));
187+
errors.putAll(check(context, rules, innerKeyPrefix, innerResolvedKeyPrefix, innerKey, element.object().get(k)));
187188
}
188189
}
189190
return errors;
@@ -200,7 +201,7 @@ private Map<String[], List<String>> check(Map<String[], ValidationConfig> rules,
200201
String[] innerResolvedKeyPrefix = new String[keyPrefix.length+1];
201202
System.arraycopy(resolvedKeyPrefix, 0, innerResolvedKeyPrefix, 0, resolvedKeyPrefix.length);
202203
innerResolvedKeyPrefix[innerResolvedKeyPrefix.length-1] = key[0];
203-
return check(rules, innerKeyPrefix, innerResolvedKeyPrefix, innerKey, value);
204+
return check(context, rules, innerKeyPrefix, innerResolvedKeyPrefix, innerKey, value);
204205
}
205206

206207
private static boolean stringArrayEqual(String[] a, String[] b){

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.javawebstack.validator.rule;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4+
import org.javawebstack.validator.ValidationContext;
45
import org.javawebstack.validator.Validator;
56

67
import java.lang.reflect.Field;
@@ -26,7 +27,7 @@ public ArrayRule(String[] params){
2627
this.max = max;
2728
}
2829

29-
public String validate(Validator validator, Field field, AbstractElement value) {
30+
public String validate(ValidationContext context, Field field, AbstractElement value) {
3031
if(value == null)
3132
return null;
3233
if(!value.isArray())

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.javawebstack.validator.rule;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4-
import org.javawebstack.validator.Validator;
4+
import org.javawebstack.validator.ValidationContext;
55

66
import java.lang.reflect.Field;
77

88
public class BooleanRule implements ValidationRule {
9-
public String validate(Validator validator, Field field, AbstractElement value) {
9+
public String validate(ValidationContext context, Field field, AbstractElement value) {
1010
if(value == null)
1111
return null;
1212
if(value.isBoolean())

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.javawebstack.validator.rule;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4-
import org.javawebstack.validator.Validator;
4+
import org.javawebstack.validator.ValidationContext;
55

66
import java.lang.reflect.Field;
77
import java.text.DateFormat;
@@ -29,7 +29,7 @@ public DateRule(String[] params){
2929
}
3030
}
3131

32-
public String validate(Validator validator, Field field, AbstractElement value) {
32+
public String validate(ValidationContext context, Field field, AbstractElement value) {
3333
if(value == null || value.isNull())
3434
return null;
3535
if(!value.isString())

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.javawebstack.validator.rule;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4-
import org.javawebstack.validator.Validator;
4+
import org.javawebstack.validator.ValidationContext;
55

66
import java.lang.reflect.Field;
77
import java.util.Arrays;
@@ -19,7 +19,7 @@ public EnumRule(String... values){
1919
public EnumRule(Class<? extends Enum<?>> enumType){
2020
this(Arrays.stream(enumType.getEnumConstants()).map(Enum::name).collect(Collectors.toList()));
2121
}
22-
public String validate(Validator validator, Field field, AbstractElement value) {
22+
public String validate(ValidationContext context, Field field, AbstractElement value) {
2323
if(value == null)
2424
return null;
2525
return value.isString() && values.contains(value.string()) ? null : String.format("Not an element of [%s]", String.join(",", values));
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.javawebstack.validator.rule;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4-
import org.javawebstack.validator.Validator;
4+
import org.javawebstack.validator.ValidationContext;
55

66
import java.lang.reflect.Field;
77

@@ -11,7 +11,7 @@ public IPv4AddressRule() {
1111
super("((([01][0-9]{0,2})|(2[0-4][0-9])|(25[0-5])))(\\.(?1)){3}");
1212
}
1313

14-
public String validate(Validator validator, Field field, AbstractElement value) {
15-
return super.validate(validator, field, value) == null ? null : "Not a valid IPv4 Address";
14+
public String validate(ValidationContext context, Field field, AbstractElement value) {
15+
return super.validate(context, field, value) == null ? null : "Not a valid IPv4 Address";
1616
}
1717
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.javawebstack.validator.rule;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4-
import org.javawebstack.validator.Validator;
4+
import org.javawebstack.validator.ValidationContext;
55

66
import java.lang.reflect.Field;
77

@@ -10,7 +10,7 @@ public IPv6AddressRule() {
1010
super("([0-9a-fA-F]{1,4})(:(?1)){7}");
1111
}
1212

13-
public String validate(Validator validator, Field field, AbstractElement value) {
14-
return super.validate(validator, field, value) == null ? null : "Not a valid IPv6 Address";
13+
public String validate(ValidationContext context, Field field, AbstractElement value) {
14+
return super.validate(context, field, value) == null ? null : "Not a valid IPv6 Address";
1515
}
1616
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.javawebstack.validator.rule;
22

33
import org.javawebstack.abstractdata.AbstractElement;
4-
import org.javawebstack.validator.Validator;
4+
import org.javawebstack.validator.ValidationContext;
55

66
import java.lang.reflect.Field;
77

@@ -36,7 +36,7 @@ public IntegerRule(String[] params){
3636
this.step = step;
3737
}
3838

39-
public String validate(Validator validator, Field field, AbstractElement value) {
39+
public String validate(ValidationContext context, Field field, AbstractElement value) {
4040
if(value == null)
4141
return null;
4242
int v;

0 commit comments

Comments
 (0)