Showing posts with label custom event handler. Show all posts
Showing posts with label custom event handler. Show all posts

Friday, May 7, 2010

Custom Event Handler in Java

An Event Class which will be produced by producers and listened by listeners.
public class CustomEvent implements java.io.Serializable{

private int eventType = 0;
private String eventDetail = "";

public String getEventDetail () {
return eventDetail;
}

public int getEventType () {
return eventType;
}

public void setEventDetail (String eventDetail) {
this.eventDetail = eventDetail;
}

public void setEventType (int eventType) {
this.eventType = eventType;
}
}
An Interface which is a contract between event producers and listeners.
public interface EventListenerIntf {
public void handleEvent (CustomEvent event) throws Exception;
}

An Event Listener
public class EventListener implements EventListenerIntf{
public EventListener () {
EventProducer.addListener (this);
}

private String name = null;

public void handleEvent (CustomEvent event) {
System.out.println ("Event handled by "+ this.name+" : EventType: "+event.getEventType()+" EventDetail :"+event.getEventDetail());
}

public String getName () {
return name;
}

public void setName (String name) {
this.name = name;
}

}
A Producer which produces events and have its listener list.
public class EventProducer {
private static List listenerList = new java.util.ArrayList ();

public static synchronized void addListener (EventListener listener) {
listenerList.add (listener);
}

public static synchronized void produceEvents () {
CustomEvent event1 = new CustomEvent ();
event1.setEventType (1);
event1.setEventDetail ("event1 detail");
notifyEventListeners (event1);

CustomEvent event2 = new CustomEvent ();
event2.setEventType (2);
event2.setEventDetail ("event2 detail");
notifyEventListeners (event2);

CustomEvent event3 = new CustomEvent ();
event3.setEventType (3);
event3.setEventDetail ("event3 detail");
notifyEventListeners (event3);

CustomEvent event4 = new CustomEvent ();
event4.setEventType (4);
event4.setEventDetail ("event4 detail");
notifyEventListeners (event4);
}

public static void notifyEventListeners (CustomEvent event) {
for (EventListener listener : listenerList) {
listener.handleEvent (event);
}
}
}

Lets make a simple test these with a simple scenario.

public class Test {
public static void main (String[] args) {
//Listeners getting up !
EventListener amy = new EventListener ();
amy.setName ("Amy");
EventListener april = new EventListener ();
april.setName ("April");
EventListener eli = new EventListener ();
eli.setName ("Eli");

// Producer will create some events
EventProducer.produceEvents();

System.out.println (" good bye");
System.exit (0);
}
}


And out output is :

Event handled by Amy : EventType: 1 EventDetail :event1 detail
Event handled by April : EventType: 1 EventDetail :event1 detail
Event handled by Eli : EventType: 1 EventDetail :event1 detail
Event handled by Amy : EventType: 2 EventDetail :event2 detail
Event handled by April : EventType: 2 EventDetail :event2 detail
Event handled by Eli : EventType: 2 EventDetail :event2 detail
Event handled by Amy : EventType: 3 EventDetail :event3 detail
Event handled by April : EventType: 3 EventDetail :event3 detail
Event handled by Eli : EventType: 3 EventDetail :event3 detail
Event handled by Amy : EventType: 4 EventDetail :event4 detail
Event handled by April : EventType: 4 EventDetail :event4 detail
Event handled by Eli : EventType: 4 EventDetail :event4 detail
good bye