[ https://issues.apache.org/jira/browse/LANG-580?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henri Yandell updated LANG-580: ------------------------------- Fix Version/s: (was: 3.0) 3.1 No backwards compat issues, so moving to 3.1. If resolved before 3.0 is released please assign to 3.0. > Add Event Support Utilities > --------------------------- > > Key: LANG-580 > URL: https://issues.apache.org/jira/browse/LANG-580 > Project: Commons Lang > Issue Type: New Feature > Components: General > Affects Versions: 3.0 > Environment: Java SE 5.0+ > Reporter: Michael Wooten > Priority: Minor > Fix For: 3.1 > > Original Estimate: 96h > Remaining Estimate: 96h > > I would like to propose some support be added to Lang for basic event > handling. This would be based on the way that PropertyChangeSupport can be > used to add and remove listeners and post events. > Add interface EventSupport<L extends EventListener> > addListener(L listener) > The signature for the method that can add a listener of some subtype of > EventListener > removeListener(L listener) > The signature for the method that can remove a listener of some subtype of > EventListener > Add class AbstractEventSupport implements EventSupport<L>, Iterable<L> > AbstractEventSupport(Object eventSource) > Constructs a new AbstractEventSupport object and associates it with the > object that will be used as the source of all events (much like > PropertyChangeSupport). > addListener(L) > An implementation that adds a listener to an internal collection. > removeListener(L) > An implementation that removes a listener from an internal collection. > iterator() > Returns an iterator over the attached listeners. > getSource() > Returns a reference to the source object of all events. > The best way to describe this would be to demonstrate an example of how it > can be used. > public class ButtonPressedEventSupport extends > AbstractEventSupport<ButtonPressedListener> { > public ButtonPressedEventSupport(Object source) { super(source); } > public void fireButtonPressed(Button button) { > ButtonPressedEvent bpe = new ButtonPressedEvent(getSource(), button); > for (ButtonPressedListener listener : this) > { > listener.buttonPressed(bpe); > } > } > } > public class MyWindow implements EventSupport<ButtonPressedListener> { > private final ButtonPressedEventSupport buttonPressedEventSupport; > public MyWindow { buttonPressedEventSupport = new > ButtonPressedEventSupport(this); } > public void addListener(ButtonPressedListener listener) { > buttonPressedEventSupport.addListener(listener); } > public void removeListener(ButtonPressedListener listener) { > buttonPressedEventSupport.removeListener(listener); } > ... > private void onDetectButtonPressed(Button button) { > buttonPressedEventSupport.fireButtonPressed(button); > } > } > I haven't compiled the above code. It's just an example of how these classes > could be used so that you're not constantly rewriting the code and interfaces > for adding and removing listeners, and it provides a fairly easy method of > creating methods to fire events. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.