blob: 3039f32ba2b428f74bb0e3960f0c1c8eb5edf9ee [file] [log] [blame]
Yuta HIGUCHI497c8842014-09-25 14:23:34 -07001package org.onlab.onos.store.impl;
2
Yuta HIGUCHI497c8842014-09-25 14:23:34 -07003import static com.google.common.base.Preconditions.checkArgument;
4
5import java.util.Objects;
6
Yuta HIGUCHI497c8842014-09-25 14:23:34 -07007import org.onlab.onos.store.Timestamp;
8
9import com.google.common.base.MoreObjects;
10import com.google.common.collect.ComparisonChain;
11
12// If it is store specific, implement serializable interfaces?
13/**
14 * Default implementation of Timestamp.
Madan Jampani61056bc2014-09-27 09:07:26 -070015 * TODO: Better documentation.
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070016 */
17public final class OnosTimestamp implements Timestamp {
18
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070019 private final int termNumber;
20 private final int sequenceNumber;
21
22 /**
23 * Default version tuple.
24 *
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070025 * @param termNumber the mastership termNumber
26 * @param sequenceNumber the sequenceNumber number within the termNumber
27 */
Madan Jampani61056bc2014-09-27 09:07:26 -070028 public OnosTimestamp(int termNumber, int sequenceNumber) {
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070029 this.termNumber = termNumber;
30 this.sequenceNumber = sequenceNumber;
31 }
32
33 @Override
34 public int compareTo(Timestamp o) {
35 checkArgument(o instanceof OnosTimestamp, "Must be OnosTimestamp", o);
36 OnosTimestamp that = (OnosTimestamp) o;
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070037
38 return ComparisonChain.start()
39 .compare(this.termNumber, that.termNumber)
40 .compare(this.sequenceNumber, that.sequenceNumber)
41 .result();
42 }
43
44 @Override
45 public int hashCode() {
Madan Jampani61056bc2014-09-27 09:07:26 -070046 return Objects.hash(termNumber, sequenceNumber);
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070047 }
48
49 @Override
50 public boolean equals(Object obj) {
51 if (this == obj) {
52 return true;
53 }
54 if (!(obj instanceof OnosTimestamp)) {
55 return false;
56 }
57 OnosTimestamp that = (OnosTimestamp) obj;
Madan Jampani61056bc2014-09-27 09:07:26 -070058 return Objects.equals(this.termNumber, that.termNumber) &&
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070059 Objects.equals(this.sequenceNumber, that.sequenceNumber);
60 }
61
62 @Override
63 public String toString() {
64 return MoreObjects.toStringHelper(getClass())
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070065 .add("termNumber", termNumber)
66 .add("sequenceNumber", sequenceNumber)
67 .toString();
68 }
69
70 /**
Yuta HIGUCHI497c8842014-09-25 14:23:34 -070071 * Returns the termNumber.
72 *
73 * @return termNumber
74 */
75 public int termNumber() {
76 return termNumber;
77 }
78
79 /**
80 * Returns the sequenceNumber number.
81 *
82 * @return sequenceNumber
83 */
84 public int sequenceNumber() {
85 return sequenceNumber;
86 }
Yuta HIGUCHI67a527f2014-10-02 22:23:54 -070087
88 // Default constructor for serialization
89 @Deprecated
90 protected OnosTimestamp() {
91 this.termNumber = -1;
92 this.sequenceNumber = -1;
93 }
Yuta HIGUCHI2e963892014-09-27 13:00:39 -070094}