[CORD-1983] Implement addSource for Multicast REST API

Change-Id: I0cd976e76012eeb4c8ef643cd2f652e3e4e82c83
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
index 212dbeb..374605b 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MulticastRouteWebResource.java
@@ -24,6 +24,8 @@
 import org.onosproject.net.mcast.MulticastRouteService;
 import org.onosproject.rest.AbstractWebResource;
 
+import static org.onlab.util.Tools.nullIsNotFound;
+
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
@@ -73,11 +75,19 @@
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     public Response createRoute(InputStream stream) {
+
+        final String ingressStr = "ingress";
         MulticastRouteService service = get(MulticastRouteService.class);
         try {
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
             McastRoute route = codec(McastRoute.class).decode(jsonTree, this);
             service.add(route);
+            if (jsonTree.has(ingressStr)) {
+                String ingressPathStr = jsonTree.path(ingressStr).asText();
+                ConnectPoint ingressConnectPoint = nullIsNotFound(ConnectPoint.deviceConnectPoint(ingressPathStr),
+                                                                  "ingress connection point cannot be null!");
+                service.addSource(route, ingressConnectPoint);
+            }
         } catch (IOException ex) {
             throw new IllegalArgumentException(ex);
         }
@@ -132,6 +142,7 @@
             McastRoute route = new McastRoute(IpAddress.valueOf(source), IpAddress.valueOf(group),
                     McastRoute.Type.STATIC);
             ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
+
             jsonTree.path("sinks").forEach(node -> {
                 ConnectPoint sink = ConnectPoint.deviceConnectPoint(node.asText());
                 service.addSink(route, sink);