Add CLI command to view provisioned subscribers

Change-Id: I67a49d7fa569e9f4f28eb8eaea1b34ba2bd5a5fa
diff --git a/api/src/main/java/org/onosproject/olt/AccessDeviceService.java b/api/src/main/java/org/onosproject/olt/AccessDeviceService.java
index 74d8a28..456e264 100644
--- a/api/src/main/java/org/onosproject/olt/AccessDeviceService.java
+++ b/api/src/main/java/org/onosproject/olt/AccessDeviceService.java
@@ -21,6 +21,7 @@
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 
+import java.util.Collection;
 import java.util.Map;
 
 /**
@@ -45,6 +46,13 @@
     void removeSubscriber(ConnectPoint port);
 
     /**
+     * Returns information about the provisioned subscribers.
+     *
+     * @return subscribers
+     */
+    Collection<Map.Entry<ConnectPoint, VlanId>> getSubscribers();
+
+    /**
      * Returns the map of configured OLTs.
      *
      * @return a map
diff --git a/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java b/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java
index 63b3af1..21996aa 100644
--- a/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java
+++ b/app/src/main/java/org/onosproject/olt/cli/ShowOltCommand.java
@@ -26,9 +26,9 @@
 import java.util.Map;
 
 /**
- * Adds a subscriber to an access device.
+ * Shows configured OLTs.
  */
-@Command(scope = "onos", name = "show-olts",
+@Command(scope = "onos", name = "olts",
         description = "Shows configured OLTs")
 public class ShowOltCommand extends AbstractShellCommand {
 
diff --git a/app/src/main/java/org/onosproject/olt/cli/ShowSubscribersCommand.java b/app/src/main/java/org/onosproject/olt/cli/ShowSubscribersCommand.java
new file mode 100644
index 0000000..105abe9
--- /dev/null
+++ b/app/src/main/java/org/onosproject/olt/cli/ShowSubscribersCommand.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.olt.cli;
+
+import org.apache.karaf.shell.commands.Command;
+import org.onlab.packet.VlanId;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.olt.AccessDeviceService;
+
+import java.util.Map;
+
+/**
+ * Shows provisioned subscribers.
+ */
+@Command(scope = "onos", name = "subscribers",
+        description = "Shows provisioned subscribers")
+public class ShowSubscribersCommand extends AbstractShellCommand {
+
+    private static final String FORMAT = "port=%s, cvlan=%s";
+
+    @Override
+    protected void execute() {
+        AccessDeviceService service = AbstractShellCommand.get(AccessDeviceService.class);
+        service.getSubscribers().forEach(this::display);
+    }
+
+    private void display(Map.Entry<ConnectPoint, VlanId> subscriber) {
+        print(FORMAT, subscriber.getKey(), subscriber.getValue());
+    }
+}
diff --git a/app/src/main/java/org/onosproject/olt/impl/Olt.java b/app/src/main/java/org/onosproject/olt/impl/Olt.java
index 976fcaa..a62b115 100644
--- a/app/src/main/java/org/onosproject/olt/impl/Olt.java
+++ b/app/src/main/java/org/onosproject/olt/impl/Olt.java
@@ -67,6 +67,7 @@
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
+import java.util.Collection;
 import java.util.Dictionary;
 import java.util.List;
 import java.util.Map;
@@ -243,6 +244,11 @@
     }
 
     @Override
+    public Collection<Map.Entry<ConnectPoint, VlanId>> getSubscribers() {
+        return subscribers.entrySet();
+    }
+
+    @Override
     public Map<DeviceId, AccessDeviceData> fetchOlts() {
         return Maps.newHashMap(oltData);
     }
@@ -459,11 +465,10 @@
         public void event(DeviceEvent event) {
             DeviceId devId = event.subject().id();
             if (!oltData.containsKey(devId)) {
-                log.debug("Device {} is not an OLT", devId);
                 return;
             }
             switch (event.type()) {
-                //TODO: Port handling and bookkeeping should be inproved once
+                //TODO: Port handling and bookkeeping should be improved once
                 // olt firmware handles correct behaviour.
                 case PORT_ADDED:
                     if (!oltData.get(devId).uplink().equals(event.port().number()) &&
diff --git a/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 5d114f9..aa62d74 100644
--- a/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -37,6 +37,9 @@
                 <null/>
             </completers>
         </command>
+        <command>
+            <action class="org.onosproject.olt.cli.ShowSubscribersCommand"/>
+        </command>
     </command-bundle>
 
     <bean id="deviceIdCompleter" class="org.onosproject.cli.net.DeviceIdCompleter"/>