Eventdispatcher

Easy to use event dispatcher for the java 1.8 environment

View project on GitHub

Maven

<dependency>
    <groupId>de.schlegel11</groupId>
    <artifactId>event-dispatcher</artifactId>
    <version>1.1</version>
</dependency>

Download

Latest Version
Release v1.1

Archived Versions (not recommended)
Release v1.0

JavaDoc

For more details see: Javadoc

Usage

EventListener interface that extends the standard java.util.EventListener interface:

import java.util.EventListener;
import java.util.EventObject;

public interface MyListener extends EventListener {
    public void myEventMethod(EventObject eventObject);
}
import java.util.EventListener;
import java.util.EventObject;

public interface AnotherListener extends EventListener{
    public void anotherEventMethod(EventObject eventObject, int currentCalls);
}

Class that fires the event:

import java.util.EventObject;
import de.schlegel11.eventdispatcher.EventDispatcher;

public class MySomethingHappensClass {
    private final EventDispatcher eventDispatcher = EventDispatcher.newInstance();

    public void addMyListenerListener(MyListener listener){
        eventDispatcher.addListener(MyListener.class, listener);
    }

    public void addAnotherListener(AnotherListener listener){
        eventDispatcher.addListener(AnotherListener.class, listener, 3);
    }

    public void removeMyListener(MyListener listener){
        eventDispatcher.removeListener(MyListener.class, listener);
    }

    public void removeAnotherListener(AnotherListener listener){
        eventDispatcher.removeListener(AnotherListener.class, listener);
    }

    public void removeAllMyListeners(){
        eventDispatcher.removeListenerType(MyListener.class);
    }

    public void removeAllAnotherListeners(){
        eventDispatcher.removeListenerType(AnotherListener.class);
    }

    public void removeAllListeners(){
        eventDispatcher.clear();
    }

    public void somethingHappens(){
        EventObject eventObject = new EventObject(this);

        System.out.println("Fire MyListener");
        eventDispatcher.fireEvent(MyListener.class, l -> l.myEventMethod(eventObject));

        eventDispatcher.fireEvent(AnotherListener.class, l -> {

            System.out.println("Fire AnotherListener");
            int maxCalls = eventDispatcher.getListenerMaxCalls(AnotherListener.class, l);   
            int currentCalls = eventDispatcher.getListenerCurrentCalls(AnotherListener.class, l);

            if(maxCalls == currentCalls){
                System.out.println("!!AnotherListener last call!!");
            }
            l.anotherEventMethod(eventObject, currentCalls);
            });
    }
}

Main method:

    public static void main(String[] args) {
        MySomethingHappensClass mshc = new MySomethingHappensClass();

        mshc.addMyListenerListener(new MyListener() {
            private int counter = 0;

            @Override
            public void myEventMethod(EventObject eventObject) {
                System.out.println((++counter)
                        + " - MyEventMethod is called \n");
            }
        });

        mshc.addAnotherListener(new AnotherListener() {

            @Override
            public void anotherEventMethod(EventObject eventObject,
                    int currentCalls) {
                System.out.println(currentCalls
                        + " - AnotherEventMethod is called \n");
            }
        });

        for (int i = 0; i < 5; i++) {
            mshc.somethingHappens();
        }

        System.out.println("Remove all listeners");
        mshc.removeAllListeners();
    }

Console output:

Fire MyListener
1 - MyEventMethod is called 

Fire AnotherListener
1 - AnotherEventMethod is called 

Fire MyListener
2 - MyEventMethod is called 

Fire AnotherListener
2 - AnotherEventMethod is called 

Fire MyListener
3 - MyEventMethod is called 

Fire AnotherListener
!!AnotherListener last call!!
3 - AnotherEventMethod is called 

Fire MyListener
4 - MyEventMethod is called 

Fire MyListener
5 - MyEventMethod is called 

Remove all listeners