package org.royaldev.royalbot.handlers; import org.royaldev.royalbot.listeners.IRCListener; import java.util.Collection; import java.util.Map; import java.util.TreeMap; /** * A class for registering and retrieving {@link org.royaldev.royalbot.listeners.IRCListener}s. */ public class ListenerHandler implements Handler<IRCListener, String> { private final Map<String, IRCListener> listeners = new TreeMap<>(); /** * Registers a listener into the ListenerHandler. * <br/> * <strong>Note:</strong> If a listener with the same name is already registered, this method will <em>not</em> * register your listener. * * @param listener Listener to be registered * @return If listener was registered */ @Override public boolean register(IRCListener listener) { final String name = listener.getName().toLowerCase(); synchronized (listeners) { if (listeners.containsKey(name)) return false; listeners.put(name, listener); } return true; } @Override public boolean unregister(IRCListener listener) { return unregister(listener.getName()); } /** * Removes a registered listener by its name. Case does not matter. * <br/> * If no listener is registered under the provided name, this method does nothing. * * @param name Name to remove */ public boolean unregister(String name) { name = name.toLowerCase(); boolean wasRemoved = false; synchronized (listeners) { if (listeners.containsKey(name)) { listeners.remove(name); wasRemoved = true; } } return wasRemoved; } /** * Gets a listener for the listener name. Case does not matter. * * @param name Name of the listener to get * @return IRCListener, or null if none registered */ public IRCListener get(String name) { name = name.toLowerCase(); synchronized (listeners) { if (listeners.containsKey(name)) return listeners.get(name); } return null; } /** * Gets all listeners registered. * * @return Collection */ public Collection<IRCListener> getAll() { synchronized (listeners) { return listeners.values(); } } }