Search in sources :

Example 1 with Entity

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;
}
Also used : Entity(desmoj.core.simulator.Entity) TimeInstant(desmoj.core.simulator.TimeInstant)

Example 2 with Entity

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);
    }
}
Also used : ScyllaRuntimeException(de.hpi.bpt.scylla.exception.ScyllaRuntimeException) Entity(desmoj.core.simulator.Entity) ScyllaRuntimeException(de.hpi.bpt.scylla.exception.ScyllaRuntimeException) ProcessInstance(de.hpi.bpt.scylla.simulation.ProcessInstance) SimulationModel(de.hpi.bpt.scylla.simulation.SimulationModel) TimeInstant(desmoj.core.simulator.TimeInstant)

Aggregations

Entity (desmoj.core.simulator.Entity)2 TimeInstant (desmoj.core.simulator.TimeInstant)2 ScyllaRuntimeException (de.hpi.bpt.scylla.exception.ScyllaRuntimeException)1 ProcessInstance (de.hpi.bpt.scylla.simulation.ProcessInstance)1 SimulationModel (de.hpi.bpt.scylla.simulation.SimulationModel)1