package edu.umd.rhsmith.diads.meater.core.config.setup.ops.module; import edu.umd.rhsmith.diads.meater.core.config.ConfigModule; import edu.umd.rhsmith.diads.meater.core.config.MEaterConfig; import edu.umd.rhsmith.diads.meater.core.config.setup.MEaterSetupConsole; import edu.umd.rhsmith.diads.meater.core.config.setup.ops.SetupConsoleOperation; public class SelectModuleOperation extends SetupConsoleOperation { public static final String OP_SHORTNAME = "select-module"; public static final String OP_UINAME = "Select module for setup"; private final MEaterConfig owner; public SelectModuleOperation(MEaterConfig owner) { super(OP_UINAME, OP_SHORTNAME); this.owner = owner; } @Override public void go(MEaterSetupConsole setup) { // handy hint: let user know if there are no loaded modules if (this.owner.getNumModules() == 0) { setup.getConsole().error(MSG_ERR_NO_MODULES_FMT, AddModuleOperation.OP_SHORTNAME); return; } // if we actually have modules to go to, ask user for choice setup.getConsole().say(MSG_PROMPT_SELECT_FMT, ListModulesOperation.OP_SHORTNAME); String moduleName = setup.getConsole().prompt(false); // try name lookup ConfigModule module = this.owner.getModuleByName(moduleName); if (module != null) { setup.selectUnit(module); } else { setup.getConsole().error(MSG_ERR_INVALID_NAME_FMT, moduleName, ListModulesOperation.OP_SHORTNAME); } } /* * -------------------------------- * Messages * -------------------------------- */ private static final String MSG_ERR_NO_MODULES_FMT = "No currently-loaded modules to select. (Use '%s' to load new modules)"; private static final String MSG_ERR_INVALID_NAME_FMT = "Invalid module name specified: '%s' (use '%s' to list loaded modules)"; private static final String MSG_PROMPT_SELECT_FMT = "Enter name of module to select"; }