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


Reply via email to