X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fadapter%2FBindingDOMDataTreeChangeListenerAdapter.java;h=f46529d46673433625c02e431ab5a8f054f8c4c9;hb=b8a896e6dfc47374f99efee157683dc8a7ef8860;hp=046536511f67b5bbb51e4fcc6f4c748a01f87a44;hpb=fa49cff3709ce3bb64f0d4c473af477431d10cf0;p=mdsal.git diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeListenerAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeListenerAdapter.java index 046536511f..f46529d466 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeListenerAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeListenerAdapter.java @@ -9,40 +9,58 @@ package org.opendaylight.mdsal.binding.dom.adapter; import static java.util.Objects.requireNonNull; -import java.util.Collection; +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.DataTreeModification; +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.api.schema.tree.DataTreeCandidate; +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 implements DOMDataTreeChangeListener { - - private final BindingToNormalizedNodeCodec codec; +@NonNullByDefault +final class BindingDOMDataTreeChangeListenerAdapter implements DOMDataTreeChangeListener { + private final AdapterContext adapterContext; private final DataTreeChangeListener listener; private final LogicalDatastoreType store; + private final @Nullable Class> augment; + + private boolean initialSyncDone; - BindingDOMDataTreeChangeListenerAdapter(final BindingToNormalizedNodeCodec codec, - final DataTreeChangeListener listener, final LogicalDatastoreType store) { - this.codec = requireNonNull(codec); + BindingDOMDataTreeChangeListenerAdapter(final AdapterContext adapterContext, final DataTreeIdentifier treeId, + final DataTreeChangeListener listener) { + this.adapterContext = requireNonNull(adapterContext); this.listener = requireNonNull(listener); - this.store = requireNonNull(store); + store = treeId.datastore(); + augment = extractAugment(treeId.path().getTargetType()); + } + + @SuppressWarnings("unchecked") + private static @Nullable Class> extractAugment(final Class target) { + return Augmentation.class.isAssignableFrom(target) + ? (Class>) target.asSubclass(Augmentation.class) : null; } @Override - public void onDataTreeChanged(final Collection domChanges) { - final Collection> bindingChanges = LazyDataTreeModification.from(codec, domChanges, - store); - listener.onDataTreeChanged(bindingChanges); + public void onDataTreeChanged(final List domChanges) { + final var changes = LazyDataTreeModification.from(adapterContext.currentSerializer(), domChanges, store, + augment); + if (!changes.isEmpty()) { + listener.onDataTreeChanged(changes); + } else if (!initialSyncDone) { + onInitialData(); + } } @Override public void onInitialData() { + initialSyncDone = true; listener.onInitialData(); } }