directory-api mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emmanuel Lecharny <>
Subject Attribute object definition
Date Mon, 19 Apr 2010 16:52:24 GMT
Hi guys,

I'm back from two weeks of vacations, and it's hard to come back to code 
... Anyway, coding is quite close to having vacations, so...

I have checked the existing APIs and how they implement the Attribute 
object. here is what we have :

- JNDI :
o an Attribute interface, a BasicAttribute implementation
o Implements Cloneable and Serializable
o A few constructors :
   BasicAttribute(String id)
   BasicAttribute(String id, boolean ordered)
   BasicAttribute(String id, Object value)
   BasicAttribute(String id, Object value, boolean ordered)

- jLDAP :
o no interface, a LDAPAttribute class
o Implements Cloneable, Comparable and Serializable
o A few constructors :
   LDAPAttribute(String id)
   LDAPAttribute(String id, byte[] value)
   LDAPAttribute(String id, String value)
   LDAPAttribute(String id, String[] value)

- OpenDS :
o One interface, Attribute
o Many classes implementing this interface : AbstractAttribute, 
EmptyAttribute LinkedAttribute ( it seems that the ater is the one to 
use when creating a new Attribute) plus some wrappers 
(UnmodifiableAttribute, RenamedAttribute)
o Does not implement any extra interface
o Some constructors, none being schema aware :
   LinkedAttribute(AttributeDescription, ByteString)
   LinkedAttribute(AttributeDescription, ByteString...)
   LinkedAttribute(AttributeDescription, Collection<ByteString>)
   LinkedAttribute(String, Object)
   LinkedAttribute(String, Object...)

- UnboundID
o No interface, just one class : Attribute
o implements Serializable
o Many (too many) constructors :
   Attribute(String name)
   Attribute(String name, ASN1OctetString... values)
   Attribute(String name, byte[] value)
   Attribute(String name, byte[]... values)
   Attribute(String name, Collection<String>)
   Attribute(String name, MatchingRule)
   Attribute(String name, MatchingRule, ASN1OctetString[])
   Attribute(String name, MatchingRule, byte[])
   Attribute(String name, MatchingRule, byte[]...)
   Attribute(String name, MatchingRule, Collection<String>)
   Attribute(String name, MatchingRule, String)
   Attribute(String name, MatchingRule, String...)
   Attribute(String name, Schema, ASN1OctetString... values)
   Attribute(String name, Schema, byte[]...)
   Attribute(String name, Schema, Collection<String>)
   Attribute(String name, Schema, String...)
   Attribute(String name, String value)
   Attribute(String name, String... values)

Suggestions :
- We want to define an Interface and an Implementation. The selected 
name could be :
  * Attribute for the interface
  * DefaultAttribute for the implementation
  The reason why it's named DefaultAttribute is that it's quite a common 
practice (probably better than BaseAttribute, BasicAttribute or 
- We may define an AbstractAttribute class if needed
- We should also implement Comparable, Iterable (over values), Cloneable 
and externalizable
- We may have a ImmutableAttribute class, a wrapper around a mutable 
Attribute instance
- The class might be schema aware, assuming that we inject the schema 
into it (either via a constructor or via an apply(Schema) method)
- The constructors could be :
   DefaultAttribute(String id)
   DefaultAttribute(String id, byte[]... values)
   DefaultAttribute(String id, String... values)
   DefaultAttribute(String id, Value<?>... values)
   DefaultAttribute(AttributeType at)
   DefaultAttribute(AttributeType at, byte[]... values)
   DefaultAttribute(AttributeType at, String... values)
   DefaultAttribute(AttributeType at, Value<?>... values))
   DefaultAttribute(String id, SchemaManager schema)
   DefaultAttribute(String id, SchemaManager schema, byte[]... values)
   DefaultAttribute(String id, SchemaManager schema, String... values)
   DefaultAttribute(String id, SchemaManager schema, Value<?>... values)

Thoughts ?


Emmanuel L├ęcharny

View raw message