ONOS-3605 Create thread Session input stream mechanism, adding listener for events from the device

Change-Id: Ib323487f61d9e595f7ccdc1957a92e58b7002d2a
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 0aea67e..ea3bfcc 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
@@ -65,7 +65,7 @@
     protected DeviceProviderRegistry providerRegistry;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected NetconfController controller; //where is initiated ?
+    protected NetconfController controller;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected NetworkConfigRegistry cfgService;
@@ -73,11 +73,13 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
 
+    private static final String APP_NAME = "org.onosproject.netconf";
+    private static final String SCHEME_NAME = "netconf";
+    private static final String DEVICE_PROVIDER_PACKAGE = "org.onosproject.netconf.provider.device";
+    private static final String UNKNOWN = "unknown";
 
     private DeviceProviderService providerService;
     private NetconfDeviceListener innerNodeListener = new InnerNetconfDeviceListener();
-    protected static final String ISNOTNULL = "NetconfDeviceInfo is not null";
-    private static final String UNKNOWN = "unknown";
 
     private final ConfigFactory factory =
             new ConfigFactory<ApplicationId, NetconfProviderConfig>(APP_SUBJECT_FACTORY,
@@ -96,10 +98,10 @@
     @Activate
     public void activate() {
         providerService = providerRegistry.register(this);
+        appId = coreService.registerApplication(APP_NAME);
         cfgService.registerConfigFactory(factory);
         cfgService.addListener(cfgLister);
         controller.addDeviceListener(innerNodeListener);
-        appId = coreService.registerApplication("org.onosproject.netconf");
         connectDevices();
         log.info("Started");
     }
@@ -110,11 +112,12 @@
         providerRegistry.unregister(this);
         providerService = null;
         cfgService.unregisterConfigFactory(factory);
+        controller.removeDeviceListener(innerNodeListener);
         log.info("Stopped");
     }
 
     public NetconfDeviceProvider() {
-        super(new ProviderId("netconf", "org.onosproject.netconf.provider.device"));
+        super(new ProviderId(SCHEME_NAME, DEVICE_PROVIDER_PACKAGE));
     }
 
     @Override
@@ -142,15 +145,18 @@
 
     private class InnerNetconfDeviceListener implements NetconfDeviceListener {
 
+        private static final String IPADDRESS = "ipaddress";
+        protected static final String ISNULL = "NetconfDeviceInfo is null";
+
         @Override
         public void deviceAdded(NetconfDeviceInfo nodeId) {
-            Preconditions.checkNotNull(nodeId, ISNOTNULL);
+            Preconditions.checkNotNull(nodeId, ISNULL);
             DeviceId deviceId = nodeId.getDeviceId();
             //Netconf configuration object
             ChassisId cid = new ChassisId();
             String ipAddress = nodeId.ip().toString();
             SparseAnnotations annotations = DefaultAnnotations.builder()
-                    .set("ipaddress", ipAddress).build();
+                    .set(IPADDRESS, ipAddress).build();
             DeviceDescription deviceDescription = new DefaultDeviceDescription(
                     deviceId.uri(),
                     Device.Type.SWITCH,
@@ -164,7 +170,7 @@
 
         @Override
         public void deviceRemoved(NetconfDeviceInfo nodeId) {
-            Preconditions.checkNotNull(nodeId, ISNOTNULL);
+            Preconditions.checkNotNull(nodeId, ISNULL);
             DeviceId deviceId = nodeId.getDeviceId();
             providerService.deviceDisconnected(deviceId);
 
@@ -184,7 +190,7 @@
                                                                        addr.ip(),
                                                                        addr.port()));
                                      } catch (IOException e) {
-                                         log.warn("Can't connect to NETCONF " +
+                                         log.info("Can't connect to NETCONF " +
                                                           "device on {}:{}",
                                                   addr.ip(),
                                                   addr.port());