Allow AbstractClientActor generation to start from non-zero
[controller.git] / opendaylight / md-sal / cds-access-client / src / main / java / org / opendaylight / controller / cluster / access / client / AbstractClientActor.java
index 36f06ef4dcf9ea99fe59cbb7439b387162513446..a1c84c0e83cf5d947f3cbc49b2f4590ce03a13b6 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.controller.cluster.access.client;
 
 import akka.actor.ActorRef;
 import akka.actor.PoisonPill;
-import akka.persistence.UntypedPersistentActor;
+import akka.persistence.AbstractPersistentActor;
 import com.google.common.annotations.Beta;
 import org.opendaylight.controller.cluster.access.concepts.FrontendIdentifier;
 import org.slf4j.Logger;
@@ -21,7 +21,7 @@ import org.slf4j.LoggerFactory;
  * @author Robert Varga
  */
 @Beta
-public abstract class AbstractClientActor extends UntypedPersistentActor {
+public abstract class AbstractClientActor extends AbstractPersistentActor {
     private static final Logger LOG = LoggerFactory.getLogger(AbstractClientActor.class);
     private AbstractClientActorBehavior<?> currentBehavior;
 
@@ -35,6 +35,15 @@ public abstract class AbstractClientActor extends UntypedPersistentActor {
         return currentBehavior.persistenceId();
     }
 
+    @Override
+    public void postStop() throws Exception {
+        if (currentBehavior != null) {
+            currentBehavior.close();
+        }
+
+        super.postStop();
+    }
+
     private void switchBehavior(final AbstractClientActorBehavior<?> nextBehavior) {
         if (!currentBehavior.equals(nextBehavior)) {
             if (nextBehavior == null) {
@@ -44,12 +53,22 @@ public abstract class AbstractClientActor extends UntypedPersistentActor {
                 LOG.debug("{}: switched from {} to {}", persistenceId(), currentBehavior, nextBehavior);
             }
 
+            currentBehavior.close();
             currentBehavior = nextBehavior;
         }
     }
 
     @Override
-    public final void onReceiveCommand(final Object command) {
+    public Receive createReceive() {
+        return receiveBuilder().matchAny(this::onReceiveCommand).build();
+    }
+
+    @Override
+    public Receive createReceiveRecover() {
+        return receiveBuilder().matchAny(this::onReceiveRecover).build();
+    }
+
+    private void onReceiveCommand(final Object command) {
         if (command == null) {
             LOG.debug("{}: ignoring null command", persistenceId());
             return;
@@ -62,10 +81,11 @@ public abstract class AbstractClientActor extends UntypedPersistentActor {
         }
     }
 
-    @Override
-    public final void onReceiveRecover(final Object recover) {
+    private void onReceiveRecover(final Object recover) {
         switchBehavior(currentBehavior.onReceiveRecover(recover));
     }
 
-    protected abstract ClientActorBehavior initialBehavior(ClientActorContext context);
+    protected abstract ClientActorBehavior<?> initialBehavior(ClientActorContext context);
+
+    protected abstract ClientActorConfig getClientActorConfig();
 }