this.key = key;
}
- public NamespaceStorageNode getCtxNode() {
+ NamespaceStorageNode getCtxNode() {
return ctxNode;
}
- public K getKey() {
- return key;
+ final <V> boolean isRequestedValue(final NamespaceBehaviour<K, ? , ?> behavior,
+ final NamespaceStorageNode storage, final V value) {
+ return value == behavior.getFrom(ctxNode, key);
}
- void trigger(final Object value) {
- onValueAdded(key, value);
- }
-
- abstract void onValueAdded(Object key, Object value);
+ abstract void onValueAdded(Object value);
}
protected final NamespaceBehaviour<K, V, N> delegate;
this.delegate = delegate;
}
- protected abstract void addListener(K key, ValueAddedListener<K> listener);
-
- protected abstract boolean isRequestedValue(ValueAddedListener<K> listener, NamespaceStorageNode storage, V value);
+ abstract void addListener(K key, ValueAddedListener<K> listener);
@Override
public abstract void addTo(NamespaceStorageNode storage, K key, V value);
final Iterator<ValueAddedListener<K>> keyListeners, final V value) {
List<ValueAddedListener<K>> toNotify = new ArrayList<>();
while (keyListeners.hasNext()) {
- ValueAddedListener<K> listener = keyListeners.next();
- if (isRequestedValue(listener, storage, value)) {
+ final ValueAddedListener<K> listener = keyListeners.next();
+ if (listener.isRequestedValue(this, storage, value)) {
keyListeners.remove();
toNotify.add(listener);
}
}
for (ValueAddedListener<K> listener : toNotify) {
- listener.trigger(value);
+ listener.onValueAdded(value);
}
}
}
}
- final void addValueListener(final ValueAddedListener<K> listener) {
- addListener(listener.key, listener);
- }
-
final void addDerivedNamespace(final VirtualNamespaceContext<?, V, ?, K> namespace) {
derivedNamespaces.add(namespace);
}
"Namespace %s does not support listeners", type);
final NamespaceBehaviourWithListeners<K, V, N> casted = (NamespaceBehaviourWithListeners<K, V, N>) behaviour;
- casted.addValueListener(new ValueAddedListener<K>(this, key) {
+ casted.addListener(key, new ValueAddedListener<K>(this, key) {
@Override
- void onValueAdded(final Object key, final Object value) {
+ void onValueAdded(final Object value) {
listener.namespaceItemAdded(StatementContextBase.this, type, key, value);
}
});
import com.google.common.collect.Multimap;
import org.opendaylight.yangtools.yang.model.api.meta.IdentifierNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedNamespaceBehaviour;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
final class VirtualNamespaceContext<K, V, N extends IdentifierNamespace<K, V>, D>
extends NamespaceBehaviourWithListeners<K, V, N> {
}
@Override
- protected boolean isRequestedValue(final ValueAddedListener<K> listener, final NamespaceStorageNode storage,
- final V value) {
- return value == getFrom(listener.getCtxNode(), listener.getKey());
- }
-
- @Override
- protected void addListener(final K key, final ValueAddedListener<K> listener) {
+ void addListener(final K key, final ValueAddedListener<K> listener) {
listeners.put(derivedDelegate.getSignificantKey(key), listener);
}
- void addedToSourceNamespace(final NamespaceBehaviour.NamespaceStorageNode storage, final D key, final V value) {
+ void addedToSourceNamespace(final NamespaceStorageNode storage, final D key, final V value) {
notifyListeners(storage, listeners.get(key).iterator(), value);
}