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/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
index 800ecfd..7ceeb1b 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/virtual/impl/DistributedVirtualNetworkStore.java
@@ -44,6 +44,7 @@
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.Link;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
 import org.onosproject.store.AbstractStore;
@@ -295,6 +296,7 @@
      * @return true if the network identifier exists, false otherwise.
      */
     private boolean networkExists(NetworkId networkId) {
+        checkNotNull(networkId, "The network identifier cannot be null.");
         return (networkIdVirtualNetworkMap.containsKey(networkId));
     }
 
@@ -339,7 +341,8 @@
     }
 
     @Override
-    public VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst, TunnelId realizedBy) {
+    public VirtualLink addLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst,
+                               Link.State state, TunnelId realizedBy) {
         checkState(networkExists(networkId), "The network has not been added.");
         Set<VirtualLink> virtualLinkSet = networkIdVirtualLinkSetMap.get(networkId);
         if (virtualLinkSet == null) {
@@ -352,6 +355,7 @@
                 .networkId(networkId)
                 .src(src)
                 .dst(dst)
+                .state(state)
                 .tunnelId(realizedBy)
                 .build();
 
@@ -361,7 +365,7 @@
     }
 
     @Override
-    public void updateLink(VirtualLink virtualLink, TunnelId tunnelId) {
+    public void updateLink(VirtualLink virtualLink, TunnelId tunnelId, Link.State state) {
         checkState(networkExists(virtualLink.networkId()), "The network has not been added.");
         Set<VirtualLink> virtualLinkSet = networkIdVirtualLinkSetMap.get(virtualLink.networkId());
         if (virtualLinkSet == null) {
@@ -374,6 +378,7 @@
                 .src(virtualLink.src())
                 .dst(virtualLink.dst())
                 .tunnelId(tunnelId)
+                .state(state)
                 .build();
 
         virtualLinkSet.add(newVirtualLink);
@@ -471,16 +476,8 @@
         return ImmutableSet.copyOf(virtualLinkSet);
     }
 
-    /**
-     * 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
-     */
-    private VirtualLink getLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst) {
+    @Override
+    public VirtualLink getLink(NetworkId networkId, ConnectPoint src, ConnectPoint dst) {
         Set<VirtualLink> virtualLinkSet = networkIdVirtualLinkSetMap.get(networkId);
         if (virtualLinkSet == null) {
             return null;
@@ -504,6 +501,10 @@
             virtualPortSet = new HashSet<>();
         }
 
+        if (deviceId == null) {
+            return ImmutableSet.copyOf(virtualPortSet);
+        }
+
         Set<VirtualPort> portSet = new HashSet<>();
         virtualPortSet.forEach(virtualPort -> {
             if (virtualPort.element().id().equals(deviceId)) {