Support caching in AsyncDocumentTree primitive

Change-Id: I659a5c374891ece7083fa8bad5b1c52c9fa5c8d8
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DistributedPrimitives.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DistributedPrimitives.java
index 33b72a4..d116988 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DistributedPrimitives.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/DistributedPrimitives.java
@@ -20,6 +20,7 @@
 import org.onosproject.store.service.AsyncConsistentMultimap;
 import org.onosproject.store.service.AsyncConsistentTreeMap;
 import org.onosproject.store.service.AsyncDistributedSet;
+import org.onosproject.store.service.AsyncDocumentTree;
 
 import java.util.function.Function;
 
@@ -186,4 +187,15 @@
                                                         valueEncoder);
     }
 
+    /**
+     * Creates an instance of {@code AsyncDocumentTree} that caches values on get.
+     *
+     * @param tree backing tree
+     * @return caching tree
+     * @param <V> tree value type
+     */
+    public static <V> AsyncDocumentTree<V> newCachingDocumentTree(AsyncDocumentTree<V> tree) {
+        return new CachingAsyncDocumentTree<V>(tree);
+    }
+
 }