package edu.umd.rhsmith.diads.meater.core.config.setup.ops.instance;
import edu.umd.rhsmith.diads.meater.core.config.container.InstanceConfig;
import edu.umd.rhsmith.diads.meater.core.config.container.InstanceConfigContainer;
import edu.umd.rhsmith.diads.meater.core.config.setup.MEaterSetupConsole;
import edu.umd.rhsmith.diads.meater.core.config.setup.ops.SetupConsoleOperation;
public class SelectInstanceOperation<I extends InstanceConfig> extends
SetupConsoleOperation {
public static final String OP_SHORTNAME = "select-instance";
public static final String OP_UINAME = "Select instance from current unit for setup";
private final InstanceConfigContainer<I> owner;
public SelectInstanceOperation(InstanceConfigContainer<I> 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.getNumInstanceConfigs() == 0) {
setup.getConsole().error(MSG_ERR_NO_instanceS_FMT,
AddInstanceOperation.OP_SHORTNAME);
return;
}
// if we actually have modules to go to, ask user for choice
setup.getConsole().say(MSG_PROMPT_SELECT_FMT,
ListInstancesOperation.OP_SHORTNAME);
String instanceName = setup.getConsole().prompt(false);
// try name lookup
I config = this.owner.getInstanceConfigByName(instanceName);
if (config != null) {
setup.selectUnit(config);
} else {
setup.getConsole().error(MSG_ERR_INVALID_NAME_FMT, instanceName,
ListInstancesOperation.OP_SHORTNAME);
}
}
/*
* --------------------------------
* Messages
* --------------------------------
*/
private static final String MSG_ERR_NO_instanceS_FMT = "No instances in current unit to select. (Use '%s' to add new instances)";
private static final String MSG_ERR_INVALID_NAME_FMT = "No instance in current unit with specified name '%s'. (Use '%s' to list instances)";
private static final String MSG_PROMPT_SELECT_FMT = "Enter name of instance to select";
}