/*
* Created by IntelliJ IDEA.
* User: fmike
* Date: 22.06.2003
* Time: 2:11:51
*/
package net.sourceforge.pain.logic.event.console.command;
import net.sourceforge.pain.*;
import net.sourceforge.pain.logic.event.console.*;
import net.sourceforge.pain.logic.fn.*;
import net.sourceforge.pain.plugin.command.*;
import java.util.*;
public final class Help extends CommandHandler {
public void processCommand() throws Exception {
String commandName = commandParams;
if (commandName == null || commandName.trim().length() == 0) {
showHelp();
} else {
commandName = commandName.toLowerCase();
CommandHandler commandHandler = ConsoleInputEvent.getCommandHandler(commandName, console);
if (commandHandler == null || commandHandler.getClass() == ShowCommandTag.class) {
MessageOutFn.outln(console, "Command not found:{c" + commandName + "{x");
if (commandName.length() > 1) {
showHint(commandName);
}
} else if (!commandHandler.isAccessible()) {
MessageOutFn.outln(console, "Command not accessible:{c" + commandHandler.command.name + "{x");
} else {
MessageOutFn.outln(console, "HELP on command: {C" + commandHandler.command.name + "{x");
commandHandler.showHelp();
MessageOutFn.outln(console, "");
}
}
}
private void showHint(String commandName) {
commandName = commandName.substring(0, 1);
List commands = new ArrayList();
for (Iterator it = ConsoleInputEvent.getCommandMapper().getCommands().iterator(); it.hasNext();) {
TextCommand command = (TextCommand) it.next();
if (!command.name.startsWith(commandName)) {
continue;
}
if (command.commandClassName.endsWith("ShowCommandTag") || command.commandClassName.endsWith("SocialHandler")) {
continue;
}
commands.add(command);
}
if (!commands.isEmpty()) {
showCommandList(commandName, commands);
}
}
private void showCommandList(String commandName, List commands) {
MessageOutFn.outln(console, "Available commands (without socials) by mask:{c" + commandName + "*{x");
for (Iterator it = commands.iterator(); it.hasNext();) {
TextCommand textCommand = (TextCommand) it.next();
MessageOutFn.outln(console, textCommand.name);
}
}
public void showHelp() {
MessageOutFn.outln(console, "This command shows a help for any console command.");
MessageOutFn.outln(console, "Usage: help <command_name>");
MessageOutFn.outln(console, "Available commands (without socials):");
final CommandMapper commandMapper = ((CommandMapper) (Core.getPluginManager().getPlugin("command.CommandMapper")));
ArrayList list = new ArrayList(200);
for (Iterator it = commandMapper.getCommands().iterator(); it.hasNext();) {
TextCommand command = (TextCommand) it.next();
final String commandClassName = command.commandClassName;
if (commandClassName.endsWith("ShowCommandTag")) {
continue; // this is not command
}
if (commandClassName.endsWith("SocialHandler")) {
continue; // too many socials to show
}
// if (rejectedCommands.contains(commandClassName)) {
// continue; // command is rejected to user
// }
list.add(command.name);
}
Collections.sort(list);
for (Iterator it = list.iterator(); it.hasNext();) {
MessageOutFn.outln(console, (String) it.next());
}
}
}