Added patchset-1 for onos-5737
Added patchset-2 - addressing checkstyle error

Change-Id: Ic0135a7e4fa13d2e9e638a02ec5d4dde99ec2c97
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 ac4aeb2..18c3637 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
@@ -223,6 +223,40 @@
             return OX + flow.id();
         }
 
+        private String decorateGroupId(FlowRule flow) {
+            return OX + flow.groupId().id();
+        }
+
+        private String getCriteriaString(FlowRule flow) {
+            Set<Criterion> criteria = flow.selector().criteria();
+            StringBuilder sb = new StringBuilder();
+            for (Criterion c : criteria) {
+                sb.append(c).append(COMMA);
+            }
+            int pos = sb.lastIndexOf(COMMA);
+            sb.delete(pos, sb.length());
+
+            return sb.toString();
+        }
+
+        private String getTreatmentString(FlowRule flow) {
+            List<Instruction> instructions = flow.treatment().allInstructions();
+            StringBuilder sb = new StringBuilder();
+            for (Instruction inst : instructions) {
+                sb.append(inst).append(COMMA);
+            }
+            if (flow.treatment().metered() != null) {
+                sb.append(flow.treatment().metered().toString()).append(COMMA);
+            }
+            if (flow.treatment().tableTransition() != null) {
+                sb.append(flow.treatment().tableTransition().toString()).append(COMMA);
+            }
+            int pos = sb.lastIndexOf(COMMA);
+            sb.delete(pos, sb.length());
+
+            return sb.toString();
+        }
+
         @Override
         public void process(long sid, ObjectNode payload) {
 
@@ -232,8 +266,17 @@
             if (flow != null) {
                 ObjectNode data = objectNode();
 
+
                 data.put(FLOW_ID, decorateFlowId(flow));
                 data.put(FLOW_PRIORITY, flow.priority());
+                data.put(GROUP_ID, decorateGroupId(flow));
+                data.put(APP_ID, flow.appId());
+                data.put(TABLE_ID, flow.tableId());
+                data.put(TIMEOUT, flow.hardTimeout());
+                data.put(PERMANENT, Boolean.toString(flow.isPermanent()));
+                data.put(SELECTOR, getCriteriaString(flow));
+                data.put(TREATMENT, getTreatmentString(flow));
+
 
                 //TODO put more detail info to data
 
diff --git a/web/gui/src/main/webapp/app/view/flow/flow.js b/web/gui/src/main/webapp/app/view/flow/flow.js
index 6f862fb..c0f0346 100644
--- a/web/gui/src/main/webapp/app/view/flow/flow.js
+++ b/web/gui/src/main/webapp/app/view/flow/flow.js
@@ -30,6 +30,10 @@
         pHeight,
         top,
         topTable,
+        trmtDiv,
+        selDiv,
+        topSelTable,
+        topTrmtTable,
         bottom,
         iconDiv,
         nameDiv,
@@ -49,10 +53,12 @@
         detailsResp = 'flowDetailsResponse',
 
         propOrder = [
-            'flowId', 'priority'
+            'flowId', 'priority', 'groupId', 'appId', 'tableId',
+            'timeout', 'permanent'
         ],
         friendlyProps = [
-            'Flow ID', 'Flow Priority'
+            'Flow ID', 'Flow Priority', 'Group ID', 'Application ID',
+            'Table ID', 'Timeout', 'Permanent'
         ];
 
     function closePanel() {
@@ -78,8 +84,9 @@
         detailsPanel.empty();
 
         container = detailsPanel.append('div').classed('container', true);
-
         top = container.append('div').classed('top', true);
+        trmtDiv = container.append('div').classed('top', true);
+        selDiv = container.append('div').classed('top', true);
         closeBtn = top.append('div').classed('close-btn', true);
         addCloseBtn(closeBtn);
         iconDiv = top.append('div').classed('dev-icon', true);
@@ -87,6 +94,14 @@
         topTable = top.append('div').classed('top-content', true)
             .append('table');
         top.append('hr');
+        trmtDiv.append('h2').html('Treatment');
+        topTrmtTable = trmtDiv.append('div').classed('top-content', true)
+            .append('table');
+        trmtDiv.append('hr');
+        selDiv.append('h2').html('Selector');
+        topSelTable = selDiv.append('div').classed('top-content', true)
+            .append('table');
+
 
         //ToDo add more details
     }
@@ -101,15 +116,44 @@
         addCell('value', value);
     }
 
+    function populateTable(tbody, label, value) {
+        var tr = tbody.append('tr');
+
+        function addCell(cls, txt) {
+            tr.append('td').attr('class', cls).html(txt);
+        }
+        addCell('label', label + ' :');
+        addCell('value', value);
+    }
+
     function populateTop(details) {
         is.loadEmbeddedIcon(iconDiv, 'flowTable', 40);
         top.select('h2').html(details.flowId);
 
         var tbody = topTable.append('tbody');
 
+        var topSelTablebody = topSelTable.append('tbody');
+        var selectorString = details['selector'];
+        var selectors = selectorString.split(',');
+
+        var topTrmtTablebody = topTrmtTable.append('tbody');
+        var treatmentString = details['treatment'];
+        var treatment = treatmentString.split(',');
+
         propOrder.forEach(function (prop, i) {
             addProp(tbody, i, details[prop]);
         });
+
+        selectors.forEach(function (sel) {
+            var selArray = sel.split(':');
+            populateTable(topSelTablebody, selArray[0], selArray[1]);
+        });
+
+        treatment.forEach(function (sel) {
+            var selArray = sel.split(':');
+            populateTable(topTrmtTable, selArray[0], selArray[1]);
+        });
+
     }
 
     function createDetailsPane() {