Merge "Fixed for bug : 1171 - issue while creating subnet"
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / example / ExampleActor.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.cluster.example;
10
11 import akka.actor.ActorRef;
12 import akka.actor.Props;
13 import akka.japi.Creator;
14 import org.opendaylight.controller.cluster.example.messages.KeyValue;
15 import org.opendaylight.controller.cluster.example.messages.KeyValueSaved;
16 import org.opendaylight.controller.cluster.example.messages.PrintRole;
17 import org.opendaylight.controller.cluster.example.messages.PrintState;
18 import org.opendaylight.controller.cluster.raft.RaftActor;
19 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
20
21 import java.util.HashMap;
22 import java.util.Map;
23
24 /**
25  * A sample actor showing how the RaftActor is to be extended
26  */
27 public class ExampleActor extends RaftActor {
28
29     private final Map<String, String> state = new HashMap();
30
31     private long persistIdentifier = 1;
32
33
34     public ExampleActor(String id, Map<String, String> peerAddresses) {
35         super(id, peerAddresses);
36     }
37
38     public static Props props(final String id, final Map<String, String> peerAddresses){
39         return Props.create(new Creator<ExampleActor>(){
40
41             @Override public ExampleActor create() throws Exception {
42                 return new ExampleActor(id, peerAddresses);
43             }
44         });
45     }
46
47     @Override public void onReceiveCommand(Object message){
48         if(message instanceof KeyValue){
49             if(isLeader()) {
50                 String persistId = Long.toString(persistIdentifier++);
51                 persistData(getSender(), persistId, (Payload) message);
52             } else {
53                 if(getLeader() != null) {
54                     getLeader().forward(message, getContext());
55                 }
56             }
57
58         } else if (message instanceof PrintState) {
59             LOG.debug("State of the node:"+getId() + " has = "+state.size() + " entries");
60
61         } else if (message instanceof PrintRole) {
62             LOG.debug(getId() + " = " + getRaftState());
63         } else {
64             super.onReceiveCommand(message);
65         }
66     }
67
68     @Override protected void applyState(ActorRef clientActor, String identifier,
69         Object data) {
70         if(data instanceof KeyValue){
71             KeyValue kv = (KeyValue) data;
72             state.put(kv.getKey(), kv.getValue());
73             if(clientActor != null) {
74                 clientActor.tell(new KeyValueSaved(), getSelf());
75             }
76         }
77     }
78
79     @Override protected Object createSnapshot() {
80         return state;
81     }
82
83     @Override protected void applySnapshot(Object snapshot) {
84         state.clear();
85         state.putAll((HashMap) snapshot);
86     }
87
88     @Override public void onReceiveRecover(Object message) {
89         super.onReceiveRecover(message);
90     }
91
92     @Override public String persistenceId() {
93         return getId();
94     }
95 }