@Override public <T extends Enum> void squelch(EventListener<T, ?> el, T... events) { if (events == null || events.length == 0) { throw new IllegalArgumentException("Must unsubscribe from at least one event type"); } final Set<EventListenerDescriptor> listenerSet = listenerMap.get(new ComparableClassWrapper<Enum>(events[0].getClass())); if (listenerSet != null) { final Iterator<EventListenerDescriptor> itr = listenerSet.iterator(); while (itr.hasNext()) { final EventListenerDescriptor<T> elw = itr.next(); if (elw.getListener() == el) { if (elw.silence(Arrays.asList(events))) { itr.remove(); } break; } } } }
@Override public <T extends Enum> void squelch(EventListener<T, ?> el, Class<T> events) { final Set<EventListenerDescriptor> listenerSet = listenerMap.get(new ComparableClassWrapper<Enum>(events)); if (listenerSet != null) { final Iterator<EventListenerDescriptor> itr = listenerSet.iterator(); while (itr.hasNext()) { final EventListenerDescriptor<T> elw = itr.next(); if (elw.getListener() == el) { itr.remove(); break; } } } }
private <T extends Enum> void regsiterListener( EventListener<T, ?> el, Class<T> enumClass, Collection<T> events) { boolean found = false; final Set<EventListenerDescriptor> descriptorSet = getOrCreateListenerSet(enumClass); for (EventListenerDescriptor<T> descriptor : descriptorSet) { if (descriptor.getListener() == el) { descriptor.listenFor(events); found = true; break; } } if (!found) { descriptorSet.add(new EventListenerDescriptor<T>(el, events)); } }