*/
package org.opendaylight.controller.cluster.datastore;
-import com.google.common.base.Preconditions;
-import java.util.Collections;
-import java.util.Map.Entry;
-import javax.annotation.concurrent.GuardedBy;
+import akka.actor.ActorRef;
import org.opendaylight.controller.cluster.datastore.messages.RegisterDataTreeChangeListener;
import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
/**
* Intermediate proxy registration returned to the user when we cannot
* instantiate the registration immediately. It provides a bridge to
* a real registration which may materialize at some point in the future.
*/
-final class DelayedDataTreeListenerRegistration implements ListenerRegistration<DOMDataTreeChangeListener> {
- private final RegisterDataTreeChangeListener registerTreeChangeListener;
- private volatile ListenerRegistration<DOMDataTreeChangeListener> delegate;
- @GuardedBy("this")
- private boolean closed;
+final class DelayedDataTreeListenerRegistration
+ extends DelayedListenerRegistration<DOMDataTreeChangeListener, RegisterDataTreeChangeListener> {
- DelayedDataTreeListenerRegistration(final RegisterDataTreeChangeListener registerTreeChangeListener) {
- this.registerTreeChangeListener = Preconditions.checkNotNull(registerTreeChangeListener);
- }
-
- synchronized void createDelegate(final DelegateFactory<RegisterDataTreeChangeListener, ListenerRegistration<DOMDataTreeChangeListener>, DataTreeCandidate> factory) {
- if (!closed) {
- final Entry<ListenerRegistration<DOMDataTreeChangeListener>, DataTreeCandidate> res = factory.createDelegate(registerTreeChangeListener);
- this.delegate = res.getKey();
- if (res.getValue() != null) {
- delegate.getInstance().onDataTreeChanged(Collections.singletonList(res.getValue()));
- }
- }
- }
-
- @Override
- public DOMDataTreeChangeListener getInstance() {
- final ListenerRegistration<DOMDataTreeChangeListener> d = delegate;
- return d == null ? null : d.getInstance();
- }
-
- @Override
- public synchronized void close() {
- if (!closed) {
- closed = true;
- if (delegate != null) {
- delegate.close();
- }
- }
+ DelayedDataTreeListenerRegistration(final RegisterDataTreeChangeListener registerTreeChangeListener,
+ final ActorRef registrationActor) {
+ super(registerTreeChangeListener, registrationActor);
}
}