private static class ChangeBroker.ListenerSet extends java.lang.Object implements java.lang.Iterable<RecordChangeListener>
When the set is iterated, it first walks its links to other listener sets to the outermost in scope and iterates those first. It then walks reverse (weak) links back to more deeply nested scopes and iterates listeners in those sets, and so on. Duplicate listeners are only visited once.
Modifier and Type | Class and Description |
---|---|
private class |
ChangeBroker.ListenerSet.Iter
An iterator which walks all record change listeners registered to receive notifications
for a DMO type.
|
Modifier and Type | Field and Description |
---|---|
private java.util.LinkedHashSet<RecordChangeListener> |
interested
Entities which have registered interest in DMO property changes
|
private java.lang.ref.WeakReference<ChangeBroker.ListenerSet> |
nextInner
Next set of listeners registered for the same events in an inner scope
|
private ChangeBroker.ListenerSet |
nextOuter
Next set of listeners registered for the same events in an outer scope
|
Modifier | Constructor and Description |
---|---|
private |
ListenerSet() |
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
add(RecordChangeListener listener)
Add a listener.
|
(package private) boolean |
isEmpty()
Indicate whether the set of registered listeners is empty.
|
java.util.Iterator<RecordChangeListener> |
iterator()
Get an iterator which will iterate over outermost to innermost listeners in all outer
listener sets linked to and including this listener set.
|
(package private) void |
link(ChangeBroker.ListenerSet nextOuter)
Link to this object the next related listener set in an outer scope.
|
(package private) boolean |
remove(RecordChangeListener listener)
Remove a listener.
|
(package private) void |
unlink()
Unlink this object from its next outer and next inner listener sets, if any, and link
those sets to each other instead.
|
private final java.util.LinkedHashSet<RecordChangeListener> interested
private ChangeBroker.ListenerSet nextOuter
private java.lang.ref.WeakReference<ChangeBroker.ListenerSet> nextInner
boolean add(RecordChangeListener listener)
listener
- Listener to be registered.true
if the listener was added; false
if it was already present.boolean remove(RecordChangeListener listener)
listener
- Listener to be deregistered.true
if the listener was removed; false
if it could not be
found.boolean isEmpty()
true
if empty, else false
void link(ChangeBroker.ListenerSet nextOuter)
A link from nextOuter
is made back to this listener set, so iteration across
these sets can work its way back from the outer set to this one. The link in this
direction is made with a weak reference, so this set can be garbage collected if its
scope is popped.
nextOuter
- Outer listener set to be linked to this one.void unlink()
public java.util.Iterator<RecordChangeListener> iterator()
iterator
in interface java.lang.Iterable<RecordChangeListener>