View Javadoc

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                  // TODO Auto-generated catch block
32                  e.printStackTrace();
33              } catch (IllegalAccessException e) {
34                  // TODO Auto-generated catch block
35                  e.printStackTrace();
36              }
37          }
38      }
39  }