directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Pierre-Arnaud Marcelot>
Subject Re: Adding annotations to Configuration beans
Date Mon, 06 Dec 2010 16:36:31 GMT
On 6 déc. 2010, at 15:16, Kiran Ayyagari wrote:

> On Mon, Dec 6, 2010 at 4:02 PM, Pierre-Arnaud Marcelot <> wrote:
>> Hi Dev,
>> I successfully integrated the newly introduced ApacheDS Configuration Reader (with
all configuration beans) in the ApacheDS 2.0 Configuration Editor for Apache Directory Studio.
>> The UI is not completely finished yet, but I can already load a configuration from
an LDIF file and I have access to the values of each bean. It's working really great...
> cool
>> Now, that the configuration can be read, it also need to be written, and I started
working on a Configuration Writer.
>> In order to achieve this, I'd like to propose the addition of several Annotation
elements that would be used in the Configuration Beans to help both the configuration writer
and the reader.
>> Adding these Annotation elements would help maintaining the reader and writer loosely
coupled with the beans and would facilitate additions of new configuration items (like those
needed by Antoine, or others from third parties implementations).
>> There 3 annotations I'd like to introduce:
>> - @AttributeType( attributeTypeId )
>> This annotation is intended to be used on a field of a configuration bean and indicates
which attribute type id this field is associated with.
>> I think it's a great addition as we're no longer in need to infer the id of the attribute
type from the name of the field ( same thing for having to truncate the 'ads-' prefix sometimes).
>> It's clear and easy.
>> Furthermore, only fields with this annotation should be read and written by the configuration
reader/writer (which allows the configuration beans to have extra fields that are not necessarily
read or written).
>> - @RDN
>> This annotation is intended to be used on a field of a configuration bean in conjunction
with the @AttibuteType annotation and indicates that this particular field is the one (and
only for a given configuration bean) to be used in the RDN of the associated entry
> sounds good
>> - @Container( containerRdn )
>> This is intended to be used on a field of a configuration bean and more particularly
on a field referring to a composite (List, Set, etc.) bean value. It indicates where the adding
bean entries are to be placed (in which container entry) like the 'ou=servers' entry under
the defaultDirectoryService entry.
> hmm, not sure how it will distinguishes a collection of other
> container from a collection of plain attribute values, will wait till
> some code gets committed to comment on this, but all in all it sounds
> good to me

Indeed, although I could get it to work in the writer's code (where I could test the type
of the field), it will probably be a problem on the other side, in the reader's code.

After, playing a bit with the implementation of this annotations idea, I'm wondering if it
would not be better to combine all annotations into a single one.
We could have something like this one:
> /**
>  * An annotation used to specify that the qualified field is configuration element.
>  *
>  * @author <a href="">Apache Directory Project</a>
>  */
> @Documented
> @Inherited
> @Retention(RetentionPolicy.RUNTIME)
> @Target(ElementType.FIELD)
> public @interface ConfigurationElement
> {
>     /**
>      * Returns the attribute type.
>      *
>      * @return
>      *      the attribute type
>      */
>     String attributeType() default "";
>     /**
>      * Returns the object class.
>      *
>      * @return
>      *      the object class
>      */
>     String objectClass() default "";
>     /**
>      * Returns true if of the qualified field (attribute type and value) 
>      * is the RDN of the entry.
>      *
>      * @return
>      *      <code>true</code> if of the qualified field (attribute type and
>      * is the RDN of the entry,
>      *      <code>false</code> if not.
>      */
>     boolean isRDN() default false;
>     /**
>      * Returns true if the qualified field contains multiple values.
>      *
>      * @return
>      *      <code>true</code> if the qualified field contains multiple values,
>      *      <code>false</code> if not.
>      */
>     boolean isMultiple() default false;
>     /**
>      * Returns the string value of the DN of the container.
>      *
>      * @return
>      *      the string value of the DN of the container.
>      */
>     String container() default "";
> }

This should be easier to write in the configuration beans and should also solve the problems
with the collections.

Note the addition of the 'isMultiple' flag and the 'objectClass' string value for the name
of the object class in case a field is linked to another Bean or collection of Beans.


At some point, I think it's better that I start a new branch for experimenting this. I'll
do this in a few minutes.


> thanks for the heads up Pierre-Arnaud
> -- 
> Kiran Ayyagari

View raw message