package hudson.plugins.im.bot; import hudson.plugins.im.IMChat; import hudson.plugins.im.IMException; import hudson.plugins.im.IMMessage; import hudson.plugins.im.Sender; import hudson.plugins.im.tools.MessageHelper; import java.util.Arrays; import java.util.Map; import org.apache.commons.lang.ArrayUtils; /** * {@link BotCommand} to create a command alias. * * @author kutzi */ public class SetAliasCommand extends AbstractTextSendingCommand { private final Bot bot; public SetAliasCommand(Bot bot) { this.bot = bot; } @Override protected String getReply(Sender sender, String[] args) { if (args.length < 1) { throw new IllegalArgumentException(); } else if (args.length == 1) { Map<String, AliasCommand> aliases = this.bot.getAliases(); if (aliases.isEmpty()) { return "Defined aliases: none"; } else { StringBuilder msg = new StringBuilder("Defined aliases:"); for (Map.Entry<String, AliasCommand> entry : aliases.entrySet()) { msg.append("\n\t") .append(entry.getKey()) .append(entry.getValue().getHelp()); } return msg.toString(); } } else if (args.length < 3) { String alias = args[1]; AliasCommand aliasCmd = this.bot.removeAlias(alias); if (aliasCmd != null) { return "deleted alias: " + alias + aliasCmd.getHelp(); } else { return sender.getNickname() + ": don't know an alias called '" + alias + "'"; } } else { String alias = args[1]; String cmdName = args[2]; BotCommand cmd = this.bot.getCommand(cmdName); if (cmd == null) { return sender.getNickname() + ": sorry don't know a command or alias called '" + cmdName + "'"; } String[] cmdArguments = ArrayUtils.EMPTY_STRING_ARRAY; if (args.length > 3) { cmdArguments = MessageHelper.copyOfRange(args, 3, args.length); } AliasCommand aliasCmd = new AliasCommand(cmd, cmdName, cmdArguments); try { this.bot.addAlias(alias, aliasCmd); } catch (IllegalArgumentException e) { return sender.getNickname() + ": " + e.getMessage(); } return "created alias: " + alias + aliasCmd.getHelp(); } } public String getHelp() { return " [<alias> [<command>]] - defines a new alias, deletes one or lists all existing aliases"; } /** * An alias. */ public static class AliasCommand implements BotCommand { private final BotCommand command; private final String commandName; private final String[] arguments; public AliasCommand(BotCommand cmd, String commandName, String[] arguments) { this.command = cmd; this.commandName = commandName; this.arguments = arguments; } public void executeCommand(IMChat chat, IMMessage message, Sender sender, String[] args) throws IMException { String[] dynamicArgs = MessageHelper.copyOfRange(args, 1, args.length); String[] allArgs = MessageHelper.concat(new String[] {this.commandName}, this.arguments, dynamicArgs); System.out.println("Args: " + Arrays.toString(allArgs)); this.command.executeCommand(chat, message, sender, allArgs); } public String getHelp() { String help = " - alias for: '" + this.commandName; if (this.arguments.length > 0) { help += " " + MessageHelper.join(this.arguments, 0); } help += "'"; return help; } } }