[VOL-4746] removing sub based on programmed data

Fix originally sent by Matteo Scandolo.

Change-Id: Ia62300f17af84d8cac98e3fc18a99eb697d4de15
Signed-off-by: Gustavo Silva <gsilva@furukawalatam.com>
diff --git a/impl/src/main/java/org/opencord/olt/impl/OltUtils.java b/impl/src/main/java/org/opencord/olt/impl/OltUtils.java
index 45d684e..339bfb1 100644
--- a/impl/src/main/java/org/opencord/olt/impl/OltUtils.java
+++ b/impl/src/main/java/org/opencord/olt/impl/OltUtils.java
@@ -19,10 +19,17 @@
 import org.onlab.packet.VlanId;
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.Port;
+import org.opencord.olt.AccessDevicePort;
 import org.opencord.olt.FlowOperation;
+import org.opencord.olt.OltFlowServiceInterface;
+import org.opencord.olt.ServiceKey;
 import org.opencord.sadis.SubscriberAndDeviceInformation;
 import org.opencord.sadis.UniTagInformation;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * Utility class for OLT app.
  */
@@ -83,4 +90,21 @@
         }
         return service;
     }
+
+    public static SubscriberAndDeviceInformation getProgrammedSubscriber(
+            OltFlowServiceInterface service, AccessDevicePort accessDevicePort) {
+        List<Map.Entry<ServiceKey, UniTagInformation>> entries =
+                service.getProgrammedSubscribers().entrySet().stream()
+                        .filter(entry -> entry.getKey().getPort().equals(accessDevicePort))
+                        .collect(Collectors.toList());
+        if (!entries.isEmpty()) {
+            List<UniTagInformation> programmedList = entries.stream()
+                    .map(entry -> entry.getKey().getService())
+                    .collect(Collectors.toList());
+            SubscriberAndDeviceInformation si = new SubscriberAndDeviceInformation();
+            si.setUniTagList(programmedList);
+            return si;
+        }
+        return null;
+    }
 }