Refactor AAA app in preparation for clustered operation.

* Add formal API for accessing auth state information rather than directly
looking up static maps.
* Move static maps in StateMachine to non-static maps in AaaManager
* Manage identifier space used for requests/replies better
* Refactored state machine timeout mechansim

Change-Id: Ie53c3a66ac1619e10607d9926b71747a333317f3
diff --git a/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java b/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java
index 112d70b..cd1cea5 100644
--- a/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java
+++ b/app/src/main/java/org/opencord/aaa/cli/AaaShowUsersCommand.java
@@ -20,7 +20,8 @@
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.device.DeviceService;
-import org.opencord.aaa.impl.StateMachine;
+import org.opencord.aaa.AuthenticationRecord;
+import org.opencord.aaa.AuthenticationService;
 import org.opencord.sadis.SadisService;
 import org.opencord.sadis.SubscriberAndDeviceInformation;
 
@@ -33,32 +34,25 @@
 public class AaaShowUsersCommand extends AbstractShellCommand {
     @Override
     protected void doExecute() {
-        String[] state = {
-                "IDLE",
-                "STARTED",
-                "PENDING",
-                "AUTHORIZED",
-                "UNAUTHORIZED"
-        };
 
-        DeviceService devService = AbstractShellCommand.get(DeviceService.class);
-        SadisService sadisService =
-                AbstractShellCommand.get(SadisService.class);
+        DeviceService devService = get(DeviceService.class);
+        SadisService sadisService = get(SadisService.class);
+        AuthenticationService authService = get(AuthenticationService.class);
 
-        for (StateMachine stateMachine : StateMachine.sessionIdMap().values()) {
-            String deviceId = stateMachine.supplicantConnectpoint().deviceId().toString();
-            String portNum = stateMachine.supplicantConnectpoint().port().toString();
+        for (AuthenticationRecord auth : authService.getAuthenticationRecords()) {
+            String deviceId = auth.supplicantConnectPoint().deviceId().toString();
+            String portNum = auth.supplicantConnectPoint().port().toString();
 
             String username = "UNKNOWN";
-            if (stateMachine.username() != null) {
-                username = new String(stateMachine.username());
+            if (auth.username() != null) {
+                username = new String(auth.username());
             }
             String mac = "UNKNOWN";
-            if (stateMachine.supplicantAddress() != null) {
-                mac = stateMachine.supplicantAddress().toString();
+            if (auth.supplicantAddress() != null) {
+                mac = auth.supplicantAddress().toString();
             }
 
-            String nasPortId = devService.getPort(stateMachine.supplicantConnectpoint()).
+            String nasPortId = devService.getPort(auth.supplicantConnectPoint()).
                     annotations().value(AnnotationKeys.PORT_NAME);
 
             String subsId = "UNKNOWN";
@@ -68,7 +62,7 @@
             }
 
             print("UserName=%s,CurrentState=%s,DeviceId=%s,MAC=%s,PortNumber=%s,SubscriberId=%s",
-                  username, state[stateMachine.state()], deviceId, mac, portNum, subsId);
+                  username, auth.state(), deviceId, mac, portNum, subsId);
         }
     }
 }