[forge-dev] [Roaster] Don't know how to add an annotation inside another one

Antonio Goncalves antonio.mailing at gmail.com
Sun Mar 23 10:37:16 EDT 2014


It's not like I have the choice. This is the way you model a constraint
with Bean Validation :
http://beanvalidation.org/1.1/spec/#constraintsdefinitionimplementation-multipleconstraints


2014-03-22 9:11 GMT+01:00 Luca Masini <luca.masini.mailing.list at gmail.com>:

> Why don't you model it like "NamedQueries/NamedQuery" ?
>
>
> 2014-03-22 7:25 GMT+01:00 Antonio Goncalves <antonio.mailing at gmail.com>:
>
>> Hi,
>>
>> This is a Roaster question. I've been trying to create a Bean Validation
>> constraint properly... in vain. What I want to achieve is the following
>> (notice the @List annotation) :
>>
>> @Target({*METHOD*, *FIELD*, *ANNOTATION_TYPE*, *CONSTRUCTOR*, *PARAMETER*
>> })
>> @Retention(*RUNTIME*)
>> @Documented
>> @Constraint(validatedBy = {})
>> *public *@*interface *Email {
>>
>>   String message() *default **"wrong email address"*;
>>
>>   Class<?>[] groups() *default *{};
>>
>>   Class<? *extends *Payload>[] payload() *default *{};
>>
>>   @Target({*METHOD*, *FIELD*, *ANNOTATION_TYPE*, *CONSTRUCTOR*,
>> *PARAMETER*})
>>   @Retention(*RUNTIME*)
>>   @*interface **List* {
>>     Email[] value();
>>   }
>> }
>>
>>
>> This is the code I've written. Both annotation are generated
>> separately... but I don't know how to add listAnnotation inside
>> emailAnnotation. Any idea ?
>>
>> Thanks
>>
>>
>> public class Main {
>>     public static void main(String[] args) {
>>
>>
>>
>>         // This is the inner annotation List
>>
>>         final JavaAnnotationSource listAnnotation = Roaster.create(JavaAnnotationSource.class);
>>
>>
>>         listAnnotation.setName("List");
>>
>>
>>         listAnnotation.addAnnotation(Retention.class).setEnumValue(RUNTIME);
>>
>>
>>         listAnnotation.addAnnotation(Target.class).setEnumValue(METHOD, FIELD, PARAMETER, TYPE);
>>
>>
>>         listAnnotation.addAnnotationElement("Email[] value()");
>>
>>
>>         System.out.println(listAnnotation);
>>
>>
>>
>>         // This is the annotation @Email
>>
>>         final JavaAnnotationSource emailAnnotation = Roaster.create(JavaAnnotationSource.class);
>>
>>
>>         emailAnnotation.setPackage("org.agoncal.proj.constraints").setName("Email");
>>
>>
>>         emailAnnotation.addImport(Payload.class);
>>
>>
>>         emailAnnotation.addAnnotation(Documented.class);
>>
>>
>>         emailAnnotation.addAnnotation(Retention.class).setEnumValue(RUNTIME);
>>
>>
>>         emailAnnotation.addAnnotation(Target.class).setEnumValue(METHOD, FIELD, PARAMETER, TYPE);
>>
>>
>>         emailAnnotation.addAnnotation(Constraint.class).setLiteralValue("validatedBy", "{}");
>>
>>
>>         emailAnnotation.addAnnotationElement("String message() default \"wrong email address\"");
>>
>>
>>         emailAnnotation.addAnnotationElement("Class<?>[] groups() default {}");
>>
>>
>>         emailAnnotation.addAnnotationElement("Class<? extends Payload>[] payload() default {}");
>>
>>
>>                 // I was expecting to have a method like that so I could add annotation inside another one
>>         // emailAnnotation.addAnnotationElement(emailAnnotation);
>>                 System.out.println(emailAnnotation);
>>
>>
>>
>>     }
>>
>> }
>>
>>
>>
>>
>> --
>> Antonio Goncalves
>> Software architect and Java Champion
>>
>> Web site <http://www.antoniogoncalves.org/> | Twitter<http://twitter.com/agoncal>
>>  | LinkedIn <http://www.linkedin.com/in/agoncal> | Paris JUG<http://www.parisjug.org/>
>>  | Devoxx France <http://www.devoxx.fr/>
>>
>> _______________________________________________
>> forge-dev mailing list
>> forge-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/forge-dev
>>
>
>
>
> --
> ****************************************
> http://www.lucamasini.net
> http://twitter.com/lmasini
> http://www.linkedin.com/pub/luca-masini/7/10/2b9
> ****************************************
>
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
>



-- 
Antonio Goncalves
Software architect and Java Champion

Web site <http://www.antoniogoncalves.org/> |
Twitter<http://twitter.com/agoncal>
 | LinkedIn <http://www.linkedin.com/in/agoncal> | Paris
JUG<http://www.parisjug.org/>
 | Devoxx France <http://www.devoxx.fr/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/forge-dev/attachments/20140323/b4aaa83a/attachment.html 


More information about the forge-dev mailing list