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()
LDAPAttribute(LDAPAttribute)
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(Attribute)
LinkedAttribute(AttributeDescription)
LinkedAttribute(AttributeDescription, ByteString)
LinkedAttribute(AttributeDescription, ByteString...)
LinkedAttribute(AttributeDescription, Collection<ByteString>)
LinkedAttribute(String)
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
AttributeImpl).
- 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()
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 ?
--
Regards,
Cordialement,
Emmanuel Lécharny
www.nextury.com