GUI -- Huge Refactoring of server-side message handlers (Part Two).
--- Well, it compiles, and seems to work, with the cursory testing I've done...

Change-Id: I0e59657c134e109850e4770766083370dfd9fdc2
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java
index 6683188..55291c4 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/LinkViewMessageHandler.java
@@ -23,7 +23,8 @@
 import org.onosproject.net.Link;
 import org.onosproject.net.LinkKey;
 import org.onosproject.net.link.LinkService;
-import org.onosproject.ui.UiMessageHandler;
+import org.onosproject.ui.RequestHandler;
+import org.onosproject.ui.UiMessageHandlerTwo;
 import org.onosproject.ui.impl.TopologyViewMessageHandlerBase.BiLink;
 import org.onosproject.ui.table.AbstractTableRow;
 import org.onosproject.ui.table.RowComparator;
@@ -32,6 +33,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
@@ -40,47 +42,51 @@
 /**
  * Message handler for link view related messages.
  */
-public class LinkViewMessageHandler extends UiMessageHandler {
+public class LinkViewMessageHandler extends UiMessageHandlerTwo {
 
-    /**
-     * Creates a new message handler for the link messages.
-     */
-    protected LinkViewMessageHandler() {
-        super(ImmutableSet.of("linkDataRequest"));
-    }
+    private static final String LINK_DATA_REQ = "linkDataRequest";
+
 
     @Override
-    public void process(ObjectNode message) {
-        String type = eventType(message);
-        if (type.equals("linkDataRequest")) {
-            sendLinkList(message);
+    protected Collection<RequestHandler> getHandlers() {
+        return ImmutableSet.of(new LinkDataRequest());
+    }
+
+    // ======================================================================
+
+    private final class LinkDataRequest extends RequestHandler {
+
+        private LinkDataRequest() {
+            super(LINK_DATA_REQ);
+        }
+
+        @Override
+        public void process(long sid, ObjectNode payload) {
+            RowComparator rc = TableUtils.createRowComparator(payload, "one");
+
+            LinkService service = get(LinkService.class);
+            TableRow[] rows = generateTableRows(service);
+            Arrays.sort(rows, rc);
+            ObjectNode rootNode = MAPPER.createObjectNode();
+            rootNode.set("links", TableUtils.generateArrayNode(rows));
+
+            sendMessage("linkDataResponse", 0, rootNode);
+        }
+
+        private TableRow[] generateTableRows(LinkService service) {
+            List<TableRow> list = new ArrayList<>();
+
+            // First consolidate all uni-directional links into two-directional ones.
+            Map<LinkKey, BiLink> biLinks = Maps.newHashMap();
+            service.getLinks().forEach(link -> addLink(biLinks, link));
+
+            // Now scan over all bi-links and produce table rows from them.
+            biLinks.values().forEach(biLink -> list.add(new LinkTableRow(biLink)));
+            return list.toArray(new TableRow[list.size()]);
         }
     }
 
-    private void sendLinkList(ObjectNode message) {
-        ObjectNode payload = payload(message);
-        RowComparator rc = TableUtils.createRowComparator(payload, "one");
-
-        LinkService service = get(LinkService.class);
-        TableRow[] rows = generateTableRows(service);
-        Arrays.sort(rows, rc);
-        ObjectNode rootNode = mapper.createObjectNode();
-        rootNode.set("links", TableUtils.generateArrayNode(rows));
-
-        connection().sendMessage("linkDataResponse", 0, rootNode);
-    }
-
-    private TableRow[] generateTableRows(LinkService service) {
-        List<TableRow> list = new ArrayList<>();
-
-        // First consolidate all uni-directional links into two-directional ones.
-        Map<LinkKey, BiLink> biLinks = Maps.newHashMap();
-        service.getLinks().forEach(link -> addLink(biLinks, link));
-
-        // Now scan over all bi-links and produce table rows from them.
-        biLinks.values().forEach(biLink -> list.add(new LinkTableRow(biLink)));
-        return list.toArray(new TableRow[list.size()]);
-    }
+    // ======================================================================
 
     /**
      * TableRow implementation for {@link org.onosproject.net.Link links}.