X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-inmemory-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fstore%2Fimpl%2Ftree%2FListenerNode.java;h=00be7d68b78effab5aa79e07c2bee6873d4b0ed2;hb=e2607370f5ac443a5a2f1f00f693f82a0b57161d;hp=0aef1429c4eaa19a22c578da74dc72dc4281a99d;hpb=d042a4bad5c1cd4a8907529677425573039fc04f;p=controller.git diff --git a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java index 0aef1429c4..00be7d68b7 100644 --- a/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java +++ b/opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/tree/ListenerNode.java @@ -7,20 +7,14 @@ */ package org.opendaylight.controller.md.sal.dom.store.impl.tree; -import com.google.common.base.Optional; -import java.lang.ref.Reference; -import java.lang.ref.WeakReference; -import java.util.ArrayList; +import com.google.common.base.Preconditions; import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import java.util.Optional; +import org.opendaylight.controller.md.sal.dom.spi.RegistrationTreeNode; import org.opendaylight.controller.md.sal.dom.store.impl.DataChangeListenerRegistration; -import org.opendaylight.controller.md.sal.dom.store.impl.tree.ListenerTree.DataChangeListenerRegistrationImpl; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.tree.StoreTreeNode; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This is a single node within the listener tree. Note that the data returned from @@ -29,29 +23,30 @@ import org.slf4j.LoggerFactory; * unclosed. * * @author Robert Varga + * + * @deprecated Use {@link RegistrationTreeNode} instead. */ +@Deprecated public class ListenerNode implements StoreTreeNode, Identifiable { + final RegistrationTreeNode> delegate; - private static final Logger LOG = LoggerFactory.getLogger(ListenerNode.class); - - private final Collection> listeners = new ArrayList<>(); - private final Map children = new HashMap<>(); - private final PathArgument identifier; - private final Reference parent; - - ListenerNode(final ListenerNode parent, final PathArgument identifier) { - this.parent = new WeakReference<>(parent); - this.identifier = identifier; + ListenerNode(final RegistrationTreeNode> delegate) { + this.delegate = Preconditions.checkNotNull(delegate); } @Override public PathArgument getIdentifier() { - return identifier; + return delegate.getIdentifier(); } @Override public Optional getChild(final PathArgument child) { - return Optional.fromNullable(children.get(child)); + final RegistrationTreeNode> c = delegate.getExactChild(child); + if (c == null) { + return Optional.empty(); + } + + return Optional.of(new ListenerNode(c)); } /** @@ -62,45 +57,25 @@ public class ListenerNode implements StoreTreeNode, Identifiable

> getListeners() { - return listeners; - } - - ListenerNode ensureChild(final PathArgument child) { - ListenerNode potential = children.get(child); - if (potential == null) { - potential = new ListenerNode(this, child); - children.put(child, potential); - } - return potential; - } - - void addListener(final DataChangeListenerRegistration listener) { - listeners.add(listener); - LOG.debug("Listener {} registered", listener); + return delegate.getRegistrations(); } - void removeListener(final DataChangeListenerRegistrationImpl listener) { - listeners.remove(listener); - LOG.debug("Listener {} unregistered", listener); - - // We have been called with the write-lock held, so we can perform some cleanup. - removeThisIfUnused(); + @Override + public int hashCode() { + return delegate.hashCode(); } - private void removeThisIfUnused() { - final ListenerNode p = parent.get(); - if (p != null && listeners.isEmpty() && children.isEmpty()) { - p.removeChild(identifier); + @Override + public boolean equals(final Object obj) { + if (obj == null || getClass() != obj.getClass()) { + return false; } - } - private void removeChild(final PathArgument arg) { - children.remove(arg); - removeThisIfUnused(); + return delegate.equals(((ListenerNode)obj).delegate); } @Override public String toString() { - return "Node [identifier=" + identifier + ", listeners=" + listeners.size() + ", children=" + children.size() + "]"; + return delegate.toString(); } }