/**
*
*/
package vroom.common.utilities.events;
import java.util.concurrent.Callable;
import vroom.common.utilities.logging.LoggerHelper;
/**
* <code>CallableEvent</code> is an implementation of {@link Callable} that encapsulate an event and an handler.
* <p>
* It implements {@link Comparable} using an event based comparison as defined in
* {@link EventComparator#compareEvents(IEvent, IEvent)}
* </p>
* <p>
* Creation date: 31/08/2010 - 11:10:28
*
* @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a
* href="http://copa.uniandes.edu.co">Copa</a> <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a
* href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a>
* @version 1.0
*/
public class EventHandlerWorker<E extends IEvent<?>> implements Callable<Boolean>, Runnable,
Comparable<EventHandlerWorker<?>> {
/** the event to be handled **/
private final E mEvent;
/**
* Getter for event : the event to be handled
*
* @return the value of event
*/
public E getEvent() {
return this.mEvent;
}
/** the event handler **/
private final IEventHandler<E> mHandler;
/**
* Getter for handler : the event handler
*
* @return the value of handler
*/
public IEventHandler<E> getHandler() {
return this.mHandler;
}
/**
* Creates a new <code>CallableEvent</code>
*
* @param event
* the event to be handled
* @param handler
* the handler to be executed
*/
protected EventHandlerWorker(E event, IEventHandler<E> handler) {
super();
mEvent = event;
mHandler = handler;
}
@Override
public Boolean call() throws Exception {
return mHandler.handleEvent(mEvent);
}
@Override
public int compareTo(EventHandlerWorker<?> o) {
return EventComparator.compareEvents(getEvent(), o.getEvent());
}
@Override
public void run() {
try {
call();
} catch (Exception e) {
getLogger().exception("EventHandlerWorker.run - executing %s", e, this);
}
}
@Override
public String toString() {
return String.format("ev:%s handler:%s", getEvent(), getHandler());
}
protected LoggerHelper getLogger() {
return LoggerHelper.getLogger(getClass());
}
}