/**
*
*/
package vroom.optimization.online.jmsa.events;
import vroom.common.utilities.Stopwatch;
import vroom.common.utilities.events.EventHandlerWorker;
import vroom.common.utilities.events.IEvent;
import vroom.common.utilities.events.IEventHandler;
import vroom.common.utilities.logging.LoggerHelper;
import vroom.optimization.online.jmsa.MSABase;
import vroom.optimization.online.jmsa.events.MSACallbackEvent.EventTypes;
import vroom.optimization.online.jmsa.utils.MSALogging;
/**
* <code>MSAEventHandlerCall</code> is an extension of {@link EventHandlerWorker} providing additional logging functionalities for the MSA context.
* <p>
* Creation date: 31/08/2010 - 13:48:04
*
* @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 MSAEventHandlerWorker<E extends IEvent<?>> extends EventHandlerWorker<E> {
private final MSABase<?, ?> mMSA;
protected MSAEventHandlerWorker(E event, IEventHandler<E> handler, MSABase<?, ?> msa) {
super(event, handler);
mMSA = msa;
}
@Override
public Boolean call() throws Exception {
if (getEvent() instanceof OptimizeEvent) {
((OptimizeEvent) getEvent()).setParameters(mMSA.getOptimizeParameters((MSAEvent) getEvent()));
} else if (getEvent() instanceof GenerateEvent) {
((GenerateEvent) getEvent()).setParameters(mMSA.getGenerateParameters());
}
getLogger().debug("Handling event %s (%s)", getEvent(), getHandler());
this.mMSA.callbacks(EventTypes.MSA_EVENT_HANDLING_START, getEvent(), getHandler());
Stopwatch t = new Stopwatch();
t.start();
Boolean b = super.call();
t.stop();
this.mMSA.callbacks(EventTypes.MSA_EVENT_HANDLING_END, getEvent(), getHandler());
getLogger().debug("Event %s processed in %sms (%s)", getEvent(), t.readTimeMS(), getHandler());
return b;
}
@Override
protected LoggerHelper getLogger() {
return MSALogging.getEventsLogger();
}
}