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%2FBindingDOMDataBrokerAdapter.java;h=14d4dbc7064848574c01a3527ce004fee08c12b0;hb=b8a896e6dfc47374f99efee157683dc8a7ef8860;hp=acdf0d2c1bc6f4a440aeac534136f440d72bf261;hpb=99bc0e872a9a3f2d2c892ef81b08a5ff5dcd2339;p=mdsal.git diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataBrokerAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataBrokerAdapter.java index acdf0d2c1b..14d4dbc706 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataBrokerAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataBrokerAdapter.java @@ -7,104 +7,106 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; - -import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory; - +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.ImmutableSet; import java.util.Set; -import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; -import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeService; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; -import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; -import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService; -import org.opendaylight.controller.md.sal.dom.api.DOMService; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.mdsal.binding.api.DataBroker; +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.binding.api.ReadTransaction; +import org.opendaylight.mdsal.binding.api.ReadWriteTransaction; +import org.opendaylight.mdsal.binding.api.TransactionChain; +import org.opendaylight.mdsal.binding.api.WriteTransaction; +import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory; +import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension; +import org.opendaylight.mdsal.dom.api.DOMService; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; /** - * The DataBrokerImpl simply defers to the DOMDataBroker for all its operations. - * All transactions and listener registrations are wrapped by the DataBrokerImpl - * to allow binding aware components to use the DataBroker transparently. - * - * Besides this the DataBrokerImpl and it's collaborators also cache data that - * is already transformed from the binding independent to binding aware format + * The DataBrokerImpl simply defers to the DOMDataBroker for all its operations. All transactions and listener + * registrations are wrapped by the DataBrokerImpl to allow binding aware components to use the DataBroker + * transparently. * - + *

+ * Besides this the DataBrokerImpl and it's collaborators also cache data that is already transformed from the binding + * independent to binding aware format. */ -public class BindingDOMDataBrokerAdapter extends AbstractForwardedDataBroker implements DataBroker, DataTreeChangeService { - - - static final Factory BUILDER_FACTORY = new BindingDOMAdapterBuilder.Factory() { - - @Override - public BindingDOMAdapterBuilder newBuilder() { - return new Builder(); - } - - }; +@VisibleForTesting +public class BindingDOMDataBrokerAdapter extends AbstractBindingAdapter<@NonNull DOMDataBroker> implements DataBroker { + static final Factory BUILDER_FACTORY = Builder::new; private final DataTreeChangeService treeChangeService; - public BindingDOMDataBrokerAdapter(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec) { - super(domDataBroker, codec); - final DOMDataTreeChangeService domTreeChange = (DOMDataTreeChangeService) domDataBroker.getSupportedExtensions().get(DOMDataTreeChangeService.class); - if(domTreeChange != null) { - treeChangeService = BindingDOMDataTreeChangeServiceAdapter.create(codec, domTreeChange); - } else { - treeChangeService = null; - } + public BindingDOMDataBrokerAdapter(final AdapterContext adapterContext, final DOMDataBroker domDataBroker) { + super(adapterContext, domDataBroker); + final var domTreeChange = domDataBroker.extension(DataTreeChangeExtension.class); + treeChangeService = domTreeChange == null ? null + : new BindingDOMDataTreeChangeServiceAdapter(adapterContext, domTreeChange); } @Override + public ReadTransaction newReadOnlyTransaction() { + return new BindingDOMReadTransactionAdapter(adapterContext(), getDelegate().newReadOnlyTransaction()); + } - public ReadOnlyTransaction newReadOnlyTransaction() { - return new BindingDOMReadTransactionAdapter(getDelegate().newReadOnlyTransaction(),getCodec()); + @Override + public WriteTransaction newWriteOnlyTransaction() { + return new BindingDOMWriteTransactionAdapter<>(adapterContext(), getDelegate().newWriteOnlyTransaction()); } @Override public ReadWriteTransaction newReadWriteTransaction() { - return new BindingDOMReadWriteTransactionAdapter(getDelegate().newReadWriteTransaction(),getCodec()); + return new BindingDOMReadWriteTransactionAdapter(adapterContext(), getDelegate().newReadWriteTransaction()); } @Override - public WriteTransaction newWriteOnlyTransaction() { - return new BindingDOMWriteTransactionAdapter<>(getDelegate().newWriteOnlyTransaction(),getCodec()); + public TransactionChain createTransactionChain() { + return new BindingDOMTransactionChainAdapter(getDelegate().createTransactionChain(), adapterContext()); } @Override - public BindingTransactionChain createTransactionChain(final TransactionChainListener listener) { - return new BindingDOMTransactionChainAdapter(getDelegate(), getCodec(), listener); + public TransactionChain createMergingTransactionChain() { + return new BindingDOMTransactionChainAdapter(getDelegate().createMergingTransactionChain(), adapterContext()); + } + + @Override + public Registration registerTreeChangeListener(final DataTreeIdentifier treeId, + final DataTreeChangeListener listener) { + return getTreeChangeService().registerTreeChangeListener(treeId, listener); + } + + @Override + @Deprecated(since = "13.0.0", forRemoval = true) + public Registration registerLegacyTreeChangeListener(final DataTreeIdentifier treeId, + final DataTreeChangeListener listener) { + return getTreeChangeService().registerLegacyTreeChangeListener(treeId, listener); + } + + private @NonNull DataTreeChangeService getTreeChangeService() { + final var local = treeChangeService; + if (local == null) { + throw new UnsupportedOperationException("Underlying data broker does not expose DOMDataTreeChangeService."); + } + return local; } private static class Builder extends BindingDOMAdapterBuilder { + Builder(final AdapterContext adapterContext) { + super(adapterContext); + } @Override - public Set> getRequiredDelegates() { + public Set>> getRequiredDelegates() { return ImmutableSet.of(DOMDataBroker.class); } @Override - protected DataBroker createInstance(final BindingToNormalizedNodeCodec codec, - final ClassToInstanceMap delegates) { - final DOMDataBroker domDataBroker = delegates.getInstance(DOMDataBroker.class); - return new BindingDOMDataBrokerAdapter(domDataBroker, codec); - } - - } - - @Override - public > ListenerRegistration registerDataTreeChangeListener( - final DataTreeIdentifier treeId, final L listener) { - if(treeChangeService == null) { - throw new UnsupportedOperationException("Underlying data broker does not expose DOMDataTreeChangeService."); + protected DataBroker createInstance(final ClassToInstanceMap> delegates) { + return new BindingDOMDataBrokerAdapter(adapterContext(), delegates.getInstance(DOMDataBroker.class)); } - return treeChangeService.registerDataTreeChangeListener(treeId, listener); } - }