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

Luca Masini luca.masini.mailing.list at gmail.com
Sat Mar 22 04:11:17 EDT 2014


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
****************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/forge-dev/attachments/20140322/0d833691/attachment-0001.html 


More information about the forge-dev mailing list