@Nonnull @ReturnsMutableCopy public ICommonsMap <EMicroEvent, CallbackList <IMicroEventTarget>> getAllEventTargets () { return new CommonsEnumMap <> (m_aEventTargets); }
@Nonnull public EChange unregisterEventTarget (@Nonnull final EMicroEvent eEventType, @Nonnull final IMicroEventTarget aTarget) { ValueEnforcer.notNull (eEventType, "EventType"); ValueEnforcer.notNull (aTarget, "EventTarget"); if (m_aEventTargets != null && m_aEventTargets.isNotEmpty ()) { final CallbackList <IMicroEventTarget> aSet = m_aEventTargets.get (eEventType); if (aSet != null) return aSet.removeObject (aTarget); } return EChange.UNCHANGED; }
@Nonnull public EChange registerEventTarget (@Nonnull final EMicroEvent eEventType, @Nonnull final IMicroEventTarget aTarget) { ValueEnforcer.notNull (eEventType, "EventType"); ValueEnforcer.notNull (aTarget, "EventTarget"); if (m_aEventTargets == null) m_aEventTargets = new CommonsEnumMap <> (EMicroEvent.class); final CallbackList <IMicroEventTarget> aSet = m_aEventTargets.computeIfAbsent (eEventType, k -> new CallbackList <> ()); return EChange.valueOf (aSet.add (aTarget)); }
@Nonnull @ReturnsMutableCopy public CallbackList <IMicroEventTarget> getAllEventTargets (@Nullable final EMicroEvent eEvent) { return new CallbackList <> (m_aEventTargets == null ? null : m_aEventTargets.get (eEvent)); }
protected final void internalTriggerEvent (@Nonnull final EMicroEvent eEventType, @Nonnull final IMicroEvent aEvent) { // Any event targets present? if (m_aEventTargets != null && m_aEventTargets.isNotEmpty ()) { // Get all event handler final CallbackList <IMicroEventTarget> aTargets = m_aEventTargets.get (eEventType); if (aTargets != null) aTargets.forEach (x -> x.handleEvent (aEvent)); } // Bubble to parent if (m_aParentNode != null) m_aParentNode.internalTriggerEvent (eEventType, aEvent); }
@Nonnull @ReturnsMutableCopy private ICommonsMap <State, ICommonsNavigableSet <Long>> _getStateMap () { // Group threads by state final ICommonsMap <State, ICommonsNavigableSet <Long>> aStateMap = new CommonsEnumMap <> (State.class); for (final ThreadDescriptor aDescriptor : m_aList) { final State eState = aDescriptor.getThreadState (); final ICommonsNavigableSet <Long> aThreadIDs = aStateMap.computeIfAbsent (eState, k -> new CommonsTreeSet <> ()); aThreadIDs.add (Long.valueOf (aDescriptor.getThreadID ())); } return aStateMap; }