Skip to content

Commit 41c2e5f

Browse files
committed
Merged registration
1 parent 3cf2d9e commit 41c2e5f

File tree

1 file changed

+28
-42
lines changed

1 file changed

+28
-42
lines changed

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

Lines changed: 28 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -20,50 +20,35 @@ public class Validator {
2020
private static final Map<String, Constructor<? extends ValidationRule>> validationRules = new HashMap<>();
2121
private static final Map<Class<?>, Validator> validators = new HashMap<>();
2222

23-
private static final List<Class<? extends Annotation>> RULE_ANNOTATIONS = Arrays.asList(
24-
StringRule.class,
25-
BooleanRule.class,
26-
EnumRule.class,
27-
RequiredRule.class,
28-
IPv4AddressRule.class,
29-
IPv6AddressRule.class,
30-
IntegerRule.class,
31-
NumericRule.class,
32-
DateRule.class,
33-
ArrayRule.class,
34-
AlphaRule.class,
35-
AlphaNumRule.class,
36-
AlphaDashRule.class,
37-
EmailRule.class,
38-
RegexRule.class,
39-
UUIDRule.class
40-
);
23+
private static final List<Class<? extends Annotation>> ruleAnnotationClasses = new ArrayList<>();
4124

4225
static {
43-
registerRuleType("string", StringRule.Validator.class);
44-
registerRuleType("boolean", BooleanRule.Validator.class);
45-
registerRuleType("bool", BooleanRule.Validator.class);
46-
registerRuleType("enum", EnumRule.Validator.class);
47-
registerRuleType("required", RequiredRule.Validator.class);
48-
registerRuleType("req", RequiredRule.Validator.class);
49-
registerRuleType("ipv4", IPv4AddressRule.Validator.class);
50-
registerRuleType("ipv6", IPv6AddressRule.Validator.class);
51-
registerRuleType("int", IntegerRule.Validator.class);
52-
registerRuleType("integer", IntegerRule.Validator.class);
53-
registerRuleType("numeric", NumericRule.Validator.class);
54-
registerRuleType("num", NumericRule.Validator.class);
55-
registerRuleType("date", DateRule.Validator.class);
56-
registerRuleType("array", ArrayRule.Validator.class);
57-
registerRuleType("list", ArrayRule.Validator.class);
58-
registerRuleType("alpha", AlphaRule.Validator.class);
59-
registerRuleType("alpha_num", AlphaNumRule.Validator.class);
60-
registerRuleType("alpha_dash", AlphaDashRule.Validator.class);
61-
registerRuleType("email", EmailRule.Validator.class);
62-
registerRuleType("regex", RegexRule.Validator.class);
63-
registerRuleType("uuid", UUIDRule.Validator.class);
26+
registerRuleType("string", StringRule.Validator.class, StringRule.class);
27+
registerRuleType("boolean", BooleanRule.Validator.class, BooleanRule.class);
28+
registerRuleType("bool", BooleanRule.Validator.class, BooleanRule.class);
29+
registerRuleType("enum", EnumRule.Validator.class, EnumRule.class);
30+
registerRuleType("required", RequiredRule.Validator.class, RequiredRule.class);
31+
registerRuleType("req", RequiredRule.Validator.class, RequiredRule.class);
32+
registerRuleType("ipv4", IPv4AddressRule.Validator.class, IPv4AddressRule.class);
33+
registerRuleType("ipv6", IPv6AddressRule.Validator.class, IPv6AddressRule.class);
34+
registerRuleType("int", IntegerRule.Validator.class, IntegerRule.class);
35+
registerRuleType("integer", IntegerRule.Validator.class, IntegerRule.class);
36+
registerRuleType("numeric", NumericRule.Validator.class, NumericRule.class);
37+
registerRuleType("num", NumericRule.Validator.class, NumericRule.class);
38+
registerRuleType("date", DateRule.Validator.class, DateRule.class);
39+
registerRuleType("array", ArrayRule.Validator.class, ArrayRule.class);
40+
registerRuleType("list", ArrayRule.Validator.class, ArrayRule.class);
41+
registerRuleType("alpha", AlphaRule.Validator.class, AlphaRule.class);
42+
registerRuleType("alpha_num", AlphaNumRule.Validator.class, AlphaNumRule.class);
43+
registerRuleType("alpha_dash", AlphaDashRule.Validator.class, AlphaDashRule.class);
44+
registerRuleType("email", EmailRule.Validator.class, EmailRule.class);
45+
registerRuleType("regex", RegexRule.Validator.class, RegexRule.class);
46+
registerRuleType("uuid", UUIDRule.Validator.class, UUIDRule.class);
6447
}
6548

66-
public static void registerRuleType(String name, Class<? extends ValidationRule> type) {
49+
public static void registerRuleType(String name, Class<? extends ValidationRule> type, Class<? extends Annotation> annotationClass) {
50+
if (!ruleAnnotationClasses.contains(annotationClass))
51+
ruleAnnotationClasses.add(annotationClass);
6752
try {
6853
Constructor<? extends ValidationRule> constructor = type.getDeclaredConstructor(String[].class);
6954
constructor.setAccessible(true);
@@ -373,13 +358,14 @@ private static Map<String[], ValidationConfig> getClassRules(Field field, Class<
373358
if (r.size() > 0)
374359
addMapRules(f, rules, new String[]{name}, r);
375360
}
376-
for (Class<? extends Annotation> annotation : RULE_ANNOTATIONS) {
361+
for (Class<? extends Annotation> annotation : ruleAnnotationClasses) {
377362
Annotation a = f.getDeclaredAnnotation(annotation);
378363
if (a != null) {
379364
List<ValidationRule> r = new ArrayList<>();
380365
try {
381366
Class<?> validatorClazz = Class.forName(annotation.getName() + "$Validator"); // stupid way of doing this;
382-
Constructor<ValidationRule> constructor = (Constructor<ValidationRule>) validatorClazz.getConstructor(annotation);
367+
Constructor<ValidationRule> constructor = (Constructor<ValidationRule>) validatorClazz.getDeclaredConstructor(annotation);
368+
constructor.setAccessible(true);
383369
r.add(constructor.newInstance(a));
384370
} catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException ignored) {}
385371
if (r.size() > 0)

0 commit comments

Comments
 (0)