On Jul 22, 2010, at 12:41 PM, Michael Wooten wrote: > Matt, > > Technically the AbstractEventSupport class itself doesn't add that > much value. It is meant more as a utility for someone providing their > own listeners and events. It is just one of those classes I've > rewritten on many projects that I work on. > > The benefit of extending AbstractEventSupport over using > EventListenerSupport is that you can add your own "fire" method that > may provide better meaning to the user, or offer additional > functionality. The class is designed to be a base class for classes > similar to PropertyChangeSupport. PropertyChangeSupport offers methods > for firing both PropertyChangeEvents and IndexedPropertyChangeEvents > objects through utility methods, with different behaviors for how the > the event object is constructed depending on which method is called. > The idea is that the user doesn't have to know how the event object is > constructed or how it is propagated to the listeners, just that it is. > By extending AbstractEventSupport and adding your own "fire" methods > you can create support classes with simpler interfaces and more > semantic meaning (documentation, potential error checking). >
My point was that one could just as easily add these methods to a subclass of EventListenerSupport. :) -Matt > Hope this helps. > > -Michael > > On Thu, Jul 22, 2010 at 12:56 PM, Matt Benson <gudnabr...@gmail.com> wrote: >> >> On Jul 22, 2010, at 11:44 AM, Michael Wooten wrote: >> >>> All, >>> >>> Since I started this mess with LANG-580 I figured I would chime in. >>> >>> I personally believe that there is a benefit for the EventSupport >>> interface, even if it can only register one type of listener. >> >> >> Silly me; I was talking as though EventSupport hadn't been proposed. Well, >> as I said, it's good as far as it goes, but doesn't outright address the >> case where an object might accept multiple eventlistener types. The obvious >> thing here is that a class can implement EventSupport<EventListener>. It >> then follows that such a class would dispatch to multiple >> AbstractEventSupport or EventListenerSupport objects. Do any ideas occur to >> anyone here? Could we provide a special-purpose EventListenerSupport >> subclass that explicitly assigns the type parameter as EventListener, then >> dispatches listeners accordingly and perhaps overloads fire() to take the >> actual listener type? I'm thinking I like this idea and may attempt to >> implement it. >>> >> >>> I also >>> believe that AbstractEventSupport could be very useful. It basically >>> provides an abstract base class for classes that are intended to work >>> much like PropertyChangeSupport works, with utility methods for >>> posting events and all of the listener management handled for you. The >>> idea is that you wouldn't have to create the event objects yourself, >>> you would just call utility methods that would create the event and >>> fire it. I am very impressed with James's implementation of >>> EventListenerSupport, and believe it is a much better solution than >>> the ReflectiveEventSupport class that I contributed. >> >> Still, what could you do with AbstractEventSupport that you couldn't do with >> EventListenerSupport? Unless there's some reason to avoid proxy generation >> in some environments... I have no real argument against, just curious. >> >> -Matt >> >>> >>> I have created another patch in LANG-580 that showcases what I believe >>> is a best-of-both-worlds solution. I removed the >>> ReflectiveEventSupport class and changed James' EventListenerSupport >>> class to extend AbstractEventSupport. Please look over this solution >>> and see if it meets everyone's needs. >>> >>> Thanks. >>> >>> -Michael >>> >>> P.S. I also contributed a patch with the package.html file for the >>> event package. This will need to be updated however based on whatever >>> is decided. >>> >>> On Thu, Jul 22, 2010 at 11:20 AM, Matt Benson <gudnabr...@gmail.com> wrote: >>>> >>>> On Jul 22, 2010, at 10:08 AM, James Carman wrote: >>>> >>>>> On Thu, Jul 22, 2010 at 11:02 AM, Matt Benson <gudnabr...@gmail.com> >>>>> wrote: >>>>>> I like the compiler-checked aspect of your code, James, considering it >>>>>> scratches an itch reminiscent of my current work in [proxy]. I'm happy >>>>>> for your code to survive this POE. >>>>>> >>>>> >>>>> I think it reads very well, too. The fire() method used to be named >>>>> getProxy(), but I like fire() much better because it makes it read >>>>> like a sentence. I do believe I'm going to make the >>>>> EventUtils.addEventListener() method private. It really doesn't add >>>>> much value to outside folks. Its primary purpose is an implementation >>>>> method for the other bindEventsToMethod() method. WDYT? >>>>> >>>> >>>> Well, I can see *some* value in having it, due to the fact that there are >>>> no well-known interfaces for *listenable* items. We could provide a >>>> generic interface as a wannabe defacto standard, but it would fall down as >>>> soon as somebody wanted to support multiple listener types on a single >>>> object. I've been doing a lot of event-listening code at $work recently >>>> (over the past year) and this has been a big PITA. I can't see a way >>>> generic enough for [lang] to handle this problem, so I might vote for >>>> #addEventListener() to remain. However, you might add an analogous >>>> remove() in that case. Finally, a bit of code to take away from the other >>>> event-stuff is the null-checking of the added/removed listeners. ;) >>>> >>>> -Matt >>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>> >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org