2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
12 // specify dashlets and layouts
17 name : 'Nodes Learned'
20 id : 'staticRouteConfig',
21 name : 'Static Route Configuration'
23 subnetGatewayConfig : {
24 id : 'subnetGatewayConfig',
25 name : 'Subnet Gateway Configuration'
28 id : 'spanPortConfig',
29 name : 'SPAN Port Configuration'
33 name : 'Connection Manager'
40 one.f.dashlet.nodesLearnt
43 one.f.dashlet.staticRouteConfig,
44 one.f.dashlet.connection
50 one.f.dashlet.subnetGatewayConfig,
51 one.f.dashlet.spanPortConfig
57 one.f.switchmanager = {
58 rootUrl: "controller/web/devices",
59 createTable: function(columnNames, body) {
60 var tableAttributes = ["table-striped", "table-bordered", "table-condensed"];
61 var $table = one.lib.dashlet.table.table(tableAttributes);
62 var tableHeaders = columnNames;
63 var $thead = one.lib.dashlet.table.header(tableHeaders);
64 var $tbody = one.lib.dashlet.table.body(body, tableHeaders);
69 validateName: function(name) {
70 return (name.length < 256);
74 one.f.switchmanager.nodesLearnt = {
77 popout: "one_f_switchmanager_nodesLearnt_id_dashlet_popout",
78 datagrid: "one_f_switchmanager_nodesLearnt_id_dashlet_datagrid"
81 modal: "one_f_switchmanager_nodesLearnt_id_modal_modal",
82 configure: "one_f_switchmanager_nodesLearnt_id_modal_configure",
83 ports: "one_f_switchmanager_nodesLearnt_id_modal_ports",
84 save: "one_f_switchmanager_nodesLearnt_id_modal_save",
85 datagrid: "one_f_switchmanager_nodesLearnt_id_modal_datagrid",
86 portsDatagrid: "one_f_switchmanager_nodesLearnt_id_modal_portsDatagrid",
88 nodeId: "one_f_switchmanager_nodesLearnt_id_modal_form_nodeid",
89 nodeName : "one_f_switchmanager_nodesLearnt_id_modal_form_nodename",
90 portStatus : "one_f_switchmanager_nodesLearnt_id_modal_form_portstatus",
91 tier: "one_f_switchmanager_nodesLearnt_id_modal_form_tier",
92 operationMode: "one_f_switchmanager_nodesLearnt_id_modal_form_opmode"
96 dashlet: function($dashlet) {
97 var url = one.f.switchmanager.rootUrl + "/nodesLearnt";
98 one.lib.dashlet.empty($dashlet);
99 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.nodesLearnt.name));
101 one.f.switchmanager.nodesLearnt.ajax.main(url, function(content) {
102 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.dashlet.datagrid, {
106 flexibleRowsPerPage: true
107 }, "table-striped table-condensed");
108 $dashlet.append($gridHTML);
109 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.abridged(content);
110 $("#" + one.f.switchmanager.nodesLearnt.id.dashlet.datagrid).datagrid({dataSource: dataSource}).on("loaded", function() {
111 $(this).find("tbody a").click(one.f.switchmanager.nodesLearnt.modal.initialize.updateNode);
114 $("#" + one.f.switchmanager.nodesLearnt.id.dashlet.datagrid).datagrid({dataSource: dataSource}).on("loaded", function() {
115 $(this).find("tbody span").click(function(){
116 one.f.switchmanager.nodesLearnt.modal.initialize.displayPorts($(this));
123 main : function(url, callback) {
124 $.getJSON(url, function(data) {
130 registry : { callback:undefined },
132 updateNode: function(evt) {
133 one.f.switchmanager.nodesLearnt.ajax.main(one.f.switchmanager.rootUrl + "/tiers", function(tiers) {
135 var nodeId = decodeURIComponent(evt.target.id);
138 var $body = one.f.switchmanager.nodesLearnt.modal.body.updateNode(nodeId, JSON.parse(decodeURIComponent(evt.target.getAttribute("switchDetails"))), tiers);
139 if (evt.target.getAttribute("privilege") == 'WRITE'){
140 h3 = "Update Node Information";
141 footer = one.f.switchmanager.nodesLearnt.modal.footer.updateNode();
142 } else { //disable node edit
143 $body.find('*').attr('disabled', 'disabled');
144 h3 = 'Node Information';
147 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.configure, h3, "", footer);
149 $('#' + one.f.switchmanager.nodesLearnt.id.modal.save, $modal).click(function() {
150 one.f.switchmanager.nodesLearnt.modal.save($modal);
153 // inject body (nodePorts)
154 one.lib.modal.inject.body($modal, $body);
156 $modal.modal().on("shown",function() {
157 var callback = one.f.switchmanager.nodesLearnt.modal.registry.callback;
158 if( callback !== undefined && $.isFunction(callback)) {
165 var h3 = "Nodes Learned";
166 var footer = one.f.switchmanager.nodesLearnt.modal.footer.popout();
167 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer);
168 var $body = one.f.switchmanager.nodesLearnt.modal.body.popout($modal);
171 displayPorts: function(ports) {
172 var content = JSON.parse(decodeURIComponent(ports.attr("ports")));
174 var h3 = ((ports.attr("nodeName") == "None")? ports.attr("nodeId") : ports.attr("nodeName"))
176 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.ports, h3, "", footer);
178 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.modal.portsDatagrid, {
182 flexibleRowsPerPage: true,
184 }, "table-striped table-condensed");
185 one.lib.modal.inject.body($modal, $gridHTML);
186 $modal.on("shown", function() {
187 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.displayPorts(content);
188 $("#" + one.f.switchmanager.nodesLearnt.id.modal.portsDatagrid).datagrid({
189 dataSource: dataSource,
197 updateNode: function(nodeId, switchDetails, tiers) {
198 var $form = $(document.createElement('form'));
199 var $fieldset = $(document.createElement('fieldset'));
200 // node ID. not editable.
201 var $label = one.lib.form.label("Node ID");
202 var $input = one.lib.form.input("node id");
203 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeId);
204 $input.attr("disabled", true);
205 $input.attr("value", nodeId);
206 $fieldset.append($label).append($input);
208 var $label = one.lib.form.label("Node Name");
209 var $input = one.lib.form.input("Node Name");
210 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeName);
211 if(switchDetails["nodeName"] != null) {
212 $input.attr('value', switchDetails["nodeName"]);
214 $fieldset.append($label).append($input);
216 var $label = one.lib.form.label("Tier");
217 var $select = one.lib.form.select.create(tiers);
218 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.tier);
219 $select.val(switchDetails["tier"]);
220 $fieldset.append($label).append($select);
222 var $label = one.lib.form.label("Operation Mode");
223 var $select = one.lib.form.select.create(
224 ["Allow reactive forwarding", "Proactive forwarding only"]);
225 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.operationMode);
226 if ((one.main.registry != undefined) && (one.main.registry.container != 'default')) {
227 $select.attr("disabled", true);
229 $select.val(switchDetails["mode"]);
230 $fieldset.append($label).append($select);
231 $form.append($fieldset);
234 popout: function($modal) {
235 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.modal.datagrid, {
239 flexibleRowsPerPage: true,
241 }, "table-striped table-condensed");
242 one.lib.modal.inject.body($modal, $gridHTML);
243 // attach to shown event of modal
244 $modal.on("shown", function() {
245 var url = one.f.switchmanager.rootUrl + "/nodesLearnt";
246 one.f.switchmanager.nodesLearnt.ajax.main(url, function(content) {
247 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.popout(content);
248 $("#" + one.f.switchmanager.nodesLearnt.id.modal.datagrid).datagrid({
249 dataSource: dataSource,
252 .on("loaded", function() {
253 $("#" + one.f.switchmanager.nodesLearnt.id.modal.datagrid).find("tbody span").click(function(){
254 one.f.switchmanager.nodesLearnt.modal.initialize.displayPorts($(this));
261 save: function($modal) {
263 result['nodeName'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeName, $modal).val();
264 if(!one.f.switchmanager.validateName(result['nodeName'])) {
265 alert("Node name can contain upto 255 characters");
268 result['nodeId'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeId, $modal).val();
269 result['tier'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.tier, $modal).val();
270 result['operationMode'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.operationMode, $modal).val();
271 one.f.switchmanager.nodesLearnt.modal.ajax(result,
273 if(response.status == true) {
274 $modal.modal('hide');
275 one.topology.update(); // refresh visual topology with new name
276 // TODO: Identify dashlet by inserting a nodesLearnt div
277 // in the dashlet() instead
278 one.f.switchmanager.nodesLearnt.dashlet($("#left-top .dashlet"));
280 alert(response.message);
285 ajax: function(requestData, callback) {
286 $.getJSON(one.f.switchmanager.rootUrl + "/nodesLearnt/update", requestData, function(response) {
291 updateNode: function() {
293 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.nodesLearnt.id.modal.save, "btn-primary", "");
294 var $saveButton = one.lib.dashlet.button.button(saveButton);
295 footer.push($saveButton);
300 // TODO: Maybe put a close button in the footer?
308 abridged: function(data) {
309 var source = new StaticDataSource({
312 property: 'nodeName',
328 formatter: function(items) {
329 $.each(items, function (index, item) {
330 var nodeName = item.nodeName;
331 var nodeNameEntry = item.nodeName ? item.nodeName : "Click to update";
332 item.nodeName = '<a href="#" id="' + item.nodeId + '" switchDetails=' + encodeURIComponent(JSON.stringify(item)) +
333 ' privilege=' + data.privilege + '>' + nodeNameEntry + '</a>';
335 var ports = item.ports;
336 var portsMatch = ports.match(/<\/span>/g);
338 if (portsMatch != null) {
339 portsLength = portsMatch.length;
341 item.ports = '<span class="nodePorts" style="cursor:pointer;color: #08c" ports='+encodeURIComponent(JSON.stringify(item.ports)) + ' nodeId="' + item.nodeId
342 + '" nodeName="' + nodeName
343 + '">' + portsLength +'</span>';
351 popout: function(data) {
352 var source = new StaticDataSource({
355 property: 'nodeName',
365 property: 'tierName',
371 label: 'MAC Address',
381 formatter: function(items) {
382 $.each(items, function (index, item) {
383 var ports = item.ports;
384 var portsMatch = ports.match(/<\/span>/g);
386 if (portsMatch != null) {
387 portsLength = portsMatch.length;
389 item.ports = '<span class="nodePorts" style="cursor: pointer;color: #08c" ports='+encodeURIComponent(JSON.stringify(item.ports)) + ' nodeId="' + item.nodeId
390 + '" nodeName="' + item.nodeName
391 + '">' + portsLength +'</span>';
398 displayPorts: function(content){
401 var finish=content.indexOf("<br>",start);
403 data.push({"ports":content.substring(start,finish)});
405 finish=content.indexOf("<br>",start);
407 var source = new StaticDataSource({
422 abridged : function(data) {
424 $.each(data.nodeData, function(key, value) {
427 var nodeNameEntry = value["nodeName"] ? value["nodeName"] : "Click to update";
429 // TODO: Move anchor tag creation to one.lib.form.
431 aTag = document.createElement("a");
432 aTag.privilege = data.privilege;
433 aTag.addEventListener("click", one.f.switchmanager.nodesLearnt.modal.initialize.updateNode);
434 aTag.addEventListener("mouseover", function(evt) {
435 evt.target.style.cursor = "pointer";
437 aTag.setAttribute("id", encodeURIComponent(value["nodeId"]));
438 aTag.switchDetails = value;
439 aTag.innerHTML = nodeNameEntry;
441 entry.push(value["nodeId"]);
442 entry.push(value["ports"]);
448 popout : function(data) {
450 $.each(data.nodeData, function(key, value) {
452 // fill up all the td's
454 var nodenameentry = value["nodeName"] ? value["nodeName"] : "No name provided";
455 entry.push(nodenameentry);
456 entry.push(value["nodeId"]);
457 entry.push(value["tierName"]);
458 entry.push(value["mac"]);
459 entry.push(value["ports"]);
468 one.f.switchmanager.subnetGatewayConfig = {
471 addIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addIP",
472 addPorts: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addPorts",
473 removeIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_removeIP",
474 datagrid: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_datagrid",
475 selectAll: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_selectAll"
478 modal: "one_f_switchmanager_subnetGatewayConfig_id_modal_modal",
479 ports : "one_f_switchmanager_subnetGatewayConfig_id_modal_ports",
480 save: "one_f_switchmanager_subnetGatewayConfig_id_modal_save",
481 remove: "one_f_switchmanager_subnetGatewayConfig_id_modal_remove",
482 cancel: "one_f_switchmanager_subnetGatewayConfig_id_modal_cancel",
484 name : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayname",
485 gatewayIPAddress : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayipaddress",
486 nodeId: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_nodeid",
487 ports: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_ports"
492 dashlet: function($dashlet) {
493 one.lib.dashlet.empty($dashlet);
494 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.subnetGatewayConfig.name));
495 // Add gateway IP Address button
496 var url = one.f.switchmanager.rootUrl + "/subnets";
497 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, {}, function(content) {
499 if (content.privilege === 'WRITE') {
500 var button = one.lib.dashlet.button.single("Add Gateway IP Address",
501 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addIPAddress, "btn-primary", "btn-mini");
502 var $button = one.lib.dashlet.button.button(button);
503 $button.click(function() {
504 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.gateway();
507 $dashlet.append($button);
509 // Delete gateway ip address button
510 var button = one.lib.dashlet.button.single("Remove Gateway IP Address",
511 one.f.switchmanager.subnetGatewayConfig.id.dashlet.removeIPAddress, "btn-danger", "btn-mini");
512 var $button = one.lib.dashlet.button.button(button);
513 $button.click(function() {
514 var gatewaysToDelete = [];
515 var checkedCheckBoxes = $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find("tbody input:checked")
516 checkedCheckBoxes.each(function(index, value) {
517 gatewaysToDelete.push(checkedCheckBoxes[index].id);
519 if (checkedCheckBoxes.size() === 0) {
522 one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.dialog(gatewaysToDelete)
524 $dashlet.append($button);
527 var button = one.lib.dashlet.button.single("Add Ports",
528 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addPorts, "btn-primary", "btn-mini");
529 var $button = one.lib.dashlet.button.button(button);
530 $button.click(function() {
531 if (one.f.switchmanager.subnetGatewayConfig.registry.gateways.length === 0) {
532 alert('No Gateways Exist');
535 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.ports();
538 $dashlet.append($button);
540 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid, {
544 flexibleRowsPerPage: true
545 }, "table-striped table-condensed");
546 $dashlet.append($gridHTML);
547 var dataSource = one.f.switchmanager.subnetGatewayConfig.data.devicesgrid(content);
548 $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource})
549 .on("loaded", function() {
550 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll).click(function() {
551 $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find(':checkbox').prop('checked',
552 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll).is(':checked'));
554 $(".subnetGatewayConfig").click(function(e){
555 if (!$('.subnetGatewayConfig[type=checkbox]:not(:checked)').length) {
556 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll)
560 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll)
570 main : function(url, requestData, callback) {
571 $.getJSON(url, requestData, function(data) {
579 gateway: function() {
580 var h3 = "Add Gateway IP Address";
581 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
582 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, "", footer);
584 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
585 one.f.switchmanager.subnetGatewayConfig.modal.save.gateway($modal);
587 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.gateway();
588 one.lib.modal.inject.body($modal, $body);
592 var h3 = "Add Ports";
593 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
594 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.ports, h3, "", footer);
596 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
597 one.f.switchmanager.subnetGatewayConfig.modal.save.ports($modal);
600 // TODO: Change to subnetGateway instead.
601 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
602 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.ports(nodes, nodeports);
603 one.lib.modal.inject.body($modal, $body);
609 gateway: function($modal) {
611 result['gatewayName'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
612 if(!one.f.switchmanager.validateName(result['gatewayName'])) {
613 alert("Gateway name can contain upto 255 characters");
616 result['gatewayIPAddress'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress, $modal).val();
617 one.f.switchmanager.subnetGatewayConfig.modal.ajax.gateway(result,
619 if(response.status == true) {
620 $modal.modal('hide');
621 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
623 alert(response.message);
627 ports: function($modal) {
629 var gatewayRegistryIndex = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
630 result['portsName'] = one.f.switchmanager.subnetGatewayConfig.registry.gateways[gatewayRegistryIndex];
631 result['nodeId'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId, $modal).val();
632 result['ports'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports, $modal).val();
633 if(!result['portsName'] || result['portsName'] == "") {
634 alert("No gateway chosen. Cannot add port");
637 if(!result['nodeId'] || result['nodeId'] == "") {
638 alert("Please select a node.");
641 if(!result['ports'] || result['ports'] == "") {
642 alert("Please choose a port.");
645 one.f.switchmanager.subnetGatewayConfig.modal.ajax.ports(result,
647 if(response.status == true) {
648 $modal.modal('hide');
649 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
651 alert(response.message);
657 gateway: function() {
658 var $form = $(document.createElement('form'));
659 var $fieldset = $(document.createElement('fieldset'));
661 var $label = one.lib.form.label("Name");
662 var $input = one.lib.form.input("Name");
663 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
664 $fieldset.append($label).append($input);
666 var $label = one.lib.form.label("Gateway IP Address/Mask");
667 var $input = one.lib.form.input("Gateway IP Address/Mask");
668 var $help = one.lib.form.help('Example: 192.168.10.254/16');
669 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress);
670 $fieldset.append($label).append($input).append($help);
672 $form.append($fieldset);
675 ports: function(nodes, nodeports) {
676 var $form = $(document.createElement('form'));
677 var $fieldset = $(document.createElement('fieldset'));
678 // gateways drop down
679 var $label = one.lib.form.label("Gateway Name");
680 var $select = one.lib.form.select.create(one.f.switchmanager.subnetGatewayConfig.registry.gateways);
681 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
682 one.lib.form.select.prepend($select, { '' : 'Please Select a Gateway' });
683 $select.val($select.find("option:first").val());
684 $fieldset.append($label).append($select);
687 var $label = one.lib.form.label("Node ID");
688 var $select = one.lib.form.select.create(nodes);
689 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId);
690 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
691 $select.val($select.find("option:first").val());
692 $fieldset.append($label).append($select);
695 $select.change(function() {
696 // retrieve port value
697 var node = $(this).find('option:selected').attr('value');
698 one.f.switchmanager.subnetGatewayConfig.registry['currentNode'] = node;
699 var $ports = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
700 var ports = nodeports[node];
702 $(ports).each(function(idx, val) {
703 options[val.internalPortName] = val.portName+' ('+val.portId+')';
705 one.lib.form.select.inject($ports, options);
706 one.lib.form.select.prepend($ports, { '' : 'Please Select a Port' });
707 $ports.val($ports.find("option:first").val());
711 var $label = one.lib.form.label("Select Port");
712 var $select = one.lib.form.select.create();
713 one.lib.form.select.prepend($select, { '' : 'Please Select a Port' });
714 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
715 $fieldset.append($label).append($select);
717 $form.append($fieldset);
722 gateway: function(requestData, callback) {
723 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/add", requestData, function(data) {
727 ports: function(requestData, callback) {
728 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/ports/add", requestData, function(data) {
733 footer : function() {
735 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.subnetGatewayConfig.id.modal.save, "btn-primary", "");
736 var $saveButton = one.lib.dashlet.button.button(saveButton);
737 footer.push($saveButton);
741 dialog: function(gatewaysToDelete) {
742 var h3 = 'Remove Gateway IP Address';
744 var footer = one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.footer();
745 var $body = one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.body(gatewaysToDelete);
746 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, $body, footer);
749 $('#'+one.f.switchmanager.subnetGatewayConfig.id.modal.cancel, $modal).click(function() {
750 $modal.modal('hide');
753 // bind remove rule button
754 $('#'+one.f.switchmanager.subnetGatewayConfig.id.modal.remove, $modal).click(this, function(e) {
755 var requestData = {};
756 if (gatewaysToDelete.length > 0) {
757 requestData["gatewaysToDelete"] = gatewaysToDelete.toString();
758 var url = one.f.switchmanager.rootUrl + "/subnetGateway/delete";
759 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
760 $modal.modal('hide');
761 if (response.status == true) {
762 // refresh dashlet by passing dashlet div as param
763 one.lib.alert("Gateway IP Address(es) successfully removed");
765 alert(response.message);
767 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
773 footer : function() {
775 var remove = one.lib.dashlet.button.single('Remove Gateway IP Address',one.f.switchmanager.subnetGatewayConfig.id.modal.remove, 'btn-danger', '');
776 var $remove = one.lib.dashlet.button.button(remove);
777 footer.push($remove);
779 var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.subnetGatewayConfig.id.modal.cancel, '', '');
780 var $cancel = one.lib.dashlet.button.button(cancel);
781 footer.push($cancel);
785 body : function (gatewayList) {
786 var $p = $(document.createElement('p'));
787 var p = 'Remove the following Gateway IP Address(es)?';
788 //creata a BS label for each rule and append to list
789 $(gatewayList).each(function(){
790 var $span = $(document.createElement('span'));
792 p += '<br/>' + $span[0].outerHTML;
801 devicesgrid: function(data) {
802 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
803 var source = new StaticDataSource({
806 property: 'selector',
807 label: "<input type='checkbox' id='"
808 +one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll+"'/>",
818 label: 'Gateway IP Address/Mask',
822 property: 'nodePorts',
828 formatter: function(items) {
829 $.each(items, function(index, tableRow) {
830 tableRow["selector"] = '<input type="checkbox" class="subnetGatewayConfig" id="'
831 + tableRow["name"] + '"></input>';
832 var json = tableRow["nodePorts"];
833 var nodePorts = JSON.parse(json);
834 var nodePortHtml = "<div>";
835 $.each(nodePorts, function(index, nodePort) {
836 nodePortHtml += nodePort["nodePortName"] + " @ " + nodePort["nodeName"];
837 nodePortHtml += " ";
838 nodePortHtml += '<a href="#" id="' + encodeURIComponent(nodePort["nodePortId"]) +
839 '" gatewayName="' + tableRow["name"] +
840 '" onclick="javascript:one.f.switchmanager.subnetGatewayConfig.actions.deleteNodePort(this);">Remove</a>';
841 nodePortHtml += "<br/>";
843 nodePortHtml += "</div>";
844 tableRow["nodePorts"] = nodePortHtml;
850 // populate the registry with subnet names
851 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
852 $.each(data.nodeData, function(key, value) {
853 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
857 devices : function(data) {
859 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
860 $.each(data.nodeData, function(key, value) {
862 // fill up all the td's
863 var subnetConfigObject = $.parseJSON(value["json"]);
864 var nodePorts = subnetConfigObject.nodePorts;
865 var $nodePortsContainer = $(document.createElement("div"));
867 for(var i = 0; i < nodePorts.length; i++) {
868 var nodePort = nodePorts[i];
869 $nodePortsContainer.append(nodePort + " ");
870 // add delete anchor tag to delete ports
871 var aTag = document.createElement("a");
872 aTag.setAttribute("id", encodeURIComponent(nodePort));
873 aTag.gatewayName = value["name"];
874 aTag.addEventListener("click", function(evt) {
875 var htmlPortAnchor = evt.target;
876 var requestData = {};
877 requestData["gatewayName"] = evt.target.gatewayName;
878 requestData["nodePort"] = decodeURIComponent(evt.target.id);
879 // make ajax call to delete port
880 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
881 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
882 if(response.status == true) {
883 // refresh dashlet by passing dashlet div as param
884 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
886 alert(response.message);
891 aTag.addEventListener("mouseover", function(evt) {
892 evt.target.style.cursor = "pointer";
894 aTag.innerHTML = "Remove";
895 $nodePortsContainer.append(aTag);
896 $nodePortsContainer.append("<br/>");
899 // store gateways in the registry so that they can be used in the add ports popup
900 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
902 var checkbox = document.createElement("input");
903 checkbox.setAttribute("type", "checkbox");
904 checkbox.setAttribute("id", value["name"]);
905 entry.push(checkbox);
906 entry.push(value["name"]);
907 entry.push(value["subnet"]);
908 entry.push($nodePortsContainer);
916 deleteNodePort: function(htmlPortAnchor) {
917 var requestData = {};
918 requestData["gatewayName"] = htmlPortAnchor.getAttribute("gatewayName");
919 requestData["nodePort"] = decodeURIComponent(htmlPortAnchor.id);
920 // make ajax call to delete port
921 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
922 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
923 if(response.status == true) {
924 // refresh dashlet by passing dashlet div as param
925 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
927 alert(response.message);
934 one.f.switchmanager.staticRouteConfig = {
937 add: "one_f_switchmanager_staticRouteConfig_id_dashlet_add",
938 remove: "one_f_switchmanager_staticRouteConfig_id_dashlet_remove",
939 datagrid: "one_f_switchmanager_staticRouteConfig_id_dashlet_datagrid",
940 selectAll: "one_f_switchmanager_staticRouteConfig_id_dashlet_selectAll"
943 modal: "one_f_switchmanager_staticRouteConfig_id_modal_modal",
944 save: "one_f_switchmanager_staticRouteConfig_id_modal_save",
945 cancel: "one_f_switchmanager_staticRouteConfig_id_modal_cancel",
946 remove: "one_f_switchmanager_staticRouteConfig_id_modal_remove",
948 routeName : "one_f_switchmanager_staticRouteConfig_id_modal_form_routename",
949 staticRoute : "one_f_switchmanager_staticRouteConfig_id_modal_form_staticroute",
950 nextHop : "one_f_switchmanager_staticRouteConfig_id_modal_form_nexthop",
954 dashlet: function($dashlet) {
955 one.lib.dashlet.empty($dashlet);
956 var url = one.f.switchmanager.rootUrl + "/staticRoutes";
957 one.f.switchmanager.staticRouteConfig.ajax.main(url, {}, function(content) {
959 if (content.privilege === 'WRITE') {
960 // Add static route button
961 var button = one.lib.dashlet.button.single("Add Static Route", one.f.switchmanager.staticRouteConfig.id.dashlet.add, "btn-primary", "btn-mini");
962 var $button = one.lib.dashlet.button.button(button);
963 $button.click(function() {
964 var $modal = one.f.switchmanager.staticRouteConfig.modal.initialize();
967 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.staticRouteConfig.name));
968 $dashlet.append($button);
970 // Delete static route button
971 var button = one.lib.dashlet.button.single("Remove Static Route", one.f.switchmanager.staticRouteConfig.id.dashlet.remove, "btn-danger", "btn-mini");
972 var $button = one.lib.dashlet.button.button(button);
973 $button.click(function() {
974 var routesToDelete = [];
975 var checkedCheckBoxes = $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find("tbody input:checked");
976 checkedCheckBoxes.each(function(index, value) {
977 routesToDelete.push(checkedCheckBoxes[index].id);
979 if (checkedCheckBoxes.size() === 0) {
982 one.f.switchmanager.staticRouteConfig.modal.removeMultiple.dialog(routesToDelete);
984 $dashlet.append($button);
986 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid, {
990 flexibleRowsPerPage: true
991 }, "table-striped table-condensed");
992 $dashlet.append($gridHTML);
993 var dataSource = one.f.switchmanager.staticRouteConfig.data.staticRouteConfigGrid(content);
994 $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource})
995 .on("loaded", function() {
996 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll).click(function() {
997 $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find(':checkbox').prop('checked',
998 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll).is(':checked'));
1000 $(".staticRoute").click(function(e){
1001 if (!$('.staticRoute[type=checkbox]:not(:checked)').length) {
1002 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll)
1006 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll)
1010 e.stopPropagation();
1015 // device ajax calls
1017 main : function(url, requestData, callback) {
1018 $.getJSON(url, requestData, function(data) {
1025 initialize: function() {
1026 var h3 = "Add Static Route";
1027 var footer = one.f.switchmanager.staticRouteConfig.modal.footer();
1028 var $modal = one.lib.modal.spawn(one.f.switchmanager.staticRouteConfig.id.modal.modal, h3, "", footer);
1030 $('#' + one.f.switchmanager.staticRouteConfig.id.modal.save, $modal).click(function() {
1031 one.f.switchmanager.staticRouteConfig.modal.save($modal);
1033 var $body = one.f.switchmanager.staticRouteConfig.modal.body();
1034 one.lib.modal.inject.body($modal, $body);
1037 save: function($modal) {
1039 result['routeName'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.routeName, $modal).val();
1040 result['staticRoute'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute, $modal).val();
1041 result['nextHop'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop, $modal).val();
1042 one.f.switchmanager.staticRouteConfig.modal.ajax.staticRouteConfig(result, function(response) {
1043 if(response.status == true) {
1044 $modal.modal('hide');
1045 // refresh dashlet by passing dashlet div as param
1046 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
1048 // TODO: Show error message in a error message label instead.
1049 alert(response.message);
1054 var $form = $(document.createElement('form'));
1055 var $fieldset = $(document.createElement('fieldset'));
1056 // static route name
1057 var $label = one.lib.form.label("Name");
1058 var $input = one.lib.form.input("Name");
1059 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.routeName);
1060 $fieldset.append($label).append($input);
1061 // static route IP Mask
1062 var $label = one.lib.form.label("Static Route");
1063 var $input = one.lib.form.input("Static Route");
1064 var $help = one.lib.form.help('Example: 53.55.0.0/16');
1065 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute);
1066 $fieldset.append($label).append($input).append($help);
1067 // static route IP Mask
1068 var $label = one.lib.form.label("Next Hop");
1069 var $input = one.lib.form.input("Next Hop");
1070 var $help = one.lib.form.help('Example: 192.168.10.254');
1071 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop);
1072 $fieldset.append($label).append($input).append($help);
1074 $form.append($fieldset);
1078 staticRouteConfig: function(requestData, callback) {
1079 $.getJSON(one.f.switchmanager.rootUrl + "/staticRoute/add", requestData, function(data) {
1087 footer : function() {
1089 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.staticRouteConfig.id.modal.save, "btn-primary", "");
1090 var $saveButton = one.lib.dashlet.button.button(saveButton);
1091 footer.push($saveButton);
1095 dialog: function(routesToDelete) {
1096 var h3 = 'Remove Static Route';
1098 var footer = one.f.switchmanager.staticRouteConfig.modal.removeMultiple.footer();
1099 var $body = one.f.switchmanager.staticRouteConfig.modal.removeMultiple.body(routesToDelete);
1100 var $modal = one.lib.modal.spawn(one.f.switchmanager.staticRouteConfig.id.modal.modal, h3, $body, footer);
1102 // bind close button
1103 $('#'+one.f.switchmanager.staticRouteConfig.id.modal.cancel, $modal).click(function() {
1104 $modal.modal('hide');
1107 // bind remove rule button
1108 $('#'+one.f.switchmanager.staticRouteConfig.id.modal.remove, $modal).click(this, function(e) {
1109 if (routesToDelete.length > 0) {
1110 var requestData = {};
1111 requestData["routesToDelete"] = routesToDelete.toString();
1112 var url = one.f.switchmanager.rootUrl + "/staticRoute/delete";
1113 one.f.switchmanager.staticRouteConfig.ajax.main(url, requestData, function(response) {
1114 $modal.modal('hide');
1115 if (response.status == true) {
1116 // refresh dashlet by passing dashlet div as param
1117 one.lib.alert("Static Route(s) successfully removed");
1119 alert(response.message);
1121 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
1127 footer : function() {
1129 var remove = one.lib.dashlet.button.single('Remove Static Route',one.f.switchmanager.staticRouteConfig.id.modal.remove, 'btn-danger', '');
1130 var $remove = one.lib.dashlet.button.button(remove);
1131 footer.push($remove);
1133 var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.staticRouteConfig.id.modal.cancel, '', '');
1134 var $cancel = one.lib.dashlet.button.button(cancel);
1135 footer.push($cancel);
1139 body : function (staticRouteList) {
1140 var $p = $(document.createElement('p'));
1141 var p = 'Remove the following Static Route(s)?';
1142 //creata a BS label for each rule and append to list
1143 $(staticRouteList).each(function(){
1144 var $span = $(document.createElement('span'));
1146 p += '<br/>' + $span[0].outerHTML;
1155 staticRouteConfigGrid: function(data) {
1156 var source = new StaticDataSource({
1159 property: 'selector',
1160 label: "<input type='checkbox' id='"
1161 +one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll+"'/>",
1170 property: 'staticRoute',
1171 label: 'Static Route',
1175 property: 'nextHop',
1176 label: 'Next Hop Address',
1180 data: data.nodeData,
1181 formatter: function(items) {
1182 $.each(items, function(index, item) {
1183 item["selector"] = '<input type="checkbox" class="staticRoute" id="' + item["name"] + '"></input>';
1191 staticRouteConfig : function(data) {
1193 $.each(data.nodeData, function(key, value) {
1195 // fill up all the td's
1197 var checkbox = document.createElement("input");
1198 checkbox.setAttribute("type", "checkbox");
1199 checkbox.setAttribute("id", value["name"]);
1200 entry.push(checkbox);
1201 entry.push(value["name"]);
1202 entry.push(value["staticRoute"]);
1203 entry.push(value["nextHop"]);
1212 one.f.switchmanager.spanPortConfig = {
1215 add: "one_f_switchmanager_spanPortConfig_id_dashlet_add",
1216 remove: "one_f_switchmanager_spanPortConfig_id_dashlet_remove",
1217 datagrid: "one_f_switchmanager_spanPortConfig_id_dashlet_datagrid",
1218 selectAllFlows: "one_f_switchmanager_spanPortConfig_id_dashlet_selectAllFlows"
1221 modal: "one_f_switchmanager_spanPortConfig_id_modal_modal",
1222 save: "one_f_switchmanager_spanPortConfig_id_modal_save",
1223 cancel: "one_f_switchmanager_spanPortConfig_id_modal_cancel",
1224 remove: "one_f_switchmanager_spanPortConfig_id_modal_remove",
1226 name : "one_f_switchmanager_spanPortConfig_id_modal_form_name",
1227 nodes : "one_f_switchmanager_spanPortConfig_id_modal_form_nodes",
1228 port : "one_f_switchmanager_spanPortConfig_id_modal_form_port",
1232 dashlet: function($dashlet) {
1233 one.lib.dashlet.empty($dashlet);
1235 //populate table in dashlet
1236 var url = one.f.switchmanager.rootUrl + "/spanPorts";
1237 one.f.switchmanager.spanPortConfig.ajax.main(url, {}, function(content) {
1239 if (content.privilege === 'WRITE') {
1241 // Add span port button
1242 var button = one.lib.dashlet.button.single("Add SPAN Port", one.f.switchmanager.spanPortConfig.id.dashlet.add, "btn-primary", "btn-mini");
1243 var $button = one.lib.dashlet.button.button(button);
1245 $button.click(function() {
1246 var $modal = one.f.switchmanager.spanPortConfig.modal.initialize();
1249 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.spanPortConfig.name));
1250 $dashlet.append($button);
1252 // Delete span port button
1253 var button = one.lib.dashlet.button.single("Remove SPAN Port", one.f.switchmanager.spanPortConfig.id.dashlet.remove, "btn-danger", "btn-mini");
1254 var $button = one.lib.dashlet.button.button(button);
1255 $button.click(function() {
1256 var spanPortsToDelete = [];
1257 var checkedCheckBoxes = $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find("tbody input:checked");
1259 if (checkedCheckBoxes.size() === 0) {
1262 checkedCheckBoxes.each(function(index, value) {
1263 var spanPortObj = {};
1264 spanPortObj['spanPortJson'] = decodeURIComponent(checkedCheckBoxes[index].getAttribute("spanPort"));
1265 spanPortObj['spanPortNodeName'] = checkedCheckBoxes[index].getAttribute("spanPortNode");
1266 spanPortObj['spanPortPortName'] = checkedCheckBoxes[index].getAttribute("spanPortPort");
1268 spanPortsToDelete.push(spanPortObj);
1270 one.f.switchmanager.spanPortConfig.modal.removeMultiple.dialog(spanPortsToDelete);
1272 $dashlet.append($button);
1274 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.spanPortConfig.id.dashlet.datagrid, {
1278 flexibleRowsPerPage: true
1279 }, "table-striped table-condensed");
1280 $dashlet.append($gridHTML);
1281 var dataSource = one.f.switchmanager.spanPortConfig.data.spanPortConfigGrid(content);
1282 $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource})
1283 .on("loaded", function() {
1284 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll).click(function() {
1285 $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find(':checkbox').prop('checked',
1286 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll).is(':checked'));
1288 $(".spanPortConfig").click(function(e){
1289 if (!$('.spanPortConfig[type=checkbox]:not(:checked)').length) {
1290 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll)
1294 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll)
1298 e.stopPropagation();
1303 // device ajax calls
1305 main : function(url, requestData, callback) {
1306 $.getJSON(url, requestData, function(data) {
1313 initialize: function() {
1314 var h3 = "Add SPAN Port";
1315 var footer = one.f.switchmanager.spanPortConfig.modal.footer();
1316 var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, "", footer);
1318 $('#' + one.f.switchmanager.spanPortConfig.id.modal.save, $modal).click(function() {
1319 one.f.switchmanager.spanPortConfig.modal.save($modal);
1322 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
1323 var $body = one.f.switchmanager.spanPortConfig.modal.body(nodes, nodeports);
1324 one.lib.modal.inject.body($modal, $body);
1328 save: function($modal) {
1330 result['nodeId'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.nodes, $modal).val();
1331 result['spanPort'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.port, $modal).val();
1332 one.f.switchmanager.spanPortConfig.modal.ajax.saveSpanPortConfig(result,
1333 function(response) {
1334 if(response.status == true) {
1335 $modal.modal('hide');
1336 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1338 alert(response.message);
1343 body: function(nodes, nodeports) {
1344 var $form = $(document.createElement('form'));
1345 var $fieldset = $(document.createElement('fieldset'));
1347 var $label = one.lib.form.label("Node");
1348 var $select = one.lib.form.select.create(nodes);
1349 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
1350 $select.val($select.find("option:first").val());
1351 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.nodes);
1354 $select.change(function() {
1355 // retrieve port value
1356 var nodeId = $(this).find('option:selected').attr('value');
1357 one.f.switchmanager.spanPortConfig.registry['currentNode'] = nodeId;
1358 var $ports = $('#'+one.f.switchmanager.spanPortConfig.id.modal.form.port);
1359 var ports = one.f.switchmanager.spanPortConfig.registry['nodePorts'][nodeId]
1361 $(ports).each(function(idx, val) {
1362 options[val.internalPortName] = val.portName+' ('+val.portId+')';
1364 one.lib.form.select.inject($ports, options);
1365 one.lib.form.select.prepend($ports, {'':'Please Select a Port'});
1366 $ports.val($ports.find('option:first').val());
1369 $fieldset.append($label).append($select);
1371 var $label = one.lib.form.label("Port");
1372 var $select = one.lib.form.select.create();
1373 one.lib.form.select.prepend($select, {'':'None'});
1374 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.port);
1375 $select.val($select.find('option:first').val());
1376 $fieldset.append($label).append($select);
1379 $form.append($fieldset);
1383 nodes: function(callback) {
1384 $.getJSON(one.f.switchmanager.rootUrl + "/nodeports", function(data) {
1387 $(data).each(function(index, node) {
1388 nodes[node.nodeId] = node.nodeName;
1389 nodePorts[node.nodeId] = node.nodePorts;
1391 one.f.switchmanager.spanPortConfig.registry['nodePorts'] = nodePorts;
1392 callback(nodes, nodePorts);
1395 saveSpanPortConfig: function(requestData, callback) {
1397 resource["jsonData"] = JSON.stringify(requestData);
1398 $.getJSON(one.f.switchmanager.rootUrl + "/spanPorts/add", resource, function(data) {
1403 footer : function() {
1405 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.spanPortConfig.id.modal.save, "btn-primary", "");
1406 var $saveButton = one.lib.dashlet.button.button(saveButton);
1407 footer.push($saveButton);
1411 dialog: function(spanPortsToDelete) {
1412 var h3 = 'Remove SPAN Port';
1414 var footer = one.f.switchmanager.spanPortConfig.modal.removeMultiple.footer();
1415 var $body = one.f.switchmanager.spanPortConfig.modal.removeMultiple.body(spanPortsToDelete);
1416 var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, $body, footer);
1418 // bind close button
1419 $('#'+one.f.switchmanager.spanPortConfig.id.modal.cancel, $modal).click(function() {
1420 $modal.modal('hide');
1423 // bind remove rule button
1424 $('#'+one.f.switchmanager.spanPortConfig.id.modal.remove, $modal).click(this, function(e) {
1425 var requestData = {};
1427 $(spanPortsToDelete).each(function(index, spanPort) {
1428 spanPorts.push(JSON.parse(spanPort.spanPortJson));
1430 requestData["spanPortsToDelete"] = JSON.stringify(spanPorts);
1432 var url = one.f.switchmanager.rootUrl + "/spanPorts/delete";
1433 one.f.switchmanager.spanPortConfig.ajax.main(url, requestData, function(response) {
1434 $modal.modal('hide');
1435 if (response.status == true) {
1436 // refresh dashlet by passing dashlet div as param
1437 one.lib.alert("Span Port(s) successfully removed");
1439 alert(response.message);
1441 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1446 footer : function() {
1448 var remove = one.lib.dashlet.button.single('Remove SPAN Port',one.f.switchmanager.spanPortConfig.id.modal.remove, 'btn-danger', '');
1449 var $remove = one.lib.dashlet.button.button(remove);
1450 footer.push($remove);
1452 var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.spanPortConfig.id.modal.cancel, '', '');
1453 var $cancel = one.lib.dashlet.button.button(cancel);
1454 footer.push($cancel);
1458 body : function (spanPortToDelete) {
1459 var $p = $(document.createElement('p'));
1460 var p = 'Remove the following Span Port(s)?';
1461 //creata a BS label for each rule and append to list
1463 $(spanPortToDelete).each(function(index, spanPortItem) {
1464 var $span = $(document.createElement('span'));
1465 $span.append(this.spanPortNodeName+"-"+this.spanPortPortName);
1466 p += '<br/>' + $span[0].outerHTML;
1475 spanPortConfigGrid: function(data) {
1476 var source = new StaticDataSource({
1479 property: 'selector',
1480 label: "<input type='checkbox' id='"
1481 +one.f.switchmanager.spanPortConfig.id.dashlet.selectAll+"'/>",
1485 property: 'nodeName',
1490 property: 'spanPortName',
1495 data: data.nodeData,
1496 formatter: function(items) {
1497 $.each(items, function(index, item) {
1498 item["selector"] = '<input type="checkbox" class="spanPortConfig" spanPort=' + encodeURIComponent(item["json"]) + ' spanPortNode="' + item["nodeName"] + '" spanPortPort="' + item["spanPortName"] + '"></input>';
1505 devices : function(data) {
1507 $.each(data.nodeData, function(key, value) {
1509 // fill up all the td's
1511 var checkbox = document.createElement("input");
1512 checkbox.setAttribute("type", "checkbox");
1513 checkbox.spanPort = value.json;
1514 entry.push(checkbox);
1515 entry.push(value["nodeName"]);
1516 entry.push(value["spanPort"]);
1525 one.f.connection = {
1526 id : { // one.f.connection.id
1527 datagrid : 'one-f-connection-id-datagrid',
1528 add : 'one-f-connection-id-add'
1530 dashlet: function($dashlet) {
1531 one.lib.dashlet.empty($dashlet);
1533 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.connection.name));
1535 var add = one.lib.dashlet.button.single('Add Node', one.f.connection.id.add, 'btn-primary', 'btn-mini');
1536 var $add = one.lib.dashlet.button.button(add);
1537 $add.click(function() {
1538 one.f.connection.add.initialize();
1540 $dashlet.append($add);
1542 var url = one.f.switchmanager.rootUrl+'/connect/nodes';
1543 $.getJSON(url, function(data) {
1544 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.connection.id.datagrid, {
1548 flexibleRowsPerPage: true
1549 }, 'table-striped table-condensed table-cursor');
1550 $dashlet.append($gridHTML);
1551 var dataSource = one.f.connection.data(data);
1552 $('#'+one.f.connection.id.datagrid, $dashlet).datagrid({dataSource:dataSource})
1553 .on('loaded', function() {
1554 $(this).find('tbody tr').click(function() {
1555 var nodeId = $(this).find('.nodeId').text();
1556 var nodeType = $(this).find('.nodeType').text();
1557 var nodeName = $(this).find('.nodeName').text();
1558 one.f.connection.remove.initialize(nodeId, nodeName, nodeType);
1563 data : function(data) {
1564 var source = new StaticDataSource({
1567 property: 'nodeName',
1573 formatter: function(items) {
1574 $.each(items, function(index, item) {
1575 var $nodeId = $(document.createElement('span'));
1576 $nodeId.css('display', 'none');
1577 var $nodeType = $nodeId.clone();
1578 var $nodeName = $nodeId.clone();
1579 $nodeId.append(item.nodeId).addClass('nodeId');
1580 $nodeType.append(item.nodeType).addClass('nodeType');
1581 $nodeName.append(item.nodeName).addClass('nodeName');
1582 item.nodeName += $nodeId[0].outerHTML+$nodeType[0].outerHTML+$nodeName[0].outerHTML;
1590 id : { // one.f.connection.add.id
1591 modal : 'one-f-connection-add-id-modal',
1592 add : 'one-f-connection-add-id-add',
1593 cancel : 'one-f-connection-add-id-cancel',
1595 nodeId : 'one-f-connection-add-id-form-nodeId',
1596 ipAddress : 'one-f-connection-add-id-form-ipAddress',
1597 port : 'one-f-connection-add-id-form-port',
1598 nodeType : 'one-f-connection-add-id-form-nodeType'
1601 initialize : function() {
1602 var h3 = 'Add Node';
1603 var footer = one.f.connection.add.footer();
1604 var $body = one.f.connection.add.body();;
1605 var $modal = one.lib.modal.spawn(one.f.connection.add.id.modal, h3, $body, footer);
1607 $('#'+one.f.connection.add.id.add, $modal).click(function() {
1608 var nodeId = $('#'+one.f.connection.add.id.form.nodeId, $modal).val();
1609 if (nodeId === '') {
1610 alert('Please enter a node ID');
1614 resources.ipAddress = $('#'+one.f.connection.add.id.form.ipAddress, $modal).val();
1615 if (resources.ipAddress === '') {
1616 alert('Please enter an IP Address');
1619 resources.port = $('#'+one.f.connection.add.id.form.port, $modal).val();
1620 if (resources.port === '') {
1621 alert('Please enter a port');
1624 var nodeType = $('#'+one.f.connection.add.id.form.nodeType, $modal).val();
1625 if (nodeType !== '') {
1626 resources.nodeType = nodeType;
1628 var url = one.f.switchmanager.rootUrl+'/connect/'+encodeURI(nodeId);
1629 $.post(url, resources, function(result) {
1630 if (result.success === true) {
1631 $modal.modal('hide');
1632 one.lib.alert(result.description);
1634 alert(result.code+': '+result.description);
1638 // bind cancel button
1639 $('#'+one.f.connection.add.id.cancel, $modal).click(function() {
1640 $modal.modal('hide');
1645 var $form = $(document.createElement('form'));
1646 var $fieldset = $(document.createElement('fieldset'));
1648 var $label = one.lib.form.label('Node ID');
1649 var $input = one.lib.form.input('Node ID');
1650 $input.attr('id', one.f.connection.add.id.form.nodeId);
1651 $fieldset.append($label).append($input);
1653 $label = one.lib.form.label('IP Address');
1654 $input = one.lib.form.input('IP Address');
1655 $input.attr('id', one.f.connection.add.id.form.ipAddress);
1656 $fieldset.append($label).append($input);
1658 $label = one.lib.form.label('Port');
1659 $input = one.lib.form.input('Port');
1660 $input.attr('id', one.f.connection.add.id.form.port);
1661 var $help = one.lib.form.help('Enter a number');
1662 $fieldset.append($label).append($input).append($help);
1664 $label = one.lib.form.label('Node Type');
1665 $input = one.lib.form.input('Node Type');
1666 $input.attr('id', one.f.connection.add.id.form.nodeType);
1667 $help = one.lib.form.help('Optional');
1668 $fieldset.append($label).append($input).append($help);
1669 $form.append($fieldset);
1672 footer : function() {
1674 var add = one.lib.dashlet.button.single('Submit', one.f.connection.add.id.add, 'btn-primary', '');
1675 var $add = one.lib.dashlet.button.button(add);
1677 var cancel = one.lib.dashlet.button.single('Cancel', one.f.connection.add.id.cancel, '', '');
1678 var $cancel = one.lib.dashlet.button.button(cancel);
1679 footer.push($cancel);
1684 id : { // one.f.connection.remove.id
1685 modal : 'one-f-connection-remove-id-modal',
1686 remove : 'one-f-connection-remove-id-remove',
1687 cancel : 'one-f-connection-remove-id-cancel'
1689 initialize : function(nodeId, nodeName, nodeType) {
1690 var h3 = 'Remove Node';
1691 var footer = one.f.connection.remove.footer();
1692 var $body = one.f.connection.remove.body(nodeName);
1693 var $modal = one.lib.modal.spawn(one.f.connection.remove.id.modal, h3, $body, footer);
1694 // bind remove buton
1695 $('#'+one.f.connection.remove.id.remove, $modal).click(function() {
1697 resources.nodeType = nodeType;
1698 var url = one.f.switchmanager.rootUrl+'/disconnect/'+encodeURI(nodeId);
1699 $.post(url, resources, function(result) {
1700 if (result.success === true) {
1701 $modal.modal('hide');
1702 one.lib.alert(result.description);
1704 alert(result.code+': '+result.description);
1706 }).fail(function() { debugger; });
1708 // bind cancel button
1709 $('#'+one.f.connection.remove.id.cancel, $modal).click(function() {
1710 $modal.modal('hide');
1714 body : function(nodeName) {
1715 var $p = $(document.createElement('p'));
1716 $p.append('Remove the following node? ');
1717 var $span = $(document.createElement('span'));
1718 $span.addClass('label label-info');
1719 $span.append(nodeName);
1720 $p.append($span[0].outerHTML);
1723 footer : function() {
1725 var remove = one.lib.dashlet.button.single('Remove', one.f.connection.remove.id.remove, 'btn-danger', '');
1726 var $remove = one.lib.dashlet.button.button(remove);
1727 footer.push($remove);
1728 var cancel = one.lib.dashlet.button.single('Cancel', one.f.connection.remove.id.cancel, '', '');
1729 var $cancel = one.lib.dashlet.button.button(cancel);
1730 footer.push($cancel);
1737 // populate nav tabs
1738 $(one.f.menu.left.top).each(function(index, value) {
1739 var $nav = $(".nav", "#left-top");
1740 one.main.page.dashlet($nav, value);
1743 $(one.f.menu.left.bottom).each(function(index, value) {
1744 var $nav = $(".nav", "#left-bottom");
1745 one.main.page.dashlet($nav, value);
1748 $(one.f.menu.right.bottom).each(function(index, value) {
1749 var $nav = $(".nav", "#right-bottom");
1750 one.main.page.dashlet($nav, value);
1753 one.f.addPopOut = function() {
1754 $img1 = $(document.createElement("img"));
1755 $img1.attr("src", "/img/Expand16T.png");
1756 $img1.attr("style", "float: right;");
1757 $img1.hover(function() {
1758 $img1.css("cursor", "pointer");
1760 $img1.click(function() {
1761 var $modal = one.f.switchmanager.nodesLearnt.modal.initialize.popout();
1763 'margin-left': '-45%',
1764 'margin-top': '-3%',
1765 'width':$(document).width() * 0.8,
1766 'height':$(document).height() * 0.9
1768 $(".modal-body", $modal).css({
1769 "max-height": $(document).height() * 0.75,
1773 $dash1 = $($("#left-top .nav")[0]);
1774 $dash1.append($img1);
1779 $('.dash .nav a', '#main').click(function() {
1781 var $li = $(this).parent();
1782 var $ul = $li.parent();
1783 one.lib.nav.unfocus($ul);
1784 $li.addClass('active');
1785 // clear respective dashlet
1786 var $dashlet = $ul.parent().find('.dashlet');
1787 one.lib.dashlet.empty($dashlet);
1789 // callback based on menu
1790 var id = $(this).attr('id');
1791 var menu = one.f.dashlet;
1793 case menu.nodesLearnt.id:
1794 one.f.switchmanager.nodesLearnt.dashlet($dashlet);
1796 case menu.staticRouteConfig.id:
1797 one.f.switchmanager.staticRouteConfig.dashlet($dashlet);
1799 case menu.subnetGatewayConfig.id:
1800 one.f.switchmanager.subnetGatewayConfig.dashlet($dashlet);
1802 case menu.spanPortConfig.id:
1803 one.f.switchmanager.spanPortConfig.dashlet($dashlet);
1805 case menu.connection.id:
1806 one.f.connection.dashlet($dashlet);
1811 // activate first tab on each dashlet
1812 $('.dash .nav').each(function(index, value) {
1813 $($(value).find('li')[0]).find('a').click();