[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