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=a40b14ed8cd1333e0e289413e74394769d42aa55;hpb=c6680361d2856cf956e26c8b0a46ae54492eea3c;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 a40b14ed8c..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,99 +7,106 @@ */ package org.opendaylight.mdsal.binding.dom.adapter; +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.mdsal.binding.api.BindingTransactionChain; +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.common.api.TransactionChainListener; import org.opendaylight.mdsal.dom.api.DOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.mdsal.dom.api.DOMDataBroker.DataTreeChangeExtension; import org.opendaylight.mdsal.dom.api.DOMService; -import org.opendaylight.yangtools.concepts.ListenerRegistration; +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. + * 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 - * + * 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 { +@VisibleForTesting +public class BindingDOMDataBrokerAdapter extends AbstractBindingAdapter<@NonNull DOMDataBroker> implements DataBroker { + static final Factory BUILDER_FACTORY = Builder::new; + private final DataTreeChangeService treeChangeService; + 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); + } - static final Factory BUILDER_FACTORY = new BindingDOMAdapterBuilder.Factory() { + @Override + public ReadTransaction newReadOnlyTransaction() { + return new BindingDOMReadTransactionAdapter(adapterContext(), getDelegate().newReadOnlyTransaction()); + } - @Override - public BindingDOMAdapterBuilder newBuilder() { - return new Builder(); - } + @Override + public WriteTransaction newWriteOnlyTransaction() { + return new BindingDOMWriteTransactionAdapter<>(adapterContext(), getDelegate().newWriteOnlyTransaction()); + } - }; - private final DataTreeChangeService treeChangeService; + @Override + public ReadWriteTransaction newReadWriteTransaction() { + return new BindingDOMReadWriteTransactionAdapter(adapterContext(), getDelegate().newReadWriteTransaction()); + } - 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; - } + @Override + public TransactionChain createTransactionChain() { + return new BindingDOMTransactionChainAdapter(getDelegate().createTransactionChain(), adapterContext()); } @Override - public ReadTransaction newReadOnlyTransaction() { - return new BindingDOMReadTransactionAdapter(getDelegate().newReadOnlyTransaction(),getCodec()); + public TransactionChain createMergingTransactionChain() { + return new BindingDOMTransactionChainAdapter(getDelegate().createMergingTransactionChain(), adapterContext()); } @Override - public WriteTransaction newWriteOnlyTransaction() { - return new BindingDOMWriteTransactionAdapter<>(getDelegate().newWriteOnlyTransaction(),getCodec()); + public Registration registerTreeChangeListener(final DataTreeIdentifier treeId, + final DataTreeChangeListener listener) { + return getTreeChangeService().registerTreeChangeListener(treeId, listener); } @Override - public BindingTransactionChain createTransactionChain(final TransactionChainListener listener) { - return new BindingDOMTransactionChainAdapter(getDelegate(), getCodec(), listener); + @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); + protected DataBroker createInstance(final ClassToInstanceMap> delegates) { + return new BindingDOMDataBrokerAdapter(adapterContext(), delegates.getInstance(DOMDataBroker.class)); } - } - - @Override - public > ListenerRegistration - registerDataTreeChangeListener( - final DataTreeIdentifier treeId, final L listener) { - if (treeChangeService == null) { - throw new UnsupportedOperationException("Underlying data broker does not expose DOMDataTreeChangeService."); - } - return treeChangeService.registerDataTreeChangeListener(treeId, listener); - } - }