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%2FBindingDOMDataTreeChangeServiceAdapter.java;h=9ec4e275ecdfa8694782e87c3273b5c31543af58;hb=1487e0720cbb7f7b1f04507a85494c1a96dc82ad;hp=ebdf8c4949ce8d8f8298ed4343c533c085c16dca;hpb=8e097558dbe46fc2fcc0899cc1fbbea0f4825499;p=mdsal.git diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapter.java index ebdf8c4949..9ec4e275ec 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapter.java @@ -7,62 +7,73 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; -import com.google.common.base.Preconditions; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.api.ClusteredDataTreeChangeListener; +import org.opendaylight.mdsal.binding.api.DataChangeListener; +import org.opendaylight.mdsal.binding.api.DataListener; import org.opendaylight.mdsal.binding.api.DataTreeChangeListener; import org.opendaylight.mdsal.binding.api.DataTreeChangeService; import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; +import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; /** - * Adapter exposing Binding {@link DataTreeChangeService} and wrapping - * {@link DOMDataTreeChangeService} and is responsible for translation - * and instantiation of {@link BindingDOMDataTreeChangeListenerAdapter} - * adapters. + * Adapter exposing Binding {@link DataTreeChangeService} and wrapping a {@link DataTreeChangeExtension} and is + * responsible for translation and instantiation of {@link BindingDOMDataTreeChangeListenerAdapter} adapters. * *

- * Each registered {@link DataTreeChangeListener} is wrapped using - * adapter and registered directly to DOM service. + * Each registered {@link DataTreeChangeListener} is wrapped using adapter and registered directly to DOM service. */ -final class BindingDOMDataTreeChangeServiceAdapter implements DataTreeChangeService { +final class BindingDOMDataTreeChangeServiceAdapter extends AbstractBindingAdapter + implements DataTreeChangeService { + BindingDOMDataTreeChangeServiceAdapter(final AdapterContext adapterContext, + final DataTreeChangeExtension dataTreeChangeExtension) { + super(adapterContext, dataTreeChangeExtension); + } - private final BindingToNormalizedNodeCodec codec; - private final DOMDataTreeChangeService dataTreeChangeService; + @Override + public Registration registerDataTreeChangeListener(final DataTreeIdentifier treeId, + final DataTreeChangeListener listener) { + final var domIdentifier = toDomTreeIdentifier(treeId); + final var storeType = treeId.datastore(); + final var target = treeId.path().getTargetType(); + final var augment = Augmentation.class.isAssignableFrom(target) ? target : null; - private BindingDOMDataTreeChangeServiceAdapter(final BindingToNormalizedNodeCodec codec, - final DOMDataTreeChangeService dataTreeChangeService) { - this.codec = Preconditions.checkNotNull(codec); - this.dataTreeChangeService = Preconditions.checkNotNull(dataTreeChangeService); - } + final var domListener = listener instanceof ClusteredDataTreeChangeListener + ? new BindingClusteredDOMDataTreeChangeListenerAdapter<>(adapterContext(), + (ClusteredDataTreeChangeListener) listener, storeType, augment) + : new BindingDOMDataTreeChangeListenerAdapter<>(adapterContext(), listener, storeType, augment); - static DataTreeChangeService create(final BindingToNormalizedNodeCodec codec, - final DOMDataTreeChangeService dataTreeChangeService) { - return new BindingDOMDataTreeChangeServiceAdapter(codec, dataTreeChangeService); + return getDelegate().registerDataTreeChangeListener(domIdentifier, domListener); } @Override - public > ListenerRegistration - registerDataTreeChangeListener(final DataTreeIdentifier treeId, final L listener) { - final DOMDataTreeIdentifier domIdentifier = toDomTreeIdentifier(treeId); + public Registration registerDataListener(final DataTreeIdentifier treeId, + final DataListener listener) { + return getDelegate().registerDataTreeChangeListener(toDomTreeInstance(treeId), + new BindingDOMDataListenerAdapter<>(adapterContext(), listener)); + } - @SuppressWarnings({ "rawtypes", "unchecked" }) - final BindingDOMDataTreeChangeListenerAdapter domListener = - listener instanceof ClusteredDataTreeChangeListener - ? new BindingClusteredDOMDataTreeChangeListenerAdapter<>( - codec, (ClusteredDataTreeChangeListener) listener, treeId.getDatastoreType()) - : new BindingDOMDataTreeChangeListenerAdapter<>(codec, listener, treeId.getDatastoreType()); + @Override + public Registration registerDataChangeListener(final DataTreeIdentifier treeId, + final DataChangeListener listener) { + return getDelegate().registerDataTreeChangeListener(toDomTreeInstance(treeId), + new BindingDOMDataChangeListenerAdapter<>(adapterContext(), listener)); + } - final ListenerRegistration> domReg = - dataTreeChangeService.registerDataTreeChangeListener(domIdentifier, domListener); - return new BindingDataTreeChangeListenerRegistration<>(listener, domReg); + private @NonNull DOMDataTreeIdentifier toDomTreeIdentifier(final DataTreeIdentifier treeId) { + return DOMDataTreeIdentifier.of(treeId.datastore(), + currentSerializer().toYangInstanceIdentifier(treeId.path())); } - private DOMDataTreeIdentifier toDomTreeIdentifier(final DataTreeIdentifier treeId) { - final YangInstanceIdentifier domPath = codec.toYangInstanceIdentifierBlocking(treeId.getRootIdentifier()); - return new DOMDataTreeIdentifier(treeId.getDatastoreType(), domPath); + private @NonNull DOMDataTreeIdentifier toDomTreeInstance(final DataTreeIdentifier treeId) { + final var instanceIdentifier = treeId.path(); + if (instanceIdentifier.isWildcarded()) { + throw new IllegalArgumentException("Cannot register listener for wildcard " + instanceIdentifier); + } + return toDomTreeIdentifier(treeId); } }