package advancedsystemsmanager.flow.execution.commands; import advancedsystemsmanager.api.ISystemType; import advancedsystemsmanager.flow.FlowComponent; import advancedsystemsmanager.flow.elements.Variable; import advancedsystemsmanager.flow.execution.Executor; import advancedsystemsmanager.flow.menus.Menu; import advancedsystemsmanager.flow.menus.MenuContainerTypes; import advancedsystemsmanager.flow.menus.MenuListOrder; import advancedsystemsmanager.flow.menus.MenuVariableLoop; import advancedsystemsmanager.reference.Names; import advancedsystemsmanager.registry.ConnectionOption; import advancedsystemsmanager.registry.ConnectionSet; import advancedsystemsmanager.util.SystemCoord; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import java.util.Set; public class CommandLoop extends CommandBase { public CommandLoop() { super(FOR_EACH, Names.FOR_EACH_LOOP, CommandType.COMMAND_CONTROL, ConnectionSet.FOR_EACH); } @Override public void getMenus(FlowComponent component, List<Menu> menus) { menus.add(new MenuVariableLoop(component)); menus.add(new MenuContainerTypes(component)); menus.add(new MenuListOrder(component)); } @Override public void execute(FlowComponent command, int connectionId, Executor executor) { Variable list = ((MenuVariableLoop)command.menus.get(0)).getVariable(); if (list != null && list.isValid()) { list.applyOrder((MenuListOrder) command.getMenus().get(2)); Set<ISystemType> validTypes = ((MenuContainerTypes)command.getMenus().get(1)).getValidTypes(); for (int i = 0; i< list.getNumContainers(); i++) { list.setContainerIndex(i); SystemCoord inventory = command.getManager().getInventory(list.getContainer()); if (inventory != null && inventory.isOfAnyType(validTypes)) { executor.executeChildCommands(command, EnumSet.of(ConnectionOption.FOR_EACH)); } } list.setContainerIndex(-1); } } }