Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Turning one annotation into many annotations with AspectJ

I've asked this question on StackOverflow and have not gotten an answer after 115 views so I thought
I would ask here. You can post your answer on SO too if you'd like the rep.
http://stackoverflow.com/questions/5901690/turning-one-annotation-into-many-annotations-with-aspectj

I have discovered a pattern in my JPA mappings that I would like to codify. A simple example follows:

    @OneToMany(fetch=FetchType.EAGER)
    @Sort(type=SortType.NATURAL)
    private SortedSet<Item> items;

I would like to create a single annotation called SortedOneToMany that I can apply to the above set:

    public @interface SortedOneToMany {
        FetchType fetch() default EAGER;
        SortType sort() default NATURAL;
        Class comparator() default void.class;
    }

I have written the following aspect to "attach" the JPA annotations whenever it sees my annotation:

    public aspect SortedOneToManyAspect {
        declare @field: @SortedOneToMany * * : @OneToMany(fetch=FetchType.EAGER);
        declare @field: @SortedOneToMany * * : @Sort(type=SortType.NATURAL);
    }

But I don't know how can I access the values of the SortedOneToMany annotation parameters and use them when defining the OneToMany and Sort annotations. There may be cases where I want to change one of the default values like so:

    @SortedOneToMany(sort=SortType.COMPARATOR,comparator=ItemComparator.class)
    private SortedSet<Item> items;

So how can I pass the annotation values from SortedOneToMany to the Sort annotation?

Thanks.
--
Adam


Back to the top