package org.opendaylight.controller.cluster.datastore;
import akka.actor.ActorContext;
+import akka.actor.ActorRef;
+import akka.actor.Props;
+import com.google.common.base.Optional;
+import java.util.function.Consumer;
import javax.annotation.concurrent.NotThreadSafe;
import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
/**
* Implementation of ShardDataTreeChangeListenerPublisher that offloads the generation and publication
class ShardDataTreeChangeListenerPublisherActorProxy extends AbstractShardDataTreeNotificationPublisherActorProxy
implements ShardDataTreeChangeListenerPublisher {
- private final ShardDataTreeChangeListenerPublisher delegatePublisher = new DefaultShardDataTreeChangeListenerPublisher();
-
- ShardDataTreeChangeListenerPublisherActorProxy(ActorContext actorContext, String actorName) {
- super(actorContext, actorName);
- }
-
- private ShardDataTreeChangeListenerPublisherActorProxy(ShardDataTreeChangeListenerPublisherActorProxy other) {
- super(other);
- }
-
- @Override
- public <L extends DOMDataTreeChangeListener> ListenerRegistration<L> registerTreeChangeListener(
- YangInstanceIdentifier treeId, L listener) {
- return delegatePublisher.registerTreeChangeListener(treeId, listener);
+ ShardDataTreeChangeListenerPublisherActorProxy(ActorContext actorContext, String actorName, String logContext) {
+ super(actorContext, actorName, logContext);
}
@Override
- public ShardDataTreeChangeListenerPublisher newInstance() {
- return new ShardDataTreeChangeListenerPublisherActorProxy(this);
+ public void registerTreeChangeListener(YangInstanceIdentifier treeId,
+ DOMDataTreeChangeListener listener, Optional<DataTreeCandidate> currentState,
+ Consumer<ListenerRegistration<DOMDataTreeChangeListener>> onRegistration) {
+ final ShardDataTreeChangePublisherActor.RegisterListener regMessage =
+ new ShardDataTreeChangePublisherActor.RegisterListener(treeId, listener, currentState, onRegistration);
+ log.debug("{}: Sending {} to publisher actor {}", logContext(), regMessage, publisherActor());
+ publisherActor().tell(regMessage, ActorRef.noSender());
}
@Override
- protected ShardDataTreeNotificationPublisher getDelegatePublisher() {
- return delegatePublisher;
+ protected Props props() {
+ return ShardDataTreeChangePublisherActor.props(actorName(), logContext());
}
}