package advancedsystemsmanager.flow.execution.commands; import advancedsystemsmanager.api.execution.IBuffer; import advancedsystemsmanager.flow.Connection; import advancedsystemsmanager.flow.FlowComponent; import advancedsystemsmanager.flow.execution.Executor; import advancedsystemsmanager.flow.menus.Menu; import advancedsystemsmanager.flow.menus.MenuSplit; import advancedsystemsmanager.reference.Names; import advancedsystemsmanager.registry.ConnectionOption; import advancedsystemsmanager.registry.ConnectionSet; import java.util.*; public class CommandSplit extends CommandBase { public CommandSplit() { super(FLOW_CONTROL, Names.FLOW_CONTROL, CommandType.COMMAND_CONTROL, ConnectionSet.MULTIPLE_INPUT_2, ConnectionSet.MULTIPLE_INPUT_5, ConnectionSet.MULTIPLE_OUTPUT_2, ConnectionSet.MULTIPLE_OUTPUT_5); } @Override public void getMenus(FlowComponent component, List<Menu> menus) { menus.add(new MenuSplit(component)); } @Override public void execute(FlowComponent command, int connectionId, Executor executor) { MenuSplit menu = (MenuSplit)command.menus.get(0); if (MenuSplit.isSplitConnection(command) && menu.useSplit()) { List<Connection> connections = new ArrayList<Connection>(); ConnectionOption[] connectionOptions = command.connectionSet.getConnections(); int amount = 0; for (int i = 0; i < connectionOptions.length; i++) { Connection connection = command.getConnection(i); if ((connection != null || menu.useEmpty()) && connectionOptions[i].isOutput()) { amount++; if (connection != null) { connections.add(connection); } } } if (connections.size() > 1) { Set<String> buffers = executor.getBuffers(); for (int i = 0; i < connections.size(); i++) { Map<String, IBuffer> newBuffers = new HashMap<String, IBuffer>(); for (String bufferKey : buffers) { IBuffer buffer = executor.getBuffer(bufferKey); newBuffers.put(bufferKey, buffer.split(buffer.shouldSplit() ? amount : 1, i, menu.useFair())); } FlowComponent output = command.getManager().getFlowItem(connections.get(i).getOutputId()); if (output != null) { new Executor(command.manager, newBuffers, new HashSet<Integer>(executor.usedCommands)).executeCommand(output, connections.get(i).getOutputConnection()); } } } else if (connections.size() == 1) { FlowComponent output = command.getManager().getFlowItem(connections.get(0).getOutputId()); if (output != null) { executor.executeCommand(output, connections.get(0).getOutputConnection()); } } } } @Override public List<Connection> getActiveChildren(FlowComponent command, int connectionId) { MenuSplit menu = (MenuSplit)command.menus.get(0); if (MenuSplit.isSplitConnection(command) && menu.useSplit()) { return new ArrayList<Connection>(); } return super.getActiveChildren(command, connectionId); } }