1 package org.hyphenType.optionprocessors.lib;
2
3 import java.lang.annotation.ElementType;
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target;
7
8 import org.hyphenType.datastructure.Options;
9 import org.hyphenType.optionprocessors.ArgumentsProcessorEngine;
10
11 public class CustomizableValidatorEngine implements ArgumentsProcessorEngine<CustomizableValidatorEngine.CustomizableValidator> {
12
13 public interface Rule<T> {
14 void validate(T option);
15 }
16
17 @Retention(RetentionPolicy.RUNTIME)
18 @Target(ElementType.TYPE)
19 public @interface CustomizableValidator {
20 Class<? extends Rule<?>>[] rules();
21 }
22
23 @SuppressWarnings("unchecked")
24 @Override
25 public <T extends Options<?>> void process(Class<T> interfaceClass, T options, CustomizableValidator config) {
26 for (Class<? extends Rule<?>> ruleClass : config.rules()) {
27 try {
28 Rule<T> rule = (Rule<T>) ruleClass.newInstance();
29 rule.validate(options);
30 } catch (InstantiationException e) {
31
32 e.printStackTrace();
33 } catch (IllegalAccessException e) {
34
35 e.printStackTrace();
36 }
37 }
38 }
39 }