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;
* 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