You must now raise events at appropriate points in the class's logic. Retrieve an instance of your dispatcher to call the methods on your Event interface:
package curam.mypackage;
import com.google.inject.Inject;
import curam.util.persistence.helper.EventDispatcherFactory;
public class MyEventSource {
public abstract class Event {
public void preDoSomething(MyEventSource raiser) {
// intentionally empty
}
public void postDoSomething(MyEventSource raiser) {
// intentionally empty
}
}
@Inject
private EventDispatcherFactory<Event> dispatcher;
public void doSomething() {
// notify listeners that something is about to happen
dispatcher.get(Event.class).preDoSomething(this);
// do whatever it is that needs to be done
System.out.println("Do something!");
// notify listeners that something has just been done
dispatcher.get(Event.class).postDoSomething(this);
}
}
Note how the dispatcher.get method took the class of the Event interface as a parameter. Calling this method returned an event "multiplexer" instance on which any method call will be dispatched to each of the registered listeners for that event interface.
This completes the coding to raise events. You can now move on to create listeners.