package net.greencoding.thysdrus.event.core; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.greencoding.thysdrus.event.core.listener.EventListener; /** * * @author Nabil Ben Said (nabil.bensaid@gmail.com) * */ public class DefaultEventListenerRegistry implements EventListenerRegistry { private Map<Class<? extends Event>, List<EventListener<? extends Event>>> listenerMap = new HashMap<Class<? extends Event>, List<EventListener<? extends Event>>>(); private static EventListenerRegistry singelton = new DefaultEventListenerRegistry(); private DefaultEventListenerRegistry(){ } public static EventListenerRegistry getSingelton(){ return singelton; } @Override public void addListener(EventListener<? extends Event> listener) { if (listener == null){ return; } List<EventListener<? extends Event>> listenerList = listenerMap.get(listener.getEventType()); if (listenerList == null) { listenerList = new ArrayList<EventListener<? extends Event>>(); listenerMap.put(listener.getEventType(), listenerList); } if (! listenerList.contains(listener)) { listenerList.add(listener); } } @Override public void removeListener(EventListener<? extends Event> listener) { if (listener== null){ return; } List<EventListener<? extends Event>> listenerList = listenerMap.get(listener.getEventType()); if (listenerList != null && listenerList.contains(listener)) { listenerList.remove(listener); } } @Override public List<EventListener<? extends Event>> getEventListernersByEventType(Class<? extends Event> type) { return listenerMap.get(type); } }