166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpackage javax.annotation;
266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.Documented;
466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.Retention;
566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.lang.annotation.RetentionPolicy;
666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.util.regex.Pattern;
766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport java.util.regex.PatternSyntaxException;
866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.TypeQualifierNickname;
1066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.TypeQualifierValidator;
1166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonimport javax.annotation.meta.When;
1266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
1366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson/**
1466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * This qualifier is used to denote String values that should be a Regular
1566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson * expression.
1666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson *
1766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson */
1866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Documented
1966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Syntax("RegEx")
2066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@TypeQualifierNickname
2166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson@Retention(RetentionPolicy.RUNTIME)
2266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilsonpublic @interface RegEx {
2366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson    When when() default When.ALWAYS;
2466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
2566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson    static class Checker implements TypeQualifierValidator<RegEx> {
2666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
2766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson        public When forConstantValue(RegEx annotation, Object value) {
2866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson            if (!(value instanceof String))
2966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson                return When.NEVER;
3066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
3166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson            try {
3266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson                Pattern.compile((String) value);
3366e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson            } catch (PatternSyntaxException e) {
3466e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson                return When.NEVER;
3566e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson            }
3666e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson            return When.ALWAYS;
3766e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
3866e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson        }
3966e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
4066e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson    }
4166e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson
4266e84b9ff30de7c75b510cb9117205368cf5bd25Jesse Wilson}
43