Deprecate Clustered(DOM)DataTreeChangeListener
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / dom / adapter / BindingDOMDataTreeChangeListenerAdapter.java
index 65de385c4b4c3e1ee836093d7ec0ecfdc3686021..f46529d46673433625c02e431ab5a8f054f8c4c9 100644 (file)
@@ -10,9 +10,13 @@ package org.opendaylight.mdsal.binding.dom.adapter;
 import static java.util.Objects.requireNonNull;
 
 import java.util.List;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
 
@@ -20,20 +24,27 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
  * Adapter wrapping Binding {@link DataTreeChangeListener} and exposing it as {@link DOMDataTreeChangeListener}
  * and translated DOM events to their Binding equivalent.
  */
-class BindingDOMDataTreeChangeListenerAdapter<T extends DataObject> implements DOMDataTreeChangeListener {
+@NonNullByDefault
+final class BindingDOMDataTreeChangeListenerAdapter<T extends DataObject> implements DOMDataTreeChangeListener {
     private final AdapterContext adapterContext;
     private final DataTreeChangeListener<T> listener;
     private final LogicalDatastoreType store;
-    private final Class<T> augment;
+    private final @Nullable Class<? extends Augmentation<?>> augment;
 
     private boolean initialSyncDone;
 
-    BindingDOMDataTreeChangeListenerAdapter(final AdapterContext adapterContext,
-            final DataTreeChangeListener<T> listener, final LogicalDatastoreType store, final Class<T> augment) {
+    BindingDOMDataTreeChangeListenerAdapter(final AdapterContext adapterContext, final DataTreeIdentifier<T> treeId,
+            final DataTreeChangeListener<T> listener) {
         this.adapterContext = requireNonNull(adapterContext);
         this.listener = requireNonNull(listener);
-        this.store = requireNonNull(store);
-        this.augment = augment;
+        store = treeId.datastore();
+        augment = extractAugment(treeId.path().getTargetType());
+    }
+
+    @SuppressWarnings("unchecked")
+    private static @Nullable Class<? extends Augmentation<?>> extractAugment(final Class<?> target) {
+        return Augmentation.class.isAssignableFrom(target)
+            ? (Class<? extends Augmentation<?>>) target.asSubclass(Augmentation.class) : null;
     }
 
     @Override