GUI -- Introduce TableRequestHandler and refactor all table-based requests to use this class.

Change-Id: Ia26a78e9c4abead17de5e7f6babd54202c6772d9
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 06349b4..ae7f489 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
@@ -27,12 +27,10 @@
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.impl.TopologyViewMessageHandlerBase.BiLink;
 import org.onosproject.ui.table.AbstractTableRow;
-import org.onosproject.ui.table.RowComparator;
+import org.onosproject.ui.table.TableRequestHandler;
 import org.onosproject.ui.table.TableRow;
-import org.onosproject.ui.table.TableUtils;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -45,35 +43,30 @@
 public class LinkViewMessageHandler extends UiMessageHandler {
 
     private static final String LINK_DATA_REQ = "linkDataRequest";
+    private static final String LINK_DATA_RESP = "linkDataResponse";
+    private static final String LINKS = "links";
 
+    private static final String ONE = "one";
+    private static final String TWO = "two";
+    private static final String TYPE = "type";
+    private static final String STATE = "_iconid_state";
+    private static final String DIRECTION = "direction";
+    private static final String DURABLE = "durable";
 
     @Override
     protected Collection<RequestHandler> getHandlers() {
         return ImmutableSet.of(new LinkDataRequest());
     }
 
-    // ======================================================================
-
-    private final class LinkDataRequest extends RequestHandler {
-
+    // handler for link table requests
+    private final class LinkDataRequest extends TableRequestHandler {
         private LinkDataRequest() {
-            super(LINK_DATA_REQ);
+            super(LINK_DATA_REQ, LINK_DATA_RESP, LINKS);
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
-            RowComparator rc = TableUtils.createRowComparator(payload, "one");
-
+        protected TableRow[] generateTableRows(ObjectNode payload) {
             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.
@@ -84,22 +77,18 @@
             biLinks.values().forEach(biLink -> list.add(new LinkTableRow(biLink)));
             return list.toArray(new TableRow[list.size()]);
         }
-    }
 
-    // ======================================================================
+        @Override
+        protected String defaultColId() {
+            return ONE;
+        }
+    }
 
     /**
      * TableRow implementation for {@link org.onosproject.net.Link links}.
      */
     private static class LinkTableRow extends AbstractTableRow {
 
-        private static final String ONE = "one";
-        private static final String TWO = "two";
-        private static final String TYPE = "type";
-        private static final String STATE = "_iconid_state";
-        private static final String DIRECTION = "direction";
-        private static final String DURABLE = "durable";
-
         private static final String[] COL_IDS = {
                 ONE, TWO, TYPE, STATE, DIRECTION, DURABLE
         };