1 // Copyright (c) 2018 Maen Artimy
\r
3 // Licensed under the Apache License, Version 2.0 (the "License");
\r
4 // you may not use this file except in compliance with the License.
\r
5 // You may obtain a copy of the License at
\r
7 // http://www.apache.org/licenses/LICENSE-2.0
\r
9 // Unless required by applicable law or agreed to in writing, software
\r
10 // distributed under the License is distributed on an "AS IS" BASIS,
\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 // See the License for the specific language governing permissions and
\r
13 // limitations under the License.
\r
16 * Definition of modules.
\r
20 // Makes a GET request to the controller
\r
21 function BaseModule(command) {
\r
23 var go = myGlobalObject;
\r
25 var run = function(element) {
\r
26 go.httpGetAsync(cmd, this.callback, element);
\r
29 var callback = function(jsondata, element) {
\r
30 console.log(element);
\r
39 // Makes a POST request to the controller
\r
40 function BasePostModule(command) {
\r
42 var go = myGlobalObject;
\r
46 var dpInFilter = function (e, x) {
\r
48 e.innerHTML ="Filter: <input class=\"filterInput\" size=20><button onClick=\"mainFilterFunc(this.parentElement,"+idx+")\">Send</button>";
\r
51 var run = function(element) {
\r
52 go.httpPostAsync(cmd, this.param, this.callback, element);
\r
55 var callback = function(jsondata, element) {
\r
56 console.log(element);
\r
62 dpInFilter: dpInFilter,
\r
68 function hc(myString) {
\r
69 return myString.replace("_"," ").replace(/\b\w/g, l => l.toUpperCase())
\r
72 // Populates the Switch ID card
\r
73 var dpList = function (jsondata, element) {
\r
74 var switches = JSON.parse(jsondata);
\r
78 element.innerHTML = "";
\r
79 var ul = document.createElement("ul");
\r
80 ul.setAttribute("id", "swlist");
\r
81 for(var s in switches) {
\r
82 var num = +switches[s]; //("000000000000000" + switches[s].toString(16)).substr(-16);
\r
83 //html += num + "<br>";
\r
85 var li = document.createElement("li");
\r
87 if(switches[s] === myGlobalObject.dpid()) {
\r
88 li.classList.add("selected");
\r
91 li.addEventListener("click", clickMe);
\r
94 element.appendChild(ul);
\r
95 //element.innerHTML = html;
\r
96 if (!found && document.getElementById("swlist").firstChild) {
\r
97 var name = document.getElementById("swlist").firstChild.innerHTML
\r
98 myGlobalObject.setDPID(name)
\r
99 moduleManager.loadModules(views);
\r
103 var dpStruct = function (jsondata, element) {
\r
104 var jsonobj = JSON.parse(jsondata);
\r
105 if(!jsonobj) return;
\r
106 var switchName = Object.keys(jsonobj);
\r
107 var struct = jsonobj[switchName];
\r
109 for(var key in struct) {
\r
110 html += hc(key) + " : " + struct[key] + "<br>";
\r
112 element.innerHTML = html;
\r
115 var dpTable = function (jsondata, element) {
\r
116 var dispObj = function(obj) {
\r
119 if(Array.isArray(obj)) {
\r
120 for(var item in obj) {
\r
121 if(obj[item] instanceof Object) {
\r
124 str += obj[item].replace(":","=") + "<br>";
\r
129 var allKeys = Object.keys(obj);
\r
130 for(var key in allKeys) {
\r
131 str += allKeys[key] + " = " + obj[allKeys[key]] + "<br>";
\r
137 var jsonobj = JSON.parse(jsondata);
\r
138 if(!jsonobj) return;
\r
140 var switchName = Object.keys(jsonobj);
\r
142 // extract the flows
\r
143 var rows = jsonobj[switchName];
\r
147 for (var c in rows[0]) {
\r
150 col.sort(); // A, B, C, ...
\r
151 col.reverse(); // ..., C, B, A
\r
153 // CREATE DYNAMIC TABLE.
\r
154 var table = document.createElement("table");
\r
155 //table.classList.add("fixed_headers");
\r
157 // CREATE HTML TABLE HEADER ROW USING THE EXTRACTED HEADERS ABOVE.
\r
158 var tr = table.insertRow(-1); // TABLE ROW.
\r
159 for (var i = 0; i < col.length; i++) {
\r
160 var th = document.createElement("th"); // TABLE HEADER.
\r
161 th.innerHTML = col[i].replace("_","<br>");
\r
162 tr.appendChild(th);
\r
165 // ADD JSON DATA TO THE TABLE AS ROWS.
\r
166 for (var i = 0; i < rows.length; i++) {
\r
167 tr = table.insertRow(-1);
\r
168 for (var j = 0; j < col.length; j++) {
\r
169 var tabCell = tr.insertCell(-1);
\r
171 if(typeof rows[i][col[j]] === 'object') {
\r
172 //tabCell.innerHTML = dispObj(rows[i][col[j]]);
\r
173 tabCell.innerHTML = JSON.stringify(rows[i][col[j]]);
\r
175 tabCell.innerHTML = rows[i][col[j]];
\r
179 element.innerHTML = "";
\r
180 table.align = "center";
\r
181 element.appendChild(table);
\r
184 // Populate the cards with data
\r
185 var moduleManager = (function () {
\r
186 var time = 15000; //10 sec
\r
189 var loadModules = function(views) {
\r
190 myViews.length = 0; // it is supposed to be the best way to clear an array
\r
191 self.clearInterval();
\r
193 for (var idx in views) {
\r
194 if(views[idx].call) {
\r
195 var card = document.getElementById(views[idx].id);
\r
196 var container = card.childNodes.item(CONTAINER_IDX);
\r
199 if(views[idx].post) {
\r
200 myModule = new BasePostModule(views[idx].cmd);
\r
201 var bar = card.childNodes.item(BAR_IDX);
\r
202 myModule.dpInFilter(bar, idx);
\r
204 myModule = new BaseModule(views[idx].cmd);
\r
206 myModule.callback = views[idx].call;
\r
207 myModule.run(container);
\r
208 views[idx].module = myModule; // we need this to refresh
\r
209 views[idx].container = container; // we need this to refresh
\r
211 if(views[idx].ref) { // refresh is required
\r
212 myViews.push(views[idx]);
\r
219 var refreshModules = function() {
\r
220 for (var idx in myViews) {
\r
221 myViews[idx].module.run(myViews[idx].container);
\r
225 var interval = self.setInterval(refreshModules,time);
\r
227 var setInterval = function(newtime) {
\r
229 interval = self.setInterval(loadModules,time);
\r
232 var getInterval = function() {
\r
237 setInterval: setInterval,
\r
238 loadModules: loadModules
\r
242 function clickMe(e) {
\r
244 myGlobalObject.setDPID(e.currentTarget.innerHTML);
\r
245 moduleManager.loadModules(views);
\r
248 function mainFilterFunc(element, idx) {
\r
249 var str = element.getElementsByClassName("filterInput")[0].value;
\r
250 views[idx].module.param = str;
\r
251 views[idx].module.run(views[idx].container);
\r