package vroom.optimization.online.jmsa.events;
import vroom.common.utilities.events.EventHandlingException;
import vroom.common.utilities.events.IEventHandler;
import vroom.optimization.online.jmsa.IInstance;
import vroom.optimization.online.jmsa.IScenario;
import vroom.optimization.online.jmsa.MSABase.MSAProxy;
import vroom.optimization.online.jmsa.utils.MSALogging;
/**
* <code>NewRequestHandler<code> is an implementation of {@link
* IEventHandler}responsible of the handling of {@link NewRequestEvent} events.
*
* @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 #updated 16-Feb-2010 10:07:00 a.m.
*/
public class NewRequestHandler<S extends IScenario, I extends IInstance> extends MSAEventHandler<NewRequestEvent, S, I> {
public NewRequestHandler(MSAProxy<S, I> parentMSA) {
super(parentMSA);
}
@Override
public boolean canHandleEvent(NewRequestEvent event) {
return true;
}
@Override
public boolean handleEvent(NewRequestEvent event) throws EventHandlingException {
// Check if the request can be serviced
if (getParentMSAProxy().getComponentManager().canBeServiced(event.getNewRequest())) {
MSALogging.getEventsLogger().info("NewRequestHandler.handleEvent: Request accepted (%s)",
event.getNewRequest());
// Add request to the instance
getParentMSAProxy().getInstance().acquireLock();
getParentMSAProxy().getInstance().requestReleased(event.getNewRequest());
getParentMSAProxy().getInstance().releaseLock();
// Insert request in compatible scenarios and remove incompatible
// scenarios
getParentMSAProxy().getComponentManager().insertRequest(event.getNewRequest());
getParentMSAProxy().getComponentManager().getRequestValidator().requestAccepted(event.getNewRequest());
// Generate new scenarios
event.getSource().raiseGenerateScenarioEvent();
} else {
MSALogging.getEventsLogger().info("NewRequestHandler.handleEvent: Request rejected (%s)",
event.getNewRequest());
getParentMSAProxy().getComponentManager().getRequestValidator().requestRejected(event.getNewRequest());
// Optimize existing scenarios
event.getSource().raiseOptimizeEvent();
}
return true;
}
}