Extending DeviceProvider interface to include triggerDisconnect method.

- extended interface with default method implementation
- modified DeviceManager to exploit the new provider feature
- refactored a number of device providers to use the new method
    instead of relying on indirect DEVICE_REMOVED events

Change-Id: Ib315357ef06463012fcf26bbe937c8cdccbf3a94
diff --git a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
index f675dbc..8281f4e 100644
--- a/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
+++ b/providers/netconf/device/src/main/java/org/onosproject/provider/netconf/device/impl/NetconfDeviceProvider.java
@@ -377,6 +377,12 @@
         }
     }
 
+    @Override
+    public void triggerDisconnect(DeviceId deviceId) {
+        log.debug("Forcing disconnect for device {}", deviceId);
+        controller.disconnectDevice(deviceId, true);
+    }
+
     private class InnerNetconfDeviceListener implements NetconfDeviceListener {
 
 
@@ -639,16 +645,14 @@
     private class InternalDeviceListener implements DeviceListener {
         @Override
         public void event(DeviceEvent event) {
-            if ((event.type() == DeviceEvent.Type.DEVICE_ADDED)) {
-                executor.execute(() -> discoverPorts(event.subject().id()));
-            } else if ((event.type() == DeviceEvent.Type.DEVICE_REMOVED)) {
-                log.debug("removing device {}", event.subject().id());
-                controller.disconnectDevice(event.subject().id(), true);
-            }
+            executor.execute(() -> discoverPorts(event.subject().id()));
         }
 
         @Override
         public boolean isRelevant(DeviceEvent event) {
+            if (event.type() != DeviceEvent.Type.DEVICE_ADDED) {
+                return false;
+            }
             if (mastershipService.getMasterFor(event.subject().id()) == null) {
                 return true;
             }