use of desmoj.core.simulator.Entity in project scylla by bptlab.
the class QueueManager method isAnyEventScheduledOrQueued.
// public static boolean areResourcesAvailable(SimulationModel model, Set<ResourceReference> resourceReferences,
// String displayName) {
// Map<String, ResourceQueue> resourceObjects = model.getResourceObjects();
// for (ResourceReference resourceRef : resourceReferences) {
// String resourceId = resourceRef.getResourceId();
// int amount = resourceRef.getAmount();
// ResourceQueue queue = resourceObjects.get(resourceId);
// if (queue.size() < amount) {
// model.sendTraceNote("Not enough resources of type " + resourceId + " available, task " + displayName
// + " is put in a queue.");
// return true;
// }
// }
// return false;
// }
/**
* Checks whether any event is scheduled or queued (if not, simulation may terminate).
*
* @param model
* the simulation model
* @return true if a event is either scheduled or queued
*/
public static boolean isAnyEventScheduledOrQueued(SimulationModel model) {
List<Entity> entities = model.getEntities(false);
for (Entity entity : entities) {
TimeInstant timeInstant = entity.scheduledNext();
if (timeInstant != null) {
return true;
}
}
Collection<ScyllaEventQueue> eventQueues = model.getEventQueues().values();
for (ScyllaEventQueue queue : eventQueues) {
if (!queue.isEmpty()) {
return true;
}
}
return false;
}
use of desmoj.core.simulator.Entity in project scylla by bptlab.
the class ProcessSimulationStopEvent method eventRoutine.
@Override
public void eventRoutine() throws SuspendExecution {
SimulationModel model = (SimulationModel) getModel();
Set<Integer> idsOfProcessInstancesToAbort = QueueManager.clearEventQueuesByProcessId(model, processId);
try {
ProcessSimulationStopEventPluggable.runPlugins(this);
// we do not have any submodels
boolean includeSubmodels = false;
List<Entity> entities = model.getEntities(includeSubmodels);
for (Entity entity : entities) {
if (entity instanceof ProcessInstance) {
ProcessInstance processInstance = (ProcessInstance) entity;
if (processInstance.isScheduled() && processId.equals(processInstance.getProcessModel().getId())) {
processInstance.cancel();
idsOfProcessInstancesToAbort.add(processInstance.getId());
}
} else {
DebugLogger.log("Found unsupported DesmoJ entity: " + entity.getName());
}
}
for (Integer id : idsOfProcessInstancesToAbort) {
DebugLogger.log("Abort process instance " + id + " of process " + processId + ".");
}
if (idsOfProcessInstancesToAbort.size() > 0) {
DebugLogger.log("End time of process " + processId + " reached.");
}
if (model.getEndDateTime() != null) {
long currentTime = model.presentTime().getTimeRounded(DateTimeUtils.getReferenceTimeUnit());
long simulationEndTime = DateTimeUtils.getDuration(model.getStartDateTime(), model.getEndDateTime());
if (simulationEndTime == currentTime) {
model.getExperiment().stop(new TimeInstant(currentTime + 1));
}
}
} catch (ScyllaRuntimeException e) {
throw new RuntimeException(e);
}
}
Aggregations