package bjc.utils.cli.fds; import bjc.utils.ioutils.Block; import java.util.List; import java.util.Map; import java.util.function.Consumer; /** * A implementation of FDS mode that invokes macros bound into a map. * * @author EVE * * @param * The FDS state type. */ public class MacroFDSMode implements FDSMode { private final class MacroFDSCommand implements FDSCommand { private String macroName; public MacroFDSCommand(String c) { macroName = c; } @Override public void run(FDSState state) { macros.get(macroName).forEach(dest); } } /* * The available macros. */ private Map> macros; /* * Where to send blocks from macros. */ private Consumer dest; /** * Create a new FDS mode for macros. * * @param macros * The macros to use. * * @param dest * The destination for blocks from the macros. */ public MacroFDSMode(Map> macros, Consumer dest) { this.macros = macros; this.dest = dest; } @Override public String[] registeredChars() { return macros.keySet().toArray(new String[0]); } @Override public boolean hasCommand(String comName) { return macros.containsKey(comName); } @Override public boolean hasSubmode(String submodeName) { return false; } @Override public FDSCommand getCommand(String comName) throws FDSException { return new MacroFDSCommand(comName); } @Override public FDSMode getSubmode(String submodeName) throws FDSException { throw new FDSException("Submodes aren't available in macroName modes"); } }