I agree Stephen. I like the simple approach of just having a Predicate - nice and simple. Also I don't quite see how/why we'd want different Predicate & Transformer operations based on which methods we're calling on the collections (adding/removing/getting etc). This more complex approach probably requires different collection implementations.
Though having an optional Transformer applied to objects being added/removed might be useful too. e.g. this approach would make it easy to allow type coercion into Strings or Numbers if required or to use interning to promote object sharing . I guess in this case the transformer should fire first and the predicate second? Also I like Henri's idea of using the 'Filter' name/concept as in Servlet Filters. Then we could have FilterList that can have a Predicate and/or a Transformer for doing simple transforms to objects as they get added/removed to the list as well as filtering out bad objects. After reading (part of) Joshua Block's Effective Java (which I'll finish eventually, its a great book!), in the scenario of adding an invalid object we should probably throw an exception, reusing one from the JDK. java.lang.IllegalArgumentException is probably the one to use. Thoughts? James ----- Original Message ----- From: "Stephen Colebourne" <[EMAIL PROTECTED]> To: "Jakarta Commons Developers List" <[EMAIL PROTECTED]> Sent: Tuesday, April 23, 2002 10:46 PM Subject: Re: [Collections][SUBMIT] TypedList > OK, this is a different design to one using Predicate, although obviously a > similar purpose. Before I can continue and finish the other collections, I > would like a decision on which way to go ;-) > > This design gives much more power, but is therefore more complex (more > methods, more choice). Maybe there is a case for both. Maybe there is a case > for wrapping a Predicate in a CollectionFilter. Not quite sure yet. > > I would suggest the following interface is necessary to fully express the > possibilities: > public interface CollectionFilter { > // predicate > public boolean allowUpdate(Object obj, Collection coll); > // transform > public Object beforeUpdate(Object obj, Collection coll); > // info > public void afterUpdate(Object obj, Collection coll); > > // predicate > public boolean allowGet(Object obj, Collection coll); > // info ??? > public void beforeGet(Object obj, Collection coll); > // transform > public Object afterGet(Object obj, Collection coll); > > // predicate > public boolean allowRemove(Object obj, Collection coll); > // ??? > public Object beforeRemove(Object obj, Collection coll); > // ??? > public Object afterRemove(Object obj, Collection coll); > } > > Hmm. Having sketched that out, I think I'm tending towards keeping it simple > and sticking with PredicateList and TransformList. Views? I need guidance on > this one before I can continue. > > Stephen > > From: Henri Yandell <[EMAIL PROTECTED]> > > public interface CollectionFilter { > > > > public Object beforeAdd(Object obj, Collection coll); > > > > public Object beforeRemove(Object obj, Collection coll); > > public Object afterRemove(Object obj, Collection coll); > > > > } > > > > > > And same (ish) for Map? And then List/Set extend Collection filter and add > > events? > > > > When something is added to the collection, it checks with beforeAdd, > > passing the object and the collection. In TypedFilter it is set to only > > allow Strings. It finds out the object isn't a String and returns null? > > > > But does that mean return or insert null. Can we have an interface that > > means both Predicate and Transform?? Or should they be separate. > > > > Hen > > > > > So we need something more than the existing Predicate/Transformer > classes > > > then? I think I need to go and code something to it working... > > > Stephen > > > > > > -- > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>