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=31296762d6c9bb165694d81a8992db0dc2c80c96;hpb=f0d936f01e3b8914c4f3858a384dc5e81e949188;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 31296762d6..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 @@ -10,36 +10,57 @@ 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.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 { +@NonNullByDefault +final class BindingDOMDataTreeChangeListenerAdapter implements DOMDataTreeChangeListener { private final AdapterContext adapterContext; private final DataTreeChangeListener listener; private final LogicalDatastoreType store; + private final @Nullable Class> augment; - BindingDOMDataTreeChangeListenerAdapter(final AdapterContext adapterContext, - final DataTreeChangeListener listener, final LogicalDatastoreType store) { + private boolean initialSyncDone; + + 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 List domChanges) { - listener.onDataTreeChanged(LazyDataTreeModification.from(adapterContext.currentSerializer(), domChanges, - store)); + 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(); } }