X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fbroker%2Fimpl%2FAbstractDOMDataBroker.java;h=d93e9546fda24a15bea5ea28f9290ba44a036707;hb=b712eb01354ddb5878008e2a2e8f03fb19b92555;hp=b705bd62a1e38ecebe82c76f269bbe79ffd44351;hpb=32715b020aca7945bc22476138f20ef7c78a3620;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMDataBroker.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMDataBroker.java old mode 100644 new mode 100755 index b705bd62a1..d93e9546fd --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMDataBroker.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/AbstractDOMDataBroker.java @@ -8,17 +8,25 @@ package org.opendaylight.controller.md.sal.dom.broker.impl; import static com.google.common.base.Preconditions.checkState; +import com.google.common.collect.ImmutableMap; +import java.util.Collections; import java.util.EnumMap; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicLong; +import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; 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.DOMDataBrokerExtension; import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener; +import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; +import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; +import org.opendaylight.controller.sal.core.spi.data.DOMStoreTreeChangePublisher; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; @@ -29,10 +37,34 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact private final AtomicLong txNum = new AtomicLong(); private final AtomicLong chainNum = new AtomicLong(); + private final Map, DOMDataBrokerExtension> extensions; private volatile AutoCloseable closeable; protected AbstractDOMDataBroker(final Map datastores) { super(datastores); + + boolean treeChange = true; + for (DOMStore ds : datastores.values()) { + if (!(ds instanceof DOMStoreTreeChangePublisher)) { + treeChange = false; + break; + } + } + + if (treeChange) { + extensions = ImmutableMap., DOMDataBrokerExtension>of(DOMDataTreeChangeService.class, new DOMDataTreeChangeService() { + @Nonnull + @Override + public ListenerRegistration registerDataTreeChangeListener(@Nonnull final DOMDataTreeIdentifier treeId, @Nonnull final L listener) { + DOMStore publisher = getTxFactories().get(treeId.getDatastoreType()); + checkState(publisher != null, "Requested logical data store is not available."); + + return ((DOMStoreTreeChangePublisher)publisher).registerTreeChangeListener(treeId.getRootIdentifier(), listener); + } + }); + } else { + extensions = Collections.emptyMap(); + } } public void setCloseable(final AutoCloseable closeable) { @@ -66,6 +98,12 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact return potentialStore.registerChangeListener(path, listener, triggeringScope); } + @Nonnull + @Override + public Map, DOMDataBrokerExtension> getSupportedExtensions() { + return extensions; + } + @Override public DOMTransactionChain createTransactionChain(final TransactionChainListener listener) { checkNotClosed();