Fix findbugs violations in md-sal - part 1
[controller.git] / opendaylight / md-sal / sal-inmemory-datastore / src / main / java / org / opendaylight / controller / md / sal / dom / store / impl / tree / ListenerNode.java
index 0aef1429c4eaa19a22c578da74dc72dc4281a99d..00be7d68b78effab5aa79e07c2bee6873d4b0ed2 100644 (file)
@@ -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<ListenerNode>, Identifiable<PathArgument> {
+    final RegistrationTreeNode<DataChangeListenerRegistration<?>> delegate;
 
-    private static final Logger LOG = LoggerFactory.getLogger(ListenerNode.class);
-
-    private final Collection<DataChangeListenerRegistration<?>> listeners = new ArrayList<>();
-    private final Map<PathArgument, ListenerNode> children = new HashMap<>();
-    private final PathArgument identifier;
-    private final Reference<ListenerNode> parent;
-
-    ListenerNode(final ListenerNode parent, final PathArgument identifier) {
-        this.parent = new WeakReference<>(parent);
-        this.identifier = identifier;
+    ListenerNode(final RegistrationTreeNode<DataChangeListenerRegistration<?>> delegate) {
+        this.delegate = Preconditions.checkNotNull(delegate);
     }
 
     @Override
     public PathArgument getIdentifier() {
-        return identifier;
+        return delegate.getIdentifier();
     }
 
     @Override
     public Optional<ListenerNode> getChild(final PathArgument child) {
-        return Optional.fromNullable(children.get(child));
+        final RegistrationTreeNode<DataChangeListenerRegistration<?>> 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<ListenerNode>, Identifiable<P
      * @return the list of current listeners
      */
     public Collection<DataChangeListenerRegistration<?>> 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();
     }
 }