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.0


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.

Reply via email to