package vroom.optimization.online.jmsa.events; import vroom.optimization.online.jmsa.IActualRequest; import vroom.optimization.online.jmsa.MSABase; import vroom.optimization.online.jmsa.utils.MSALogging; /** * <code>IMSAEventFactory</code> is the class responsible for the creation and raising of events in the MSA procedure * * @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:02 a.m. */ public class MSAEventFactoryST implements IMSAEventFactory { private final MSAEventQueue mEventQueue; private final MSABase<?, ?> mParentMSA; /* * (non-Javadoc) * @see vroom.optimization.online.jmsa.events.IMSAEventFactory#getParentMSA() */ @Override public MSABase<?, ?> getParentMSA() { return mParentMSA; } /** * @param eventQueue */ public MSAEventFactoryST(MSABase<?, ?> parentMSA, MSAEventQueue eventQueue) { super(); mEventQueue = eventQueue; mParentMSA = parentMSA; } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raiseDecisionEvent * () */ @Override public boolean raiseDecisionEvent() { return raiseEvent(new DecisionEvent(0, this)); } /* * (non-Javadoc) * @see vroom.optimization.online.jmsa.events.IMSAEventFactory# * raiseRequestAssignedEvent(int, * vroom.optimization.online.jmsa.IActualRequest) */ @Override public boolean raiseRequestAssignedEvent(int resourceId, IActualRequest assignedRequest) { return raiseEvent(ResourceEvent.newRequestAssignedEvent(0, this, resourceId, assignedRequest, null)); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raiseNewRequestEvent * (vroom.optimization.online.jmsa.IActualRequest) */ @Override public boolean raiseNewRequestEvent(IActualRequest request) { return raiseEvent(new NewRequestEvent(0, this, request)); } /* * (non-Javadoc) * @see vroom.optimization.online.jmsa.events.IMSAEventFactory# * raiseStartOfServiceEvent(int, * vroom.optimization.online.jmsa.IActualRequest, java.lang.Object) */ @Override public boolean raiseStartOfServiceEvent(int resourceId, IActualRequest servedRequest, Object additionalInfo) { return servedRequest != null && raiseEvent(ResourceEvent.newStartOfServiceEvent(0, this, resourceId, servedRequest, additionalInfo)); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raiseEndOfServiceEvent * (int, vroom.optimization.online.jmsa.IActualRequest) */ @Override public boolean raiseEndOfServiceEvent(int resourceId, IActualRequest servedRequest) { return servedRequest != null && raiseEvent(ResourceEvent.newEndOfServiceEvent(0, this, resourceId, servedRequest, null)); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raiseResourceStart * (int, java.lang.Object) */ @Override public boolean raiseResourceStart(int resourceId, Object param) { return raiseEvent(ResourceEvent.newStartServiceEvent(0, this, resourceId, param)); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raiseResourceStop * (int, java.lang.Object) */ @Override public boolean raiseResourceStop(int resourceId, Object param) { return raiseEvent(ResourceEvent.newStopServiceEvent(0, this, resourceId, param)); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raisePoolUpdateEvent * () */ @Override public boolean raisePoolUpdateEvent() { return raisePoolUpdateEvent(false); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raisePoolUpdateEvent * (boolean) */ @Override public boolean raisePoolUpdateEvent(boolean preemptive) { return raiseEvent(new PoolUpdateEvent(this, preemptive)); } /* * (non-Javadoc) * @see vroom.optimization.online.jmsa.events.IMSAEventFactory# * raiseGenerateScenarioEvent() */ @Override public boolean raiseGenerateScenarioEvent() { return raiseEvent(new GenerateEvent(this)); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raiseOptimizeEvent * () */ @Override public boolean raiseOptimizeEvent() { return raiseEvent(new OptimizeEvent(this)); } /* * (non-Javadoc) * @see * vroom.optimization.online.jmsa.events.IMSAEventFactory#raiseEvent(vroom * .optimization.online.jmsa.events.MSAEvent) */ @Override public boolean raiseEvent(MSAEvent event) { try { mEventQueue.pushEvent(event); return true; } catch (InterruptedException e) { MSALogging.getBaseLogger().exception("MSAEventFactoryST.raiseEvent", e); return false; } } }// end IMSAEventFactory