X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDefaultShardDataTreeChangeListenerPublisher.java;h=02326e0f84364ab65e007224a09f6a8217f33f96;hb=refs%2Fchanges%2F08%2F55108%2F5;hp=a63859e9e695516488129a496319d1070e9b3804;hpb=e7512222d7d9e3149feb6a90eeb726e9391887fa;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java index a63859e9e6..02326e0f84 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DefaultShardDataTreeChangeListenerPublisher.java @@ -7,9 +7,11 @@ */ package org.opendaylight.controller.cluster.datastore; +import com.google.common.base.Optional; import java.util.Collection; +import java.util.function.Consumer; import javax.annotation.concurrent.NotThreadSafe; -import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; +import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration; import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTreeChangePublisher; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -34,11 +36,6 @@ final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStore processCandidateTree(candidate); } - @Override - public ShardDataTreeChangeListenerPublisher newInstance() { - return new DefaultShardDataTreeChangeListenerPublisher(); - } - @Override protected void notifyListener(AbstractDOMDataTreeChangeListenerRegistration registration, Collection changes) { @@ -51,18 +48,32 @@ final class DefaultShardDataTreeChangeListenerPublisher extends AbstractDOMStore } @Override - public ListenerRegistration - registerTreeChangeListener(final YangInstanceIdentifier treeId, final L listener) { - final AbstractDOMDataTreeChangeListenerRegistration registration = - super.registerTreeChangeListener(treeId, (org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener) - changes -> listener.onDataTreeChanged(changes)); + public void registerTreeChangeListener(YangInstanceIdentifier treeId, DOMDataTreeChangeListener listener, + Optional initialState, + Consumer> onRegistration) { + AbstractDOMDataTreeChangeListenerRegistration + registration = super.registerTreeChangeListener(treeId, + (org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener)changes -> + listener.onDataTreeChanged(changes)); + + onRegistration.accept( + new org.opendaylight.controller.md.sal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration< + DOMDataTreeChangeListener>(listener) { + @Override + protected void removeRegistration() { + registration.close(); + } + }); + + if (initialState.isPresent()) { + notifySingleListener(treeId, listener, initialState.get()); + } + } - return new org.opendaylight.controller.md.sal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration( - listener) { - @Override - protected void removeRegistration() { - registration.close(); - } - }; + static void notifySingleListener(YangInstanceIdentifier treeId, DOMDataTreeChangeListener listener, + DataTreeCandidate state) { + DefaultShardDataTreeChangeListenerPublisher publisher = new DefaultShardDataTreeChangeListenerPublisher(); + publisher.registerTreeChangeListener(treeId, listener, Optional.absent(), noop -> { }); + publisher.publishChanges(state, ""); } }