Adding server-side user preferences.

More work still needs to get done to allow client to process
server-pushed preferences updates.

Change-Id: I6e80e3f3677285cb19cfa3b6240c1b13aac56622
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
index 564b07f..a9f349f 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiWebSocketServlet.java
@@ -70,7 +70,10 @@
         if (isStopped) {
             return null;
         }
-        UiWebSocket socket = new UiWebSocket(directory);
+
+        // FIXME: Replace this with globally shared opaque token to allow secure failover
+        String userName = request.getUserPrincipal().getName();
+        UiWebSocket socket = new UiWebSocket(directory, userName);
         synchronized (sockets) {
             sockets.add(socket);
         }
@@ -89,6 +92,20 @@
         }
     }
 
+    /**
+     * Sends the specified message to all the GUI clients of the specified user.
+     *
+     * @param userName user name
+     * @param type     message type
+     * @param payload  message payload
+     */
+    static void sendToUser(String userName, String type, ObjectNode payload) {
+        if (instance != null) {
+            instance.sockets.stream().filter(ws -> userName.equals(ws.userName()))
+                    .forEach(ws -> ws.sendMessage(type, 0, payload));
+        }
+    }
+
     // Task for pruning web-sockets that are idle.
     private class Pruner extends TimerTask {
         @Override