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=c2b11900df050cedaf2f69b5e9db2c73f943513d;hpb=8e097558dbe46fc2fcc0899cc1fbbea0f4825499;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 c2b11900df..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 @@ -7,38 +7,60 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; -import com.google.common.base.Preconditions; -import java.util.Collection; +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.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. - * + * 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; - BindingDOMDataTreeChangeListenerAdapter(final BindingToNormalizedNodeCodec codec, - final DataTreeChangeListener listener, final LogicalDatastoreType store) { - this.codec = Preconditions.checkNotNull(codec); - this.listener = Preconditions.checkNotNull(listener); - this.store = Preconditions.checkNotNull(store); + private boolean initialSyncDone; + + BindingDOMDataTreeChangeListenerAdapter(final AdapterContext adapterContext, final DataTreeIdentifier treeId, + final DataTreeChangeListener listener) { + this.adapterContext = requireNonNull(adapterContext); + this.listener = requireNonNull(listener); + 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) { + final var changes = LazyDataTreeModification.from(adapterContext.currentSerializer(), domChanges, store, + augment); + if (!changes.isEmpty()) { + listener.onDataTreeChanged(changes); + } else if (!initialSyncDone) { + onInitialData(); + } } @Override - public void onDataTreeChanged(final Collection domChanges) { - final Collection> bindingChanges - = LazyDataTreeModification.from(codec, domChanges, store); - listener.onDataTreeChanged(bindingChanges); + public void onInitialData() { + initialSyncDone = true; + listener.onInitialData(); } }