InstallSnapshot does not pass the term to the protobuff instance
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / messages / InstallSnapshot.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.raft.messages;
10
11 import com.google.common.base.Optional;
12 import com.google.protobuf.ByteString;
13 import org.opendaylight.controller.protobuff.messages.cluster.raft.InstallSnapshotMessages;
14
15 public class InstallSnapshot extends AbstractRaftRPC {
16
17     public static final Class<InstallSnapshotMessages.InstallSnapshot> SERIALIZABLE_CLASS = InstallSnapshotMessages.InstallSnapshot.class;
18     private static final long serialVersionUID = 1L;
19
20     private final String leaderId;
21     private final long lastIncludedIndex;
22     private final long lastIncludedTerm;
23     private final ByteString data;
24     private final int chunkIndex;
25     private final int totalChunks;
26     private final Optional<Integer> lastChunkHashCode;
27
28     public InstallSnapshot(long term, String leaderId, long lastIncludedIndex,
29         long lastIncludedTerm, ByteString data, int chunkIndex, int totalChunks, Optional<Integer> lastChunkHashCode) {
30         super(term);
31         this.leaderId = leaderId;
32         this.lastIncludedIndex = lastIncludedIndex;
33         this.lastIncludedTerm = lastIncludedTerm;
34         this.data = data;
35         this.chunkIndex = chunkIndex;
36         this.totalChunks = totalChunks;
37         this.lastChunkHashCode = lastChunkHashCode;
38     }
39
40     public InstallSnapshot(long term, String leaderId, long lastIncludedIndex,
41                            long lastIncludedTerm, ByteString data, int chunkIndex, int totalChunks) {
42         this(term, leaderId, lastIncludedIndex, lastIncludedTerm, data, chunkIndex, totalChunks, Optional.<Integer>absent());
43     }
44
45
46     public String getLeaderId() {
47         return leaderId;
48     }
49
50     public long getLastIncludedIndex() {
51         return lastIncludedIndex;
52     }
53
54     public long getLastIncludedTerm() {
55         return lastIncludedTerm;
56     }
57
58     public ByteString getData() {
59         return data;
60     }
61
62     public int getChunkIndex() {
63         return chunkIndex;
64     }
65
66     public int getTotalChunks() {
67         return totalChunks;
68     }
69
70     public Optional<Integer> getLastChunkHashCode() {
71         return lastChunkHashCode;
72     }
73
74     public <T extends Object> Object toSerializable(){
75         InstallSnapshotMessages.InstallSnapshot.Builder builder = InstallSnapshotMessages.InstallSnapshot.newBuilder()
76                 .setTerm(this.getTerm())
77                 .setLeaderId(this.getLeaderId())
78                 .setChunkIndex(this.getChunkIndex())
79                 .setData(this.getData())
80                 .setLastIncludedIndex(this.getLastIncludedIndex())
81                 .setLastIncludedTerm(this.getLastIncludedTerm())
82                 .setTotalChunks(this.getTotalChunks());
83
84         if(lastChunkHashCode.isPresent()){
85             builder.setLastChunkHashCode(lastChunkHashCode.get());
86         }
87         return builder.build();
88     }
89
90     public static InstallSnapshot fromSerializable (Object o) {
91         InstallSnapshotMessages.InstallSnapshot from =
92             (InstallSnapshotMessages.InstallSnapshot) o;
93
94         Optional<Integer> lastChunkHashCode = Optional.absent();
95         if(from.hasLastChunkHashCode()){
96             lastChunkHashCode = Optional.of(from.getLastChunkHashCode());
97         }
98
99         InstallSnapshot installSnapshot = new InstallSnapshot(from.getTerm(),
100             from.getLeaderId(), from.getLastIncludedIndex(),
101             from.getLastIncludedTerm(), from.getData(),
102             from.getChunkIndex(), from.getTotalChunks(), lastChunkHashCode);
103
104         return installSnapshot;
105     }
106
107     @Override
108     public String toString() {
109         StringBuilder builder = new StringBuilder();
110         builder.append("InstallSnapshot [term=").append(term).append(", leaderId=").append(leaderId)
111                 .append(", lastIncludedIndex=").append(lastIncludedIndex).append(", lastIncludedTerm=")
112                 .append(lastIncludedTerm).append(", data=").append(data).append(", chunkIndex=").append(chunkIndex)
113                 .append(", totalChunks=").append(totalChunks).append(", lastChunkHashCode=").append(lastChunkHashCode)
114                 .append("]");
115         return builder.toString();
116     }
117 }