Removing Rest and Netconf devices when the providers are disabled

Change-Id: Icac7146fea1295c11972ae4cbf87f8ef9689c671
diff --git a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
index 8fa5f11..d8ebda6 100644
--- a/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
+++ b/providers/rest/device/src/main/java/org/onosproject/provider/rest/device/impl/RestDeviceProvider.java
@@ -135,13 +135,13 @@
         log.info("Started");
     }
 
-
     @Deactivate
     public void deactivate() {
+        cfgService.removeListener(cfgLister);
+        controller.getDevices().keySet().forEach(this::deviceRemoved);
         providerRegistry.unregister(this);
         providerService = null;
         cfgService.unregisterConfigFactory(factory);
-        cfgService.removeListener(cfgLister);
         log.info("Stopped");
     }
 
@@ -195,12 +195,10 @@
         addedDevices.add(deviceId);
     }
 
-    //when do I call it ?
-    public void deviceRemoved(RestSBDevice nodeId) {
-        Preconditions.checkNotNull(nodeId, ISNOTNULL);
-        DeviceId deviceId = nodeId.deviceId();
+    private void deviceRemoved(DeviceId deviceId) {
+        Preconditions.checkNotNull(deviceId, ISNOTNULL);
         providerService.deviceDisconnected(deviceId);
-        controller.removeDevice(nodeId);
+        controller.removeDevice(deviceId);
     }
 
     private void connectDevices() {
@@ -217,7 +215,7 @@
                             deviceAdded(device);
                         });
                 //Removing devices not wanted anymore
-                toBeRemoved.stream().forEach(device -> deviceRemoved(device));
+                toBeRemoved.stream().forEach(device -> deviceRemoved(device.deviceId()));
 
             }
         } catch (ConfigException e) {