- BindingDOMDataTreeChangeListenerAdapter(final BindingToNormalizedNodeCodec codec,
- final DataTreeChangeListener<T> 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<T> treeId,
+ final DataTreeChangeListener<T> listener) {
+ this.adapterContext = requireNonNull(adapterContext);
+ this.listener = requireNonNull(listener);
+ 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
+ public void onDataTreeChanged(final List<DataTreeCandidate> domChanges) {
+ final var changes = LazyDataTreeModification.<T>from(adapterContext.currentSerializer(), domChanges, store,
+ augment);
+ if (!changes.isEmpty()) {
+ listener.onDataTreeChanged(changes);
+ } else if (!initialSyncDone) {
+ onInitialData();
+ }