package advancedsystemsmanager.flow.execution.commands;
import advancedsystemsmanager.api.execution.IBuffer;
import advancedsystemsmanager.api.execution.IBufferElement;
import advancedsystemsmanager.flow.FlowComponent;
import advancedsystemsmanager.flow.execution.Executor;
import advancedsystemsmanager.flow.menus.Menu;
import advancedsystemsmanager.flow.menus.MenuContainer;
import advancedsystemsmanager.registry.ConnectionSet;
import advancedsystemsmanager.util.SystemCoord;
import java.util.List;
public abstract class CommandInput<Type> extends CommandBase<Type>
{
protected String bufferKey;
public CommandInput(int id, String name, String key)
{
super(id, name, CommandType.INPUT, ConnectionSet.STANDARD);
this.bufferKey = key;
}
@Override
@SuppressWarnings("unchecked")
public void execute(FlowComponent command, int connectionId, Executor executor)
{
if (!executor.containsBuffer(bufferKey))
executor.setBuffer(bufferKey, getNewBuffer());
addToBuffer(getBufferSubElements(command.id, getContainers(command.manager, (MenuContainer)command.menus.get(0)), command.menus), executor.getBuffer(bufferKey));
}
protected abstract IBuffer getNewBuffer();
protected void addToBuffer(List<IBufferElement<Type>> subElements, IBuffer<Type> buffer)
{
for (IBufferElement<Type> subElement : subElements) buffer.add(subElement);
}
protected abstract List<IBufferElement<Type>> getBufferSubElements(int id, List<SystemCoord> blocks, List<Menu> menus);
}