ONOS-3754 Create driver/behavior for Ciena waveserver

Change-Id: I2e8741f0ad858eb712f7fe4f4a5fdf5e146aefd6
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 8638561..76f5abd 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
@@ -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,7 +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.PortDescription;
+import org.onosproject.net.driver.DriverHandler;
+import org.onosproject.net.driver.DriverService;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
 import org.onosproject.protocol.rest.RestSBController;
@@ -51,7 +53,6 @@
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 import static org.onosproject.net.config.NetworkConfigEvent.Type.CONFIG_ADDED;
@@ -84,6 +85,9 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected CoreService coreService;
 
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected DriverService driverService;
+
 
     private DeviceProviderService providerService;
     protected static final String ISNOTNULL = "Rest device is not null";
@@ -170,11 +174,6 @@
         controller.addDevice(nodeId);
     }
 
-    private void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
-        // TODO get driver and call behavior to get ports
-        //signal the ports to onos
-    }
-
     //when do I call it ?
     public void deviceRemoved(RestSBDevice nodeId) {
         Preconditions.checkNotNull(nodeId, ISNOTNULL);
@@ -204,8 +203,15 @@
             log.error("Configuration error {}", e);
         }
         log.info("REST Devices {}", controller.getDevices());
-        //TODO ask for ports then call update ports.
-
+        controller.getDevices().keySet().forEach(deviceId -> {
+            DriverHandler h = driverService.createHandler(deviceId);
+            PortDiscovery portConfig = h.behaviour(PortDiscovery.class);
+            if (portConfig != null) {
+                providerService.updatePorts(deviceId, portConfig.getPorts());
+            } else {
+                log.warn("No portGetter behaviour for device {}", deviceId);
+            }
+        });
     }
 
     private boolean testDeviceConnection(RestSBDevice device) {