// Run the top-level interactive console.
private int runInteractiveMode() {
// In interactive mode, redirect all output to stdout.
ConsoleApplication app = new OutputStreamConsoleApplication(this);
// Build menu structure.
Comparator<RelationDefinition<?, ?>> c =
new Comparator<RelationDefinition<?, ?>>() {
public int compare(RelationDefinition<?, ?> rd1,
RelationDefinition<?, ?> rd2) {
String s1 = rd1.getUserFriendlyName().toString();
String s2 = rd2.getUserFriendlyName().toString();
return s1.compareToIgnoreCase(s2);
}
};
Set<RelationDefinition<?, ?>> relations;
Map<RelationDefinition<?, ?>, CreateSubCommandHandler<?, ?>> createHandlers;
Map<RelationDefinition<?, ?>, DeleteSubCommandHandler> deleteHandlers;
Map<RelationDefinition<?, ?>, ListSubCommandHandler> listHandlers;
Map<RelationDefinition<?, ?>, GetPropSubCommandHandler> getPropHandlers;
Map<RelationDefinition<?, ?>, SetPropSubCommandHandler> setPropHandlers;
relations = new TreeSet<RelationDefinition<?, ?>>(c);
createHandlers =
new HashMap<RelationDefinition<?, ?>, CreateSubCommandHandler<?, ?>>();
deleteHandlers =
new HashMap<RelationDefinition<?, ?>, DeleteSubCommandHandler>();
listHandlers =
new HashMap<RelationDefinition<?, ?>, ListSubCommandHandler>();
getPropHandlers =
new HashMap<RelationDefinition<?, ?>, GetPropSubCommandHandler>();
setPropHandlers =
new HashMap<RelationDefinition<?, ?>, SetPropSubCommandHandler>();
for (CreateSubCommandHandler<?, ?> ch : handlerFactory
.getCreateSubCommandHandlers()) {
relations.add(ch.getRelationDefinition());
createHandlers.put(ch.getRelationDefinition(), ch);
}
for (DeleteSubCommandHandler dh : handlerFactory
.getDeleteSubCommandHandlers()) {
relations.add(dh.getRelationDefinition());
deleteHandlers.put(dh.getRelationDefinition(), dh);
}
for (ListSubCommandHandler lh :
handlerFactory.getListSubCommandHandlers()) {
relations.add(lh.getRelationDefinition());
listHandlers.put(lh.getRelationDefinition(), lh);
}
for (GetPropSubCommandHandler gh : handlerFactory
.getGetPropSubCommandHandlers()) {
relations.add(gh.getRelationDefinition());
getPropHandlers.put(gh.getRelationDefinition(), gh);
}
for (SetPropSubCommandHandler sh : handlerFactory
.getSetPropSubCommandHandlers()) {
relations.add(sh.getRelationDefinition());
setPropHandlers.put(sh.getRelationDefinition(), sh);
}
// Main menu.
MenuBuilder<Integer> builder = new MenuBuilder<Integer>(app);
builder.setTitle(INFO_DSCFG_HEADING_MAIN_MENU_TITLE.get());
builder.setPrompt(INFO_DSCFG_HEADING_MAIN_MENU_PROMPT.get());
builder.setMultipleColumnThreshold(0);
for (RelationDefinition<?, ?> rd : relations) {
MenuCallback<Integer> callback = new SubMenuCallback(app, rd,
createHandlers.get(rd), deleteHandlers.get(rd), listHandlers.get(rd),
setPropHandlers.get(rd));
builder.addNumberedOption(rd.getUserFriendlyName(), callback);
}
builder.addQuitOption();
Menu<Integer> menu = builder.toMenu();
try {
// Force retrieval of management context.
factory.getManagementContext(app);
} catch (ArgumentException e) {
app.println(e.getMessageObject());
return 1;
} catch (ClientException e) {
app.println(e.getMessageObject());
return 1;
}
try {
app.println();
app.println();
MenuResult<Integer> result = menu.run();
if (result.isQuit()) {
return 0;
} else {
return result.getValue();
}
} catch (CLIException e) {
app.println(e.getMessageObject());
return 1;
}
}