Creating new creators for multimap primitive and a name based getter for treemap primitive.

Change-Id: I981b3f1f8ee01fbdd0677c3eedc3d5024b8bcf1e
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 83af62d..520b9a6 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
@@ -18,6 +18,7 @@
 import java.util.function.Function;
 
 import org.onosproject.store.service.AsyncConsistentMap;
+import org.onosproject.store.service.AsyncConsistentMultimap;
 import org.onosproject.store.service.AsyncConsistentTreeMap;
 import org.onosproject.store.service.AsyncDistributedSet;
 
@@ -121,4 +122,39 @@
                                                        valueEncoder,
                                                        valueDecoder);
     }
+
+    /**
+     * Creates an instance of {@code AsyncConsistentMultimap} that transforms
+     * operations inputs and applies them to corresponding operation in a
+     * differently typed map and returns the output after reverse transforming
+     * it.
+     *
+     * @param multimap backing multimap
+     * @param keyEncoder transformer for key type of returned map to key type
+     *                   of input map
+     * @param keyDecoder transformer for key type of input map to key type of
+     *                   returned map
+     * @param valueEncoder transformer for value type of returned map to value
+     *                     type of input map
+     * @param valueDecoder transformer for value type of input map to value
+     *                     type of returned map
+     * @param <K1> returned map key type
+     * @param <K2> input map key type
+     * @param <V1> returned map value type
+     * @param <V2> input map key type
+     * @return new map
+     */
+    public static <K1, V1, K2, V2> AsyncConsistentMultimap<K1, V1>
+    newTranscodingMultimap(AsyncConsistentMultimap<K2, V2> multimap,
+                           Function<K1, K2> keyEncoder,
+                           Function<K2, K1> keyDecoder,
+                           Function<V1, V2> valueEncoder,
+                           Function<V2, V1> valueDecoder) {
+        return new TranscodingAsyncConsistentMultimap<>(multimap,
+                                                        keyEncoder,
+                                                        keyDecoder,
+                                                        valueDecoder,
+                                                        valueEncoder);
+    }
+
 }