package com.gorillalogic.monkeytalk.sender;
import java.util.Hashtable;
import java.util.Map;
public class CommandSenderFactory {
private static Map<String,Class> classMap = new Hashtable<String,Class>();
private static final String DEFAULT_KEY = "default";
static {
registerDefaultClass(CommandSender.class);
}
public static void registerClass(String key, Class klass) {
classMap.put(key,klass);
}
public static void registerDefaultClass(Class klass) {
CommandSenderFactory.registerClass(CommandSenderFactory.DEFAULT_KEY, klass);
}
public static CommandSender createCommandSender(String host, int port) {
return createCommandSender(DEFAULT_KEY, host, port, null);
}
public static CommandSender createCommandSender(String host, int port, String path) {
return createCommandSender(DEFAULT_KEY, host, port, path);
}
public static CommandSender createCommandSender(String key, String host, int port, String path) {
Class klass = classMap.get(key);
if (klass==null) {
throw new IllegalArgumentException(
"no CommandSender registered with key '" + key + "'");
}
CommandSender commandSender = null;
try {
commandSender = (CommandSender)klass.newInstance();
commandSender.init(null, host, port, path);
} catch (Exception e) {
// somebody registered something bad here
throw new RuntimeException(e.getMessage());
}
return commandSender;
}
}