From: "Neil O'Toole" <[EMAIL PROTECTED]>
> - Decorators for Collection, List, and Set (NotifyingCollection,
> NotifyingList, NotifyingSet).
I would like our end solution to cover the Bag, SortedSet and SortedBag
interfaces too.

> - Two types of notification: "post-modification" (or 'historical')
> notification, and "pre-modification" (or 'vetoable') notification.
> Pre-modification events can be vetoed before the actual modification
> occurs (similar to the bean VetoableChangeListener).
My first reaction was that this was covered by Predicated collections that
validate the object being added, but this gives more details.

> - Pluggable events: NotifyingCollections uses a pluggable event
> factory,
...
> A default event package is provided, in
> the org.apache.commons.collections.notifying.detailed package. This
> "detailed" event package is a quite heavyweight event system that
> provides detailed information on modifications to the collection.
We should supply a simple implementation too.

I think that this has the basis to be a good implementation. Some comments:
1) I dislike that a new instance of the event factory has to be created for
each collection. The factory should be capable of being shared. This can be
done by passing the init() parameters to each of the other methods.

2) The event dispatch sometimes assumes too much. For example the List
addAll() method validates the index as being in range, but the LazyList
implementation expects out of range indices. The modCount in the iterators
could face the same problem.

3) Similar to (2), the boolean result flag cannot be relied on to give
accurate results as to whether the collection has changed.

4) What if I want vetos to have no effect, rather than throw an exception.

5) It is quite hard to get info out about events. Typecasting is always
needed.

6) There are a lot of classes to get your head around - its very OO.

(2) - (5) give me pause to think about an alternative design... See separate
thread.

Stephen


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to