package de.mrbesen.telegram.commands; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import de.mrbesen.telegram.TelegramUser; public class CommandManager { private static String CMDPATTERN = "^[\\w-]+$"; private Multimap handlerlist = ArrayListMultimap.create();//list of all registered CommandHandler public CommandManager() { } void onCommand(String line, TelegramUser sender) {//called by the api (/-prefix allready removed) line = line.trim(); String[] split = line.split(" ",2); String cmd = split[0].toLowerCase(); if(cmd.matches(CMDPATTERN)) { String[] args = new String[0]; if(split.length == 2) { args = split[1].split(" "); } //call for(CommandHandler cmdhand : handlerlist.get(cmd)) { try { boolean result = cmdhand.onCommand(sender, cmd, args); if(result) break; } catch(Throwable t) { System.err.println("Error, while performing Command. "); t.printStackTrace(); } } } else { //unknown cmd! } } public void registerCommand(String cmd, CommandHandler handler) { if(cmd == null) { throw new NullPointerException("cmd is not allowed to be null"); } if(handler == null) { throw new NullPointerException("handler is not allowed to be null"); } cmd = cmd.trim(); if(cmd.startsWith("/")) { cmd = cmd.substring(1); } if(cmd.isEmpty()) { throw new RuntimeException("cmd is not allowed to be empty"); } if(cmd.matches(CMDPATTERN)) { handlerlist.put(cmd.toLowerCase(), handler); //registered successfull! } else { throw new IllegalArgumentException("cmd contains unallowed characters. Allowed: a-zA-Z0-9_-"); } } }