Added creationTime to Versioned object. This enables supporting a electedTime in leadership, which in turn helps us track how stable leadership terms are.

Change-Id: Ib051027625324646152ed85535ba337e95f8a061
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapImpl.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapImpl.java
index 83eea18..0ceb566 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapImpl.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/ConsistentMapImpl.java
@@ -105,7 +105,13 @@
     public Versioned<V> get(K key) {
         checkNotNull(key, ERROR_NULL_KEY);
         Versioned<byte[]> value = complete(proxy.get(name, keyCache.getUnchecked(key)));
-        return (value != null) ? new Versioned<>(serializer.decode(value.value()), value.version()) : null;
+        if (value == null) {
+            return null;
+        }
+        return new Versioned<>(
+                serializer.decode(value.value()),
+                value.version(),
+                value.creationTime());
     }
 
     @Override
@@ -114,16 +120,26 @@
         checkNotNull(value, ERROR_NULL_VALUE);
         Versioned<byte[]> previousValue =
                 complete(proxy.put(name, keyCache.getUnchecked(key), serializer.encode(value)));
-        return (previousValue != null) ?
-                new Versioned<>(serializer.decode(previousValue.value()), previousValue.version()) : null;
-
+        if (previousValue == null) {
+            return null;
+        }
+        return new Versioned<>(
+                serializer.decode(previousValue.value()),
+                previousValue.version(),
+                previousValue.creationTime());
     }
 
     @Override
     public Versioned<V> remove(K key) {
         checkNotNull(key, ERROR_NULL_KEY);
         Versioned<byte[]> value = complete(proxy.remove(name, keyCache.getUnchecked(key)));
-        return (value != null) ? new Versioned<>(serializer.decode(value.value()), value.version()) : null;
+        if (value == null) {
+            return null;
+        }
+        return new Versioned<>(
+                serializer.decode(value.value()),
+                value.version(),
+                value.creationTime());
     }
 
     @Override
@@ -143,7 +159,7 @@
     public Collection<Versioned<V>> values() {
         return Collections.unmodifiableList(complete(proxy.values(name))
             .stream()
-            .map(v -> new Versioned<V>(serializer.decode(v.value()), v.version()))
+            .map(v -> new Versioned<V>(serializer.decode(v.value()), v.version(), v.creationTime()))
             .collect(Collectors.toList()));
     }
 
@@ -161,8 +177,13 @@
         checkNotNull(value, ERROR_NULL_VALUE);
         Versioned<byte[]> existingValue = complete(proxy.putIfAbsent(
                 name, keyCache.getUnchecked(key), serializer.encode(value)));
-        return (existingValue != null) ?
-                new Versioned<>(serializer.decode(existingValue.value()), existingValue.version()) : null;
+        if (existingValue == null) {
+            return null;
+        }
+        return new Versioned<>(
+                serializer.decode(existingValue.value()),
+                existingValue.version(),
+                existingValue.creationTime());
     }
 
     @Override
@@ -212,6 +233,7 @@
                 dK(e.getKey()),
                 new Versioned<>(
                         serializer.decode(e.getValue().value()),
-                        e.getValue().version()));
+                        e.getValue().version(),
+                        e.getValue().creationTime()));
     }
 }
\ No newline at end of file