[ONOS-3722] Augment TableModel to support annotations

Change-Id: Ie90fa6b26887ddd5afb03eb116304c16f10396ff
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
index 2e1e7a0..6f8eee9 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ApplicationViewMessageHandler.java
@@ -78,7 +78,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
index 8c6c1eb..a7eaaee 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ClusterViewMessageHandler.java
@@ -72,7 +72,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
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 bbcbc91..dff127c 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
@@ -139,7 +139,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
index 5860a6d..348edac 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/FlowViewMessageHandler.java
@@ -87,7 +87,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
index ab61a6a..cc7f5e6 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/GroupViewMessageHandler.java
@@ -19,7 +19,9 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
+import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.group.Group;
 import org.onosproject.net.group.GroupBucket;
 import org.onosproject.net.group.GroupService;
@@ -45,6 +47,9 @@
     private static final String GROUP_DATA_RESP = "groupDataResponse";
     private static final String GROUPS = "groups";
 
+    private static final String PROTOCOL = "protocol";
+    private static final String OF_10 = "OF_10";
+
     private static final String ID = "id";
     private static final String APP_ID = "app_id";
     private static final String STATE = "state";
@@ -62,10 +67,16 @@
         return ImmutableSet.of(new GroupDataRequest());
     }
 
+    private static String deviceProtocol(Device device) {
+        String protocol = device.annotations().value(PROTOCOL);
+        return protocol != null ? protocol : "";
+    }
+
     // handler for group table requests
     private final class GroupDataRequest extends TableRequestHandler {
 
         private static final String NO_ROWS_MESSAGE = "No groups found";
+        private static final String NOT_SUPPORT_MESSAGE = "Groups not supported";
 
         private GroupDataRequest() {
             super(GROUP_DATA_REQ, GROUP_DATA_RESP, GROUPS);
@@ -77,8 +88,17 @@
         }
 
         @Override
-        protected String noRowsMessage() {
-            // TODO: if devices with OF 1.0, should return not support message
+        protected String noRowsMessage(ObjectNode payload) {
+            String uri = string(payload, "devId");
+            if (!Strings.isNullOrEmpty(uri)) {
+                DeviceService ds = get(DeviceService.class);
+                Device dev = ds.getDevice(DeviceId.deviceId(uri));
+
+                // TODO: replace with a less brittle solution...
+                if (deviceProtocol(dev).equals(OF_10)) {
+                    return NOT_SUPPORT_MESSAGE;
+                }
+            }
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java
index 47137ee..72da5a0 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/HostViewMessageHandler.java
@@ -74,7 +74,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
index 7f9b5a9..34b0312 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/IntentViewMessageHandler.java
@@ -88,7 +88,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
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 9b8750e..e61fa50 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
@@ -77,7 +77,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java
index ceb643a..d3ba9c5 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/MeterViewMessageHandler.java
@@ -19,7 +19,9 @@
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
+import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.meter.Band;
 import org.onosproject.net.meter.Meter;
 import org.onosproject.net.meter.MeterService;
@@ -42,6 +44,9 @@
     private static final String METER_DATA_RESP = "meterDataResponse";
     private static final String METERS = "meters";
 
+    private static final String PROTOCOL = "protocol";
+    private static final String OF_10 = "OF_10";
+
     private static final String ID = "id";
     private static final String APP_ID = "app_id";
     private static final String STATE = "state";
@@ -58,10 +63,16 @@
         return ImmutableSet.of(new MeterDataRequest());
     }
 
+    private static String deviceProtocol(Device device) {
+        String protocol = device.annotations().value(PROTOCOL);
+        return protocol != null ? protocol : "";
+    }
+
     // handler for meter table requests
     private final class MeterDataRequest extends TableRequestHandler {
 
         private static final String NO_ROWS_MESSAGE = "No meters found";
+        private static final String NOT_SUPPORT_MESSAGE = "Meters not supported";
 
         private MeterDataRequest() {
             super(METER_DATA_REQ, METER_DATA_RESP, METERS);
@@ -73,8 +84,17 @@
         }
 
         @Override
-        protected String noRowsMessage() {
-            // TODO: if the device with OF 1.0, return not support message
+        protected String noRowsMessage(ObjectNode payload) {
+            String uri = string(payload, "devId");
+            if (!Strings.isNullOrEmpty(uri)) {
+                DeviceService ds = get(DeviceService.class);
+                Device dev = ds.getDevice(DeviceId.deviceId(uri));
+
+                // TODO: replace with a less brittle solution...
+                if (deviceProtocol(dev).equals(OF_10)) {
+                    return NOT_SUPPORT_MESSAGE;
+                }
+            }
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java
index c196642..d67251d 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/PortViewMessageHandler.java
@@ -74,7 +74,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java
index 1353538..7eaccf8 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ProcessorViewMessageHandler.java
@@ -76,7 +76,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java
index 76171c0..0d37d75 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/SettingsViewMessageHandler.java
@@ -65,7 +65,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
index 2abc321..5588ae4 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TunnelViewMessageHandler.java
@@ -67,7 +67,7 @@
         }
 
         @Override
-        protected String noRowsMessage() {
+        protected String noRowsMessage(ObjectNode payload) {
             return NO_ROWS_MESSAGE;
         }