package edu.umd.rhsmith.diads.meater.core.config.setup.ops.media.path;
import java.util.Map;
import java.util.TreeMap;
import edu.umd.rhsmith.diads.meater.core.config.ConfigModule;
import edu.umd.rhsmith.diads.meater.core.config.components.media.MediaPathConfig;
import edu.umd.rhsmith.diads.meater.core.config.components.media.MediaRegistration;
import edu.umd.rhsmith.diads.meater.core.config.setup.MEaterSetupConsole;
import edu.umd.rhsmith.diads.meater.core.config.setup.ops.SetupConsoleOperation;
public class PathSetMediaOperation extends SetupConsoleOperation {
private static final String OP_SHORTNAME = "set-path-media-type";
private static final String OP_UINAME = "Set the media type this path will operate on";
private MediaPathConfig owner;
public PathSetMediaOperation(MediaPathConfig owner) {
super(OP_UINAME, OP_SHORTNAME);
this.owner = owner;
}
@Override
public void go(MEaterSetupConsole setup) {
setup.getConsole().say(MSG_HEADER);
// build list of all currently registered media types
Map<String, MediaRegistration<?>> regs = new TreeMap<String, MediaRegistration<?>>();
for (ConfigModule module : setup.getMainConfiguration()
.getModules()) {
for (MediaRegistration<?> reg : module.getRegisteredMediaTypes()) {
regs.put(reg.getMediaName(), reg);
}
}
// give them to the user
setup.getConsole().pushIndent(1);
for (MediaRegistration<?> reg : regs.values()) {
setup.getConsole().say("'%s': %s", reg.getMediaName(),
reg.getMediaClass());
}
setup.getConsole().popIndent();
// ask user for their life-altering choice
setup.getConsole().say(MSG_PROMPT_NAME);
String name = setup.getConsole().prompt(false);
if (regs.containsKey(name)) {
this.owner.setMediaClass(regs.get(name).getMediaClass());
setup.getConsole().say(MSG_SUCCESS_FMT, name);
} else {
setup.getConsole().say(MSG_FAILURE_FMT, name);
}
}
/*
* --------------------------------
* Messages
* --------------------------------
*/
private static final String MSG_HEADER = "Registered media types: ";
private static final String MSG_PROMPT_NAME = "Enter the name of the media type to use.";
private static final String MSG_SUCCESS_FMT = "Media path switched to type '%s'.";
private static final String MSG_FAILURE_FMT = "No registered media type '%s'.";
}