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