Deprecating PortDiscovery in favour of DeviceDescritpionDiscovery

Change-Id: Ie9cff7937412c62c8a5a3b75b87a43952017f146
diff --git a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/PortDiscoveryCienaWaveserverImpl.java b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverDeviceDescription.java
similarity index 88%
rename from drivers/ciena/src/main/java/org/onosproject/drivers/ciena/PortDiscoveryCienaWaveserverImpl.java
rename to drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverDeviceDescription.java
index 74df64c..69bbe9c 100644
--- a/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/PortDiscoveryCienaWaveserverImpl.java
+++ b/drivers/ciena/src/main/java/org/onosproject/drivers/ciena/CienaWaveserverDeviceDescription.java
@@ -18,6 +18,7 @@
 
 package org.onosproject.drivers.ciena;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.onosproject.drivers.utilities.XmlConfigParser;
@@ -31,11 +32,13 @@
 import org.onosproject.net.OduSignalType;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
-import org.onosproject.net.behaviour.PortDiscovery;
+import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.DeviceDescriptionDiscovery;
 import org.onosproject.net.device.PortDescription;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.net.driver.DriverHandler;
 import org.onosproject.protocol.rest.RestSBController;
+import org.slf4j.Logger;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,12 +46,15 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onosproject.net.optical.device.OchPortHelper.ochPortDescription;
 import static org.onosproject.net.optical.device.OduCltPortHelper.oduCltPortDescription;
+import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Discovers the ports from a Ciena WaveServer Rest device.
  */
-public class PortDiscoveryCienaWaveserverImpl extends AbstractHandlerBehaviour
-        implements PortDiscovery {
+public class CienaWaveserverDeviceDescription extends AbstractHandlerBehaviour
+        implements DeviceDescriptionDiscovery {
+
+    private final Logger log = getLogger(getClass());
 
     private static final String SPEED = "speed";
     private static final String GBPS = "Gbps";
@@ -74,9 +80,19 @@
 //    private static final String SPECIFIC_PORT_CONFIG =
 //            "/ptp-config?config=true&format=xml&depth=unbounded";
 
+    @Override
+    public DeviceDescription discoverDeviceDetails() {
+        log.info("No description to be added for device");
+        //TODO to be implemented if needed.
+        return null;
+    }
 
     @Override
-    public List<PortDescription> getPorts() {
+    public List<PortDescription> discoverPortDetails() {
+        return getPorts();
+    }
+
+    private List<PortDescription> getPorts() {
         List<PortDescription> ports = Lists.newArrayList();
         DriverHandler handler = handler();
         RestSBController controller = checkNotNull(handler.get(RestSBController.class));
@@ -121,11 +137,11 @@
                                 .replace(" ", EMPTY_STRING))) == speed100GbpsinMbps ?
                         CltSignalType.CLT_100GBE : null;
                 ports.add(oduCltPortDescription(PortNumber.portNumber(sub.getLong(PORT_ID)),
-                                                    sub.getString(ADMIN_STATE).equals(ENABLED),
-                                                    cltType, annotations.build()));
+                                                sub.getString(ADMIN_STATE).equals(ENABLED),
+                                                cltType, annotations.build()));
             }
         });
-        return ports;
+        return ImmutableList.copyOf(ports);
     }
 
     public static List<HierarchicalConfiguration> parseWaveServerCienaPorts(HierarchicalConfiguration cfg) {
@@ -156,7 +172,7 @@
                 baseFrequency)) / toGbpsFromHz(chSpacing.frequency().asHz())); //FIXME is there a better way ?
 
         return ochPortDescription(PortNumber.portNumber(portNumber), isEnabled, oduSignalType, isTunable,
-                                      new OchSignal(gridType, chSpacing, spacingMult, 1), annotations);
+                                  new OchSignal(gridType, chSpacing, spacingMult, 1), annotations);
     }
 
     //FIXME remove when all optical types have two way information methods, see jira tickets
diff --git a/drivers/ciena/src/main/resources/ciena-drivers.xml b/drivers/ciena/src/main/resources/ciena-drivers.xml
index eb08b25..be9e7cb 100644
--- a/drivers/ciena/src/main/resources/ciena-drivers.xml
+++ b/drivers/ciena/src/main/resources/ciena-drivers.xml
@@ -20,6 +20,8 @@
                    impl="org.onosproject.drivers.ciena.PortDiscoveryCienaWaveserverImpl"/>
         <behaviour api="org.onosproject.net.optical.OpticalDevice"
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
+        <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
+                   impl="org.onosproject.drivers.ciena.CienaWaveserverDeviceDescription"/>
     </driver>
 </drivers>
 
diff --git a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/PortGetterFujitsuImpl.java b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuT100DeviceDescription.java
similarity index 90%
rename from drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/PortGetterFujitsuImpl.java
rename to drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuT100DeviceDescription.java
index a65247f..8b8d170 100644
--- a/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/PortGetterFujitsuImpl.java
+++ b/drivers/fujitsu/src/main/java/org/onosproject/drivers/fujitsu/FujitsuT100DeviceDescription.java
@@ -16,6 +16,8 @@
 
 package org.onosproject.drivers.fujitsu;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.onosproject.drivers.utilities.XmlConfigParser;
 import org.onosproject.net.AnnotationKeys;
@@ -26,7 +28,8 @@
 import org.onosproject.net.OchSignal;
 import org.onosproject.net.OduSignalType;
 import org.onosproject.net.PortNumber;
-import org.onosproject.net.behaviour.PortDiscovery;
+import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.DeviceDescriptionDiscovery;
 import org.onosproject.net.device.PortDescription;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.netconf.NetconfController;
@@ -34,8 +37,6 @@
 import org.onosproject.netconf.NetconfSession;
 import org.slf4j.Logger;
 
-import com.google.common.collect.Lists;
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.util.List;
@@ -49,13 +50,20 @@
 /**
  * Retrieves the ports from a Fujitsu T100 device via netconf.
  */
-public class PortGetterFujitsuImpl extends AbstractHandlerBehaviour
-        implements PortDiscovery {
+public class FujitsuT100DeviceDescription extends AbstractHandlerBehaviour
+        implements DeviceDescriptionDiscovery {
 
     private final Logger log = getLogger(getClass());
 
     @Override
-    public List<PortDescription> getPorts() {
+    public DeviceDescription discoverDeviceDetails() {
+        log.info("No description to be added for device");
+        //TODO to be implemented if needed.
+        return null;
+    }
+
+    @Override
+    public List<PortDescription> discoverPortDetails() {
         NetconfController controller = checkNotNull(handler().get(NetconfController.class));
         NetconfSession session = controller.getDevicesMap().get(handler().data().deviceId()).getSession();
         String reply;
@@ -67,12 +75,13 @@
         List<PortDescription> descriptions =
                 parseFujitsuT100Ports(XmlConfigParser.
                         loadXml(new ByteArrayInputStream(reply.getBytes())));
-        return descriptions;
+        return ImmutableList.copyOf(descriptions);
     }
 
     /**
      * Builds a request crafted to get the configuration required to create port
      * descriptions for the device.
+     *
      * @return The request string.
      */
     private String requestBuilder() {
@@ -91,6 +100,7 @@
 
     /**
      * Parses a configuration and returns a set of ports for the fujitsu T100.
+     *
      * @param cfg a hierarchical configuration
      * @return a list of port descriptions
      */
diff --git a/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml b/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml
index 6fa7095..d545eda 100644
--- a/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml
+++ b/drivers/fujitsu/src/main/resources/fujitsu-drivers.xml
@@ -20,6 +20,8 @@
                    impl="org.onosproject.drivers.fujitsu.PortGetterFujitsuImpl"/>
         <behaviour api="org.onosproject.net.optical.OpticalDevice"
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
+        <behaviour api="org.onosproject.net.device.DeviceDescriptionDiscovery"
+                   impl="org.onosproject.drivers.fujitsu.FujitsuT100DeviceDescription"/>
     </driver>
 </drivers>
 
diff --git a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumRoadmDeviceDescription.java b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumRoadmDeviceDescription.java
index 0bf9b13..46e0887 100644
--- a/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumRoadmDeviceDescription.java
+++ b/drivers/lumentum/src/main/java/org/onosproject/drivers/lumentum/LumentumRoadmDeviceDescription.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.drivers.lumentum;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.DefaultAnnotations;
@@ -45,7 +46,7 @@
 /**
  * Device description behaviour for Lumentum Snmp devices.
  */
-public class LumentumRoadmDeviceDescription extends AbstractHandlerBehaviour implements DeviceDescriptionDiscovery  {
+public class LumentumRoadmDeviceDescription extends AbstractHandlerBehaviour implements DeviceDescriptionDiscovery {
 
     private final Logger log = getLogger(getClass());
 
@@ -66,7 +67,7 @@
 
     @Override
     public List<PortDescription> discoverPortDetails() {
-        return this.getPorts();
+        return ImmutableList.copyOf(this.getPorts());
     }
 
     private List<PortDescription> getPorts() {