Added a valueOrElse static method to Versioned

Change-Id: Icf6406aca716fd2b427fec52e86f6482ce44f393
diff --git a/core/api/src/main/java/org/onosproject/store/service/Versioned.java b/core/api/src/main/java/org/onosproject/store/service/Versioned.java
index ac7109c..2b67edd 100644
--- a/core/api/src/main/java/org/onosproject/store/service/Versioned.java
+++ b/core/api/src/main/java/org/onosproject/store/service/Versioned.java
@@ -99,6 +99,17 @@
         return new Versioned<>(transformer.apply(value), version, creationTime);
     }
 
+    /**
+     * Returns the value of the specified Versioned object if non-null or else returns
+     * a default value.
+     * @param versioned versioned object
+     * @param defaultValue default value to return if versioned object is null
+     * @return versioned value or default value if versioned object is null
+     */
+    public static <U> U valueOrElse(Versioned<U> versioned, U defaultValue) {
+        return versioned == null ? defaultValue : versioned.value();
+    }
+
     @Override
     public int hashCode() {
         return Objects.hashCode(value, version, creationTime);
diff --git a/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java b/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java
index 3f5faa7..9f59454 100644
--- a/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java
+++ b/core/api/src/test/java/org/onosproject/store/service/VersionedTest.java
@@ -60,6 +60,17 @@
     }
 
     /**
+     * Tests the valueOrElse method.
+     */
+    @Test
+    public void testOrElse() {
+        Versioned<String> vv = new Versioned<String>("foo", 1);
+        Versioned<String> nullVV = null;
+        assertThat(Versioned.valueOrElse(vv, "bar"), is("foo"));
+        assertThat(Versioned.valueOrElse(nullVV, "bar"), is("bar"));
+    }
+
+    /**
      * Tests the equals, hashCode and toString methods using Guava EqualsTester.
      */
     @Test