Partial support for LambdaQuery returning FLEX grid.

Change-Id: I419cb38d1639639fad3f8327ecfbd3c63932f179
diff --git a/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceDeviceListener.java b/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceDeviceListener.java
index 73997ac..a15083e 100644
--- a/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceDeviceListener.java
+++ b/core/net/src/main/java/org/onosproject/net/resource/impl/ResourceDeviceListener.java
@@ -17,14 +17,17 @@
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
+
 import org.onlab.packet.MplsLabel;
 import org.onlab.packet.VlanId;
 import org.onlab.util.Bandwidth;
 import org.onlab.util.ItemNotFoundException;
 import org.onosproject.mastership.MastershipService;
+import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.GridType;
 import org.onosproject.net.OchSignal;
 import org.onosproject.net.Port;
 import org.onosproject.net.PortNumber;
@@ -55,6 +58,7 @@
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -259,7 +263,7 @@
             LambdaQuery query = handler.behaviour(LambdaQuery.class);
             if (query != null) {
                 return query.queryLambdas(port).stream()
-                        .flatMap(x -> OchSignal.toFlexGrid(x).stream())
+                        .flatMap(ResourceDeviceListener::toResourceGrid)
                         .collect(Collectors.toSet());
             } else {
                 return Collections.emptySet();
@@ -269,6 +273,28 @@
         }
     }
 
+    /**
+     * Convert {@link OchSignal} into gridtype used to track Resource.
+     *
+     * @param ochSignal {@link OchSignal}
+     * @return {@code ochSignal} mapped to Stream of flex grid slots with 6.25 GHz spacing
+     *         and 12.5 GHz slot width.
+     */
+    private static Stream<OchSignal> toResourceGrid(OchSignal ochSignal) {
+        if (ochSignal.gridType() != GridType.FLEX) {
+            return OchSignal.toFlexGrid(ochSignal).stream();
+        }
+        if (ochSignal.gridType() == GridType.FLEX &&
+            ochSignal.channelSpacing() == ChannelSpacing.CHL_6P25GHZ &&
+            ochSignal.slotGranularity() == 1) {
+                // input was already flex grid slots with 6.25 GHz spacing and 12.5 GHz slot width.
+                return Stream.of(ochSignal);
+        }
+        // FIXME handle FLEX but not 6.25 GHz spacing or 12.5 GHz slot width case.
+        log.error("Converting {} to resource tracking grid not supported yet.", ochSignal);
+        return Stream.<OchSignal>builder().build();
+    }
+
     private Set<VlanId> queryVlanIds(DeviceId device, PortNumber port) {
         try {
             DriverHandler handler = driverService.createHandler(device);