Deprecate CloseTransaction protobuff message
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / main / java / org / opendaylight / controller / cluster / datastore / messages / RegisterChangeListener.java
index 7c9e4f0665a2710e2ed4b28f4792e6a043a48800..a3b7e12b07930ff19f76ec3bd2386bd468ba90a3 100644 (file)
@@ -9,24 +9,35 @@
 package org.opendaylight.controller.cluster.datastore.messages;
 
 import akka.actor.ActorPath;
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
+import akka.serialization.Serialization;
+import org.opendaylight.controller.cluster.datastore.util.InstanceIdentifierUtils;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
-import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
+import org.opendaylight.controller.protobuff.messages.registration.ListenerRegistrationMessages;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
-public class RegisterChangeListener {
-    private final InstanceIdentifier path;
-    private final ActorPath dataChangeListenerPath;
+public class RegisterChangeListener implements SerializableMessage, ListenerRegistrationMessage {
+    public static final Class<ListenerRegistrationMessages.RegisterChangeListener> SERIALIZABLE_CLASS =
+            ListenerRegistrationMessages.RegisterChangeListener.class;
+
+    private final YangInstanceIdentifier path;
+    private final ActorRef dataChangeListener;
     private final AsyncDataBroker.DataChangeScope scope;
+    private final boolean registerOnAllInstances;
 
 
-    public RegisterChangeListener(InstanceIdentifier path,
-        ActorPath dataChangeListenerPath,
-        AsyncDataBroker.DataChangeScope scope) {
+    public RegisterChangeListener(YangInstanceIdentifier path,
+        ActorRef dataChangeListener,
+        AsyncDataBroker.DataChangeScope scope, boolean registerOnAllInstances) {
         this.path = path;
-        this.dataChangeListenerPath = dataChangeListenerPath;
+        this.dataChangeListener = dataChangeListener;
         this.scope = scope;
+        this.registerOnAllInstances = registerOnAllInstances;
     }
 
-    public InstanceIdentifier getPath() {
+    @Override
+    public YangInstanceIdentifier getPath() {
         return path;
     }
 
@@ -36,6 +47,28 @@ public class RegisterChangeListener {
     }
 
     public ActorPath getDataChangeListenerPath() {
-        return dataChangeListenerPath;
+        return dataChangeListener.path();
+    }
+
+    @Override
+    public boolean isRegisterOnAllInstances() {
+        return registerOnAllInstances;
+    }
+
+    @Override
+    public ListenerRegistrationMessages.RegisterChangeListener toSerializable() {
+      return ListenerRegistrationMessages.RegisterChangeListener.newBuilder()
+          .setInstanceIdentifierPath(InstanceIdentifierUtils.toSerializable(path))
+          .setDataChangeListenerActorPath(Serialization.serializedActorPath(dataChangeListener))
+          .setDataChangeScope(scope.ordinal()).setRegisterOnAllInstances(registerOnAllInstances).build();
     }
+
+  public static RegisterChangeListener fromSerializable(ActorSystem actorSystem, Object serializable){
+    ListenerRegistrationMessages.RegisterChangeListener o = (ListenerRegistrationMessages.RegisterChangeListener) serializable;
+    return new RegisterChangeListener(InstanceIdentifierUtils.fromSerializable(o.getInstanceIdentifierPath()),
+                                                actorSystem.provider().resolveActorRef(o.getDataChangeListenerActorPath()),
+                                              AsyncDataBroker.DataChangeScope.values()[o.getDataChangeScope()], o.getRegisterOnAllInstances());
+  }
+
+
 }