Adding fujitsu t200 driver, reads OCH and ODUclt port descriptions from netconf. Does not work with the simulator!

Change-Id: I91e624eb747870b7a74d4d4c30e1748b637f7411
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 f7415ef..0bf3493 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
@@ -31,6 +31,7 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.SparseAnnotations;
+import org.onosproject.net.behaviour.PortDiscovery;
 import org.onosproject.net.config.ConfigFactory;
 import org.onosproject.net.config.NetworkConfigEvent;
 import org.onosproject.net.config.NetworkConfigListener;
@@ -40,6 +41,8 @@
 import org.onosproject.net.device.DeviceProvider;
 import org.onosproject.net.device.DeviceProviderRegistry;
 import org.onosproject.net.device.DeviceProviderService;
+import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.driver.DriverService;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
 import org.onosproject.netconf.NetconfController;
@@ -74,6 +77,12 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected DriverService driverService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected DeviceService deviceService;
+
     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";
@@ -166,7 +175,6 @@
                     cid,
                     annotations);
             providerService.deviceConnected(deviceId, deviceDescription);
-
         }
 
         @Override
@@ -185,11 +193,22 @@
                 cfg.getDevicesAddresses().stream()
                         .forEach(addr -> {
                                      try {
-                                         controller.connectDevice(
-                                                 new NetconfDeviceInfo(addr.name(),
-                                                                       addr.password(),
-                                                                       addr.ip(),
-                                                                       addr.port()));
+                                         NetconfDeviceInfo netconf = new NetconfDeviceInfo(addr.name(),
+                                                               addr.password(),
+                                                               addr.ip(),
+                                                               addr.port());
+                                         controller.connectDevice(netconf);
+                                         Device device = deviceService.getDevice(netconf.getDeviceId());
+                                         if (device.is(PortDiscovery.class)) {
+                                             PortDiscovery portConfig = device.as(PortDiscovery.class);
+                                             if (portConfig != null) {
+                                                 providerService.updatePorts(netconf.getDeviceId(),
+                                                                             portConfig.getPorts());
+                                             }
+                                         } else {
+                                             log.warn("No portGetter behaviour for device {}", netconf.getDeviceId());
+                                         }
+
                                      } catch (IOException e) {
                                          throw new RuntimeException(
                                                  new NetconfException(