Implemented REST API for multicast RIB.

Change-Id: I5de6fe0aae412083597113e355ba0e8c984be5f1
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
index 99030ca..cbed1c2 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
@@ -53,6 +53,7 @@
 import org.onosproject.net.intent.HostToHostIntent;
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.PointToPointIntent;
+import org.onosproject.net.mcast.McastRoute;
 import org.onosproject.net.meter.Band;
 import org.onosproject.net.meter.Meter;
 import org.onosproject.net.meter.MeterRequest;
@@ -117,6 +118,7 @@
         registerCodec(FilteringObjective.class, new FilteringObjectiveCodec());
         registerCodec(ForwardingObjective.class, new ForwardingObjectiveCodec());
         registerCodec(NextObjective.class, new NextObjectiveCodec());
+        registerCodec(McastRoute.class, new McastRouteCodec());
         log.info("Started");
     }
 
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java
new file mode 100644
index 0000000..58bd95c
--- /dev/null
+++ b/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java
@@ -0,0 +1,44 @@
+package org.onosproject.codec.impl;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onlab.packet.IpAddress;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.mcast.McastRoute;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Codec to encode and decode a multicast route to and from JSON.
+ */
+public class McastRouteCodec extends JsonCodec<McastRoute> {
+
+    private static final String SOURCE = "source";
+    private static final String GROUP = "group";
+    private static final String TYPE = "type";
+
+    @Override
+    public ObjectNode encode(McastRoute route, CodecContext context) {
+        checkNotNull(route);
+        ObjectNode root = context.mapper().createObjectNode()
+                .put(TYPE, route.type().toString())
+                .put(SOURCE, route.source().toString())
+                .put(GROUP, route.group().toString());
+
+        return root;
+    }
+
+    @Override
+    public McastRoute decode(ObjectNode json, CodecContext context) {
+        if (json == null || !json.isObject()) {
+            return null;
+        }
+
+        IpAddress source = IpAddress.valueOf(json.path(SOURCE).asText());
+        IpAddress group = IpAddress.valueOf(json.path(GROUP).asText());
+
+        McastRoute route = new McastRoute(source, group, McastRoute.Type.STATIC);
+
+        return route;
+    }
+}