[
https://issues.apache.org/jira/browse/LANG-580?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Henri Yandell reopened LANG-580:
--------------------------------
Reopening for the additional patch to be considered.
> 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
> Assignee: James Carman
> Priority: Minor
> Fix For: 3.0
>
> Attachments: commons-lang-event-support-docs.patch,
> commons-lang-event-support.patch, commons-lang-events-merged.patch,
> commons-lang-events-package-html.txt
>
> 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.