*/
package org.opendaylight.controller.cluster.datastore;
+import static java.util.Objects.requireNonNull;
+
import akka.actor.Props;
-import com.google.common.base.Preconditions;
import org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor;
import org.opendaylight.controller.cluster.datastore.messages.DataTreeChanged;
import org.opendaylight.controller.cluster.datastore.messages.DataTreeChangedReply;
-import org.opendaylight.controller.cluster.datastore.messages.DataTreeListenerInfo;
import org.opendaylight.controller.cluster.datastore.messages.EnableNotification;
import org.opendaylight.controller.cluster.datastore.messages.GetInfo;
+import org.opendaylight.controller.cluster.datastore.messages.OnInitialData;
+import org.opendaylight.controller.cluster.mgmt.api.DataTreeListenerInfo;
import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
* Proxy actor which acts as a facade to the user-provided listener. Responsible for decapsulating
* DataTreeChanged messages and dispatching their context to the user.
*/
-final class DataTreeChangeListenerActor extends AbstractUntypedActor {
+class DataTreeChangeListenerActor extends AbstractUntypedActor {
private final DOMDataTreeChangeListener listener;
private final YangInstanceIdentifier registeredPath;
+
private boolean notificationsEnabled = false;
private long notificationCount;
private String logContext = "";
- private DataTreeChangeListenerActor(final DOMDataTreeChangeListener listener,
+ DataTreeChangeListenerActor(final DOMDataTreeChangeListener listener,
final YangInstanceIdentifier registeredPath) {
- this.listener = Preconditions.checkNotNull(listener);
- this.registeredPath = Preconditions.checkNotNull(registeredPath);
+ this.listener = requireNonNull(listener);
+ this.registeredPath = requireNonNull(registeredPath);
}
@Override
- protected void handleReceive(final Object message) {
+ protected final void handleReceive(final Object message) {
if (message instanceof DataTreeChanged) {
- dataChanged((DataTreeChanged)message);
+ dataTreeChanged((DataTreeChanged) message);
+ } else if (message instanceof OnInitialData) {
+ onInitialData((OnInitialData) message);
} else if (message instanceof EnableNotification) {
enableNotification((EnableNotification) message);
} else if (message instanceof GetInfo) {
}
@SuppressWarnings("checkstyle:IllegalCatch")
- private void dataChanged(final DataTreeChanged message) {
+ void onInitialData(final OnInitialData message) {
+ LOG.debug("{}: Notifying onInitialData to listener {}", logContext, listener);
+
+ try {
+ this.listener.onInitialData();
+ } catch (Exception e) {
+ LOG.error("{}: Error notifying listener {}", logContext, this.listener, e);
+ }
+ }
+
+ @SuppressWarnings("checkstyle:IllegalCatch")
+ void dataTreeChanged(final DataTreeChanged message) {
// Do nothing if notifications are not enabled
if (!notificationsEnabled) {
LOG.debug("{}: Notifications not enabled for listener {} - dropping change notification",
listener);
}
- public static Props props(final DOMDataTreeChangeListener listener, final YangInstanceIdentifier registeredPath) {
+ static Props props(final DOMDataTreeChangeListener listener, final YangInstanceIdentifier registeredPath) {
return Props.create(DataTreeChangeListenerActor.class, listener, registeredPath);
}
}