[VOL-3673] Adding per device filter to dhcpl2relay-allocations command

Change-Id: I593be0f987a8e57aaec764b93354f6418dc7d8d5
diff --git a/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayAllocationsCommand.java b/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayAllocationsCommand.java
index 4d38e8f..1455e2f 100644
--- a/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayAllocationsCommand.java
+++ b/app/src/main/java/org/opencord/dhcpl2relay/cli/DhcpL2RelayAllocationsCommand.java
@@ -15,11 +15,19 @@
  */
 package org.opencord.dhcpl2relay.cli;
 
+import org.apache.karaf.shell.api.action.Argument;
 import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Completion;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.cli.net.DeviceIdCompleter;
+import org.onosproject.net.DeviceId;
+import org.opencord.dhcpl2relay.DhcpAllocationInfo;
 import org.opencord.dhcpl2relay.DhcpL2RelayService;
 
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  *  Shows the Successful DHCP allocations relayed by the dhcpl2relay.
  */
@@ -27,11 +35,25 @@
 @Command(scope = "onos", name = "dhcpl2relay-allocations",
         description = "Shows the Successful DHCP allocations relayed by the dhcpl2relay")
 public class DhcpL2RelayAllocationsCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "deviceId", description = "Access device ID")
+    @Completion(DeviceIdCompleter.class)
+    private String strDeviceId = null;
+
     @Override
     protected void doExecute() {
         DhcpL2RelayService service = get(DhcpL2RelayService.class);
 
-        service.getAllocationInfo().forEach((key, value) -> {
+        Map<String, DhcpAllocationInfo> allocations = service.getAllocationInfo();
+
+        if (strDeviceId != null && !strDeviceId.isEmpty()) {
+            DeviceId deviceId = DeviceId.deviceId(strDeviceId);
+            allocations = allocations.entrySet().stream()
+                    .filter(a -> a.getValue().location().deviceId().equals(deviceId))
+                    .collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue()));
+        }
+
+        allocations.forEach((key, value) -> {
             print("SubscriberId=%s,ConnectPoint=%s,State=%s,MAC=%s,VLAN=%s,"
                     + "CircuitId=%s,IP Allocated=%s,Allocation Timestamp=%s",
                     value.subscriberId(), value.location(), value.type(),
diff --git a/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayConfigTest.java b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayConfigTest.java
index e218088..493f45d 100644
--- a/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayConfigTest.java
+++ b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayConfigTest.java
@@ -114,7 +114,7 @@
     /**
      * Mocks the network config registry.
      */
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({"unchecked", "TypeParameterUnusedInFormals"})
     static final class TestNetworkConfigRegistry
             extends NetworkConfigRegistryAdapter {
         @Override
diff --git a/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java
index df480a7..ccecb51 100755
--- a/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java
+++ b/app/src/test/java/org/opencord/dhcpl2relay/impl/DhcpL2RelayTestBase.java
@@ -586,12 +586,14 @@
         }
 
         @Override
+        @SuppressWarnings({"TypeParameterUnusedInFormals"})
         public <T> T invokeAny(Collection<? extends Callable<T>> tasks)
                 throws ExecutionException, InterruptedException {
             throw new UnsupportedOperationException();
         }
 
         @Override
+        @SuppressWarnings({"TypeParameterUnusedInFormals"})
         public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit)
                 throws ExecutionException, InterruptedException, TimeoutException {
             throw new UnsupportedOperationException();
@@ -618,6 +620,7 @@
         }
 
         @Override
+        @SuppressWarnings({"TypeParameterUnusedInFormals"})
         public <T> Future<T> submit(Callable<T> task) {
             throw new UnsupportedOperationException();
         }