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/DeviceViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
index 2e8336c..806e8c6 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
@@ -30,12 +30,10 @@
 import org.onosproject.ui.RequestHandler;
 import org.onosproject.ui.UiMessageHandler;
 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.Collections;
 import java.util.List;
@@ -47,7 +45,12 @@
 public class DeviceViewMessageHandler extends UiMessageHandler {
 
     private static final String DEV_DATA_REQ = "deviceDataRequest";
-    private static final String DEV_DETAIL_REQ = "deviceDetailRequest";
+    private static final String DEV_DATA_RESP = "deviceDataResponse";
+    private static final String DEVICES = "devices";
+
+    private static final String DEV_DETAILS_REQ = "deviceDetailsRequest";
+    private static final String DEV_DETAILS_RESP = "deviceDetailsResponse";
+    private static final String DETAILS = "details";
 
     private static final String ID = "id";
     private static final String TYPE = "type";
@@ -78,30 +81,16 @@
         );
     }
 
-    // ======================================================================
-
-    private final class DataRequestHandler extends RequestHandler {
-
+    // handler for device table requests
+    private final class DataRequestHandler extends TableRequestHandler {
         private DataRequestHandler() {
-            super(DEV_DATA_REQ);
+            super(DEV_DATA_REQ, DEV_DATA_RESP, DEVICES);
         }
 
         @Override
-        public void process(long sid, ObjectNode payload) {
-            RowComparator rc = TableUtils.createRowComparator(payload);
-
+        protected TableRow[] generateTableRows(ObjectNode payload) {
             DeviceService service = get(DeviceService.class);
             MastershipService mastershipService = get(MastershipService.class);
-            TableRow[] rows = generateTableRows(service, mastershipService);
-            Arrays.sort(rows, rc);
-            ObjectNode rootNode = MAPPER.createObjectNode();
-            rootNode.set("devices", TableUtils.generateArrayNode(rows));
-
-            sendMessage("deviceDataResponse", 0, rootNode);
-        }
-
-        private TableRow[] generateTableRows(DeviceService service,
-                                             MastershipService mastershipService) {
             List<TableRow> list = new ArrayList<>();
             for (Device dev : service.getDevices()) {
                 list.add(new DeviceTableRow(service, mastershipService, dev));
@@ -110,11 +99,10 @@
         }
     }
 
-    // ======================================================================
-
+    // handler for selected device detail requests
     private final class DetailRequestHandler extends RequestHandler {
         private DetailRequestHandler() {
-            super(DEV_DETAIL_REQ);
+            super(DEV_DETAILS_REQ);
         }
 
         @Override
@@ -152,8 +140,8 @@
             data.set(PORTS, ports);
 
             ObjectNode rootNode = MAPPER.createObjectNode();
-            rootNode.set("details", data);
-            sendMessage("deviceDetailsResponse", 0, rootNode);
+            rootNode.set(DETAILS, data);
+            sendMessage(DEV_DETAILS_RESP, 0, rootNode);
         }
 
         private ObjectNode portData(Port p, DeviceId id) {
@@ -183,7 +171,6 @@
 
     }
 
-
     private static String getTypeIconId(Device d) {
         return DEV_ICON_PREFIX + d.type().toString();
     }