001    
002    /*
003     * Copyright (C) 2011 Archie L. Cobbs. All rights reserved.
004     *
005     * $Id: SelfValidates.java 2 2011-02-05 21:51:43Z archie.cobbs $
006     */
007    
008    package org.dellroad.stuff.validation;
009    
010    import java.lang.annotation.Documented;
011    import java.lang.annotation.ElementType;
012    import java.lang.annotation.Retention;
013    import java.lang.annotation.RetentionPolicy;
014    import java.lang.annotation.Target;
015    
016    import javax.validation.Constraint;
017    import javax.validation.Payload;
018    
019    /**
020     * Validation constraint that when applied to classes that implement the {@link SelfValidating} interface
021     * allows custom validation by the class itself via {@link SelfValidating#checkValid SelfValidating.checkValid()}.
022     */
023    @Documented
024    @Constraint(validatedBy = SelfValidatingValidator.class)
025    @Target(ElementType.TYPE)
026    @Retention(RetentionPolicy.RUNTIME)
027    public @interface SelfValidates {
028    
029        String message() default "{org.dellroad.stuff.validation.SelfValidates.message}";
030    
031        Class<?>[] groups() default {};
032    
033        Class<? extends Payload>[] payload() default {};
034    }
035