GUI -- refactored all the table views (server side) to use the new TableModel method of data generation.

Change-Id: Ib8a188ad432ff335db6cff1e49e08dbaf039436b
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 ae7f489..e361563 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
@@ -19,20 +19,17 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
-import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Link;
 import org.onosproject.net.LinkKey;
 import org.onosproject.net.link.LinkService;
 import org.onosproject.ui.RequestHandler;
 import org.onosproject.ui.UiMessageHandler;
 import org.onosproject.ui.impl.TopologyViewMessageHandlerBase.BiLink;
-import org.onosproject.ui.table.AbstractTableRow;
+import org.onosproject.ui.table.TableModel;
 import org.onosproject.ui.table.TableRequestHandler;
-import org.onosproject.ui.table.TableRow;
+import org.onosproject.ui.table.cell.ConnectPointFormatter;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 import java.util.Map;
 
 import static org.onosproject.ui.impl.TopologyViewMessageHandlerBase.addLink;
@@ -53,6 +50,13 @@
     private static final String DIRECTION = "direction";
     private static final String DURABLE = "durable";
 
+    private static final String[] COL_IDS = {
+            ONE, TWO, TYPE, STATE, DIRECTION, DURABLE
+    };
+
+    private static final String ICON_ID_ONLINE = "active";
+    private static final String ICON_ID_OFFLINE = "inactive";
+
     @Override
     protected Collection<RequestHandler> getHandlers() {
         return ImmutableSet.of(new LinkDataRequest());
@@ -65,48 +69,51 @@
         }
 
         @Override
-        protected TableRow[] generateTableRows(ObjectNode payload) {
-            LinkService service = get(LinkService.class);
-            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()]);
+        protected String[] getColumnIds() {
+            return COL_IDS;
         }
 
         @Override
-        protected String defaultColId() {
+        protected String defaultColumnId() {
             return ONE;
         }
-    }
 
-    /**
-     * TableRow implementation for {@link org.onosproject.net.Link links}.
-     */
-    private static class LinkTableRow extends AbstractTableRow {
+        @Override
+        protected TableModel createTableModel() {
+            TableModel tm = super.createTableModel();
+            tm.setFormatter(ONE, ConnectPointFormatter.INSTANCE);
+            tm.setFormatter(TWO, ConnectPointFormatter.INSTANCE);
+            return tm;
+        }
 
-        private static final String[] COL_IDS = {
-                ONE, TWO, TYPE, STATE, DIRECTION, DURABLE
-        };
+        @Override
+        protected void populateTable(TableModel tm, ObjectNode payload) {
+            LinkService ls = get(LinkService.class);
 
-        private static final String ICON_ID_ONLINE = "active";
-        private static final String ICON_ID_OFFLINE = "inactive";
+            // First consolidate all uni-directional links into two-directional ones.
+            Map<LinkKey, BiLink> biLinks = Maps.newHashMap();
+            ls.getLinks().forEach(link -> addLink(biLinks, link));
 
-        public LinkTableRow(BiLink link) {
-            ConnectPoint src = link.one.src();
-            ConnectPoint dst = link.one.dst();
-            linkState(link);
+            // Now scan over all bi-links and produce table rows from them.
+            biLinks.values().forEach(biLink -> populateRow(tm.addRow(), biLink));
+        }
 
-            add(ONE, concat(src.elementId(), "/", src.port()));
-            add(TWO, concat(dst.elementId(), "/", dst.port()));
-            add(TYPE, linkType(link).toLowerCase());
-            add(STATE, linkState(link));
-            add(DIRECTION, link.two != null ? "A <--> B" : "A --> B");
-            add(DURABLE, Boolean.toString(link.one.isDurable()));
+        private void populateRow(TableModel.Row row, BiLink biLink) {
+            row.cell(ONE, biLink.one.src())
+                .cell(TWO, biLink.one.dst())
+                .cell(TYPE, linkType(biLink))
+                .cell(STATE, linkState(biLink))
+                .cell(DIRECTION, linkDir(biLink))
+                .cell(DURABLE, biLink.one.isDurable());
+        }
+
+        private String linkType(BiLink link) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(link.one.type());
+            if (link.two != null && link.two.type() != link.one.type()) {
+                sb.append(" / ").append(link.two.type());
+            }
+            return sb.toString().toLowerCase();
         }
 
         private String linkState(BiLink link) {
@@ -115,16 +122,8 @@
                     ICON_ID_ONLINE : ICON_ID_OFFLINE;
         }
 
-        private String linkType(BiLink link) {
-            return link.two == null || link.one.type() == link.two.type() ?
-                    link.one.type().toString() :
-                    link.one.type().toString() + " / " + link.two.type().toString();
-        }
-
-        @Override
-        protected String[] columnIds() {
-            return COL_IDS;
+        private String linkDir(BiLink link) {
+            return link.two != null ? "A <--> B" : "A --> B";
         }
     }
-
 }