package org.jactr.tools.experiment.actions.jactr; /* * default logging */ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jactr.core.model.IModel; import org.jactr.core.model.ModelTerminatedException; import org.jactr.core.queue.timedevents.RunnableTimedEvent; import org.jactr.core.runtime.ACTRRuntime; import org.jactr.tools.experiment.IExperiment; import org.jactr.tools.experiment.actions.AbstractAction; import org.jactr.tools.experiment.impl.IVariableContext; public class StopModelAction extends AbstractAction { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(StopModelAction.class); public StopModelAction(IExperiment experiment) { super(experiment); } @Override protected void fire(IModel model, IExperiment experiment, IVariableContext context) { if (model == null) { LOGGER.error("No model provided, ignoring"); return; } double when = ACTRRuntime.getRuntime().getClock(model).getTime(); RunnableTimedEvent stopEvent = new RunnableTimedEvent(when, () -> { if (LOGGER.isDebugEnabled()) LOGGER.debug(String.format("Stopping [%s]", model.getName())); throw new ModelTerminatedException("at experiment request"); }); model.getTimedEventQueue().enqueue(stopEvent); } }