blob: ae6969ce4ae3c291a117e9bb48539854f41fd89a [file] [log] [blame]
Madan Jampani1416d2e2014-11-04 18:11:51 -08001package org.onlab.onos.store.service;
2
3import java.util.Arrays;
4
Yuta HIGUCHI5e1cfe02014-11-04 21:22:45 -08005import com.google.common.base.MoreObjects;
6
Madan Jampani1416d2e2014-11-04 18:11:51 -08007/**
8 * Wrapper object that holds the object (as byte array) and its version.
9 */
10public class VersionedValue {
11
12 private final byte[] value;
13 private final long version;
14
15 /**
16 * Creates a new instance with the specified value and version.
Madan Jampani9b19a822014-11-04 21:37:13 -080017 * @param value value
18 * @param version version
Madan Jampani1416d2e2014-11-04 18:11:51 -080019 */
20 public VersionedValue(byte[] value, long version) {
21 this.value = value;
22 this.version = version;
23 }
24
25 /**
26 * Returns the value.
27 * @return value.
28 */
29 public byte[] value() {
30 return value;
31 }
32
33 /**
34 * Returns the version.
35 * @return version.
36 */
37 public long version() {
38 return version;
39 }
40
Yuta HIGUCHI3bd8cdc2014-11-05 19:11:44 -080041 /**
42 * Creates a copy of given VersionedValue.
43 *
44 * @param original VersionedValue to create a copy
45 * @return same as original if original or it's value is null,
46 * otherwise creates a copy.
47 */
48 public static VersionedValue copy(VersionedValue original) {
49 if (original == null) {
50 return null;
51 }
52 if (original.value == null) {
53 // immutable, no need to copy
54 return original;
55 } else {
56 return new VersionedValue(
57 Arrays.copyOf(original.value,
58 original.value.length),
59 original.version);
60 }
61 }
62
Madan Jampani1416d2e2014-11-04 18:11:51 -080063 @Override
64 public String toString() {
Yuta HIGUCHI5e1cfe02014-11-04 21:22:45 -080065 return MoreObjects.toStringHelper(getClass())
66 .add("version", version)
67 .add("value", Arrays.toString(value))
68 .toString();
Madan Jampani1416d2e2014-11-04 18:11:51 -080069 }
70}