package edu.umd.rhsmith.diads.meater.core.config.setup.ops.module; import edu.umd.rhsmith.diads.meater.core.app.ModuleAlreadyLoadedException; import edu.umd.rhsmith.diads.meater.core.app.ModuleInstantiationException; 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 AddModuleOperation extends SetupConsoleOperation { public static final String OP_SHORTNAME = "add-module"; public static final String OP_UINAME = "Load and add new module to configuration"; private final MEaterConfig owner; public AddModuleOperation(MEaterConfig owner) { super(OP_UINAME, OP_SHORTNAME); this.owner = owner; } @Override public void go(MEaterSetupConsole setup) { // get name of module to add setup.getConsole().say(MSG_PROMPT); setup.getConsole().say(MSG_EXAMPLE_FMT, ConfigModule.class.getName()); String className = setup.getConsole().prompt(false); // try to instantiate module ConfigModule module; try { // wrap around forName - a convenience method module = this.owner.addModule(className); } catch (ModuleInstantiationException e) { setup.getConsole().say(MSG_ERR_COULDNT_INSTANTIATE_FMT, e.getMessage()); return; } catch (ModuleAlreadyLoadedException e) { setup.getConsole().say(MSG_ERR_COULDNT_ADD_FMT, e.getMessage()); return; } // yay we did it setup.getConsole().say(MSG_SUCCESS_FMT, module.getUiName()); } /* * -------------------------------- * Messages * -------------------------------- */ private static final String MSG_PROMPT = "Enter the fully-qualified class name of the module you would like to add."; private static final String MSG_EXAMPLE_FMT = "(Example: %s)"; private static final String MSG_ERR_COULDNT_INSTANTIATE_FMT = "Unable to instantiate module class: %s"; private static final String MSG_ERR_COULDNT_ADD_FMT = "Unable to add module: %s"; private static final String MSG_SUCCESS_FMT = "Module '%s' successfully added"; }