/******************************************************************************* * Copyright (c) 2011 The University of York. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Louis Rose - initial API and implementation ******************************************************************************/ package simulator.execution.model.actions; import java.util.Arrays; import java.util.Collection; import java.util.LinkedList; import java.util.List; import simulator.execution.model.state.State; import simulator.scl.Action; public class RunnableActionGroup { private final List<RunnableAction> actions; public RunnableActionGroup(Collection<Action> actions) { this(makeRunnable(actions)); } public RunnableActionGroup(RunnableAction... actions) { this.actions = Arrays.asList(actions); } public void run(State state) { runAll(identifyAllActionsWhoseGuardIsSatisified(state), state); } private List<RunnableAction> identifyAllActionsWhoseGuardIsSatisified(State state) { final List<RunnableAction> actionsToRun = new LinkedList<RunnableAction>(); for (RunnableAction action : actions) { if (action.isSatisified(state)) { actionsToRun.add(action); } } return actionsToRun; } private void runAll(List<RunnableAction> actions, State state) { for (RunnableAction actionToRun : actions) { actionToRun.run(state); } } private static RunnableAction[] makeRunnable(Collection<Action> actions) { final List<RunnableAction> runnableActions = new LinkedList<RunnableAction>(); for (Action action : actions) { runnableActions.add(new RunnableAction(action)); } return runnableActions.toArray(new RunnableAction[]{}); } }