ONOS-3633 - Adding intent event listener to PointToPointIntent virtual network
provider. Intent events will either set the virtual link state to ACTIVE or
INACTIVE.

Change-Id: I34b65b2bfff29b791e7b2eb4d7cefb2ec4e88672
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java
index ff42dcd..0daa8b5 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/DefaultVirtualLink.java
@@ -44,10 +44,12 @@
      * @param networkId network identifier
      * @param src       source connection point
      * @param dst       destination connection point
+     * @param state     link state
      * @param tunnelId  tunnel identifier
      */
-    private DefaultVirtualLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId tunnelId) {
-        super(PID, src, dst, Type.VIRTUAL, DefaultAnnotations.builder().build());
+    private DefaultVirtualLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst,
+                               State state, TunnelId tunnelId) {
+        super(PID, src, dst, Type.VIRTUAL, state, DefaultAnnotations.builder().build());
         this.networkId = networkId;
         this.tunnelId = tunnelId;
     }
@@ -107,6 +109,7 @@
         private ConnectPoint src;
         private ConnectPoint dst;
         private TunnelId tunnelId;
+        private State state;
 
         private Builder() {
             // Hide constructor
@@ -157,6 +160,17 @@
         }
 
         /**
+         * Sets the link state to be used by the builder.
+         *
+         * @param state link state
+         * @return self
+         */
+        public Builder state(State state) {
+            this.state = state;
+            return this;
+        }
+
+        /**
          * Builds a default virtual link object from the accumulated parameters.
          *
          * @return default virtual link object
@@ -166,7 +180,7 @@
             checkNotNull(dst, "Destination connect point cannot be null");
             checkNotNull(networkId, "Network Id cannot be null");
 
-            return new DefaultVirtualLink(networkId, src, dst, tunnelId);
+            return new DefaultVirtualLink(networkId, src, dst, state, tunnelId);
         }
     }
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkProviderService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkProviderService.java
index 6cc4ad8..5d63c7d 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkProviderService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkProviderService.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.incubator.net.virtual;
 
+import org.onosproject.incubator.net.tunnel.TunnelId;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.provider.ProviderService;
 
@@ -30,8 +31,9 @@
      * @param networkId network identifier
      * @param src       source connection point
      * @param dst       destination connection point
+     * @param tunnelId  tunnel identifier
      */
-    void tunnelUp(NetworkId networkId, ConnectPoint src, ConnectPoint dst);
+    void tunnelUp(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId tunnelId);
 
     /**
      * This method is used to notify the VirtualNetwork service that a tunnel is now
@@ -40,7 +42,8 @@
      * @param networkId network identifier
      * @param src       source connection point
      * @param dst       destination connection point
+     * @param tunnelId  tunnel identifier
      */
-    void tunnelDown(NetworkId networkId, ConnectPoint src, ConnectPoint dst);
+    void tunnelDown(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId tunnelId);
 
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java
index 6357aee..ebe0b69 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkService.java
@@ -60,7 +60,9 @@
     Set<VirtualLink> getVirtualLinks(NetworkId networkId);
 
     /**
-     * Returns list of all virtual ports of the specified device.
+     * Returns list of all virtual ports of the specified device. If the
+     * device identifier is null then all of the virtual ports in the specified
+     * network will be returned.
      *
      * @param networkId network identifier
      * @param deviceId  device identifier
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java
index 35fb0c3..663c208 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/virtual/VirtualNetworkStore.java
@@ -18,6 +18,7 @@
 import org.onosproject.incubator.net.tunnel.TunnelId;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.Link;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.store.Store;
@@ -89,18 +90,20 @@
      * @param networkId  network identifier
      * @param src        source end-point of the link
      * @param dst        destination end-point of the link
+     * @param state      link state
      * @param realizedBy underlying tunnel identifier using which this link is realized
      * @return the virtual link
      */
-    VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId realizedBy);
+    VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, Link.State state, TunnelId realizedBy);
 
     /**
      * Updates the tunnelId in the virtual link.
      *
-     * @param virtualLink  virtual link
-     * @param tunnelId tunnel identifier
+     * @param virtualLink virtual link
+     * @param tunnelId    tunnel identifier
+     * @param state       link state
      */
-    void updateLink(VirtualLink virtualLink, TunnelId tunnelId);
+    void updateLink(VirtualLink virtualLink, TunnelId tunnelId, Link.State state);
 
     /**
      * Removes the specified link from the store.
@@ -158,10 +161,21 @@
     Set<VirtualLink> getLinks(NetworkId networkId);
 
     /**
+     * Returns the virtual link matching the network identifier, source connect point,
+     * and destination connect point.
+     *
+     * @param networkId network identifier
+     * @param src       source connect point
+     * @param dst       destination connect point
+     * @return virtual link
+     */
+    VirtualLink getLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst);
+
+    /**
      * Returns the list of ports of the specified virtual device.
      *
      * @param networkId network identifier
-     * @param deviceId   device identifier
+     * @param deviceId  device identifier
      * @return set of virtual networks
      */
     Set<VirtualPort> getPorts(NetworkId networkId, DeviceId deviceId);