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) {
131 updateNode: function(evt) {
132 one.f.switchmanager.nodesLearnt.ajax.main(one.f.switchmanager.rootUrl + "/tiers", function(tiers) {
134 var nodeId = decodeURIComponent(evt.target.id);
137 var $body = one.f.switchmanager.nodesLearnt.modal.body.updateNode(nodeId, JSON.parse(decodeURIComponent(evt.target.getAttribute("switchDetails"))), tiers);
138 if (evt.target.getAttribute("privilege") == 'WRITE'){
139 h3 = "Update Node Information";
140 footer = one.f.switchmanager.nodesLearnt.modal.footer.updateNode();
141 } else { //disable node edit
142 $body.find('*').attr('disabled', 'disabled');
143 h3 = 'Node Information';
146 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.configure, h3, "", footer);
148 $('#' + one.f.switchmanager.nodesLearnt.id.modal.save, $modal).click(function() {
149 one.f.switchmanager.nodesLearnt.modal.save($modal);
152 // inject body (nodePorts)
153 one.lib.modal.inject.body($modal, $body);
158 var h3 = "Nodes Learned";
159 var footer = one.f.switchmanager.nodesLearnt.modal.footer.popout();
160 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer);
161 var $body = one.f.switchmanager.nodesLearnt.modal.body.popout($modal);
164 displayPorts: function(ports) {
165 var content = JSON.parse(decodeURIComponent(ports.attr("ports")));
167 var h3 = ((ports.attr("nodeName") == "None")? ports.attr("nodeId") : ports.attr("nodeName"))
169 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.ports, h3, "", footer);
171 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.modal.portsDatagrid, {
175 flexibleRowsPerPage: true,
177 }, "table-striped table-condensed");
178 one.lib.modal.inject.body($modal, $gridHTML);
179 $modal.on("shown", function() {
180 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.displayPorts(content);
181 $("#" + one.f.switchmanager.nodesLearnt.id.modal.portsDatagrid).datagrid({
182 dataSource: dataSource,
190 updateNode: function(nodeId, switchDetails, tiers) {
191 var $form = $(document.createElement('form'));
192 var $fieldset = $(document.createElement('fieldset'));
193 // node ID. not editable.
194 var $label = one.lib.form.label("Node ID");
195 var $input = one.lib.form.input("node id");
196 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeId);
197 $input.attr("disabled", true);
198 $input.attr("value", nodeId);
199 $fieldset.append($label).append($input);
201 var $label = one.lib.form.label("Node Name");
202 var $input = one.lib.form.input("Node Name");
203 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeName);
204 if(switchDetails["nodeName"] != null) {
205 $input.attr('value', switchDetails["nodeName"]);
207 $fieldset.append($label).append($input);
209 var $label = one.lib.form.label("Tier");
210 var $select = one.lib.form.select.create(tiers);
211 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.tier);
212 $select.val(switchDetails["tier"]);
213 $fieldset.append($label).append($select);
215 var $label = one.lib.form.label("Operation Mode");
216 var $select = one.lib.form.select.create(
217 ["Allow reactive forwarding", "Proactive forwarding only"]);
218 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.operationMode);
219 if ((one.main.registry != undefined) && (one.main.registry.container != 'default')) {
220 $select.attr("disabled", true);
222 $select.val(switchDetails["mode"]);
223 $fieldset.append($label).append($select);
224 $form.append($fieldset);
227 popout: function($modal) {
228 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.modal.datagrid, {
232 flexibleRowsPerPage: true,
234 }, "table-striped table-condensed");
235 one.lib.modal.inject.body($modal, $gridHTML);
236 // attach to shown event of modal
237 $modal.on("shown", function() {
238 var url = one.f.switchmanager.rootUrl + "/nodesLearnt";
239 one.f.switchmanager.nodesLearnt.ajax.main(url, function(content) {
240 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.popout(content);
241 $("#" + one.f.switchmanager.nodesLearnt.id.modal.datagrid).datagrid({
242 dataSource: dataSource,
245 .on("loaded", function() {
246 $("#" + one.f.switchmanager.nodesLearnt.id.modal.datagrid).find("tbody span").click(function(){
247 one.f.switchmanager.nodesLearnt.modal.initialize.displayPorts($(this));
254 save: function($modal) {
256 result['nodeName'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeName, $modal).val();
257 if(!one.f.switchmanager.validateName(result['nodeName'])) {
258 alert("Node name can contain upto 255 characters");
261 result['nodeId'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeId, $modal).val();
262 result['tier'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.tier, $modal).val();
263 result['operationMode'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.operationMode, $modal).val();
264 one.f.switchmanager.nodesLearnt.modal.ajax(result,
266 if(response.status == true) {
267 $modal.modal('hide');
268 one.topology.update(); // refresh visual topology with new name
269 // TODO: Identify dashlet by inserting a nodesLearnt div
270 // in the dashlet() instead
271 one.f.switchmanager.nodesLearnt.dashlet($("#left-top .dashlet"));
273 alert(response.message);
278 ajax: function(requestData, callback) {
279 $.getJSON(one.f.switchmanager.rootUrl + "/nodesLearnt/update", requestData, function(response) {
284 updateNode: function() {
286 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.nodesLearnt.id.modal.save, "btn-primary", "");
287 var $saveButton = one.lib.dashlet.button.button(saveButton);
288 footer.push($saveButton);
293 // TODO: Maybe put a close button in the footer?
301 abridged: function(data) {
302 var source = new StaticDataSource({
305 property: 'nodeName',
321 formatter: function(items) {
322 $.each(items, function (index, item) {
323 var nodeName = item.nodeName;
324 var nodeNameEntry = item.nodeName ? item.nodeName : "Click to update";
325 item.nodeName = '<a href="#" id="' + item.nodeId + '" switchDetails=' + encodeURIComponent(JSON.stringify(item)) +
326 ' privilege=' + data.privilege + '>' + nodeNameEntry + '</a>';
328 var ports = item.ports;
329 var portsMatch = ports.match(/<\/span>/g);
331 if (portsMatch != null) {
332 portsLength = portsMatch.length;
334 item.ports = '<span class="nodePorts" style="cursor:pointer;color: #08c" ports='+encodeURIComponent(JSON.stringify(item.ports)) + ' nodeId="' + item.nodeId
335 + '" nodeName="' + nodeName
336 + '">' + portsLength +'</span>';
344 popout: function(data) {
345 var source = new StaticDataSource({
348 property: 'nodeName',
358 property: 'tierName',
364 label: 'MAC Address',
374 formatter: function(items) {
375 $.each(items, function (index, item) {
376 var ports = item.ports;
377 var portsMatch = ports.match(/<\/span>/g);
379 if (portsMatch != null) {
380 portsLength = portsMatch.length;
382 item.ports = '<span class="nodePorts" style="cursor: pointer;color: #08c" ports='+encodeURIComponent(JSON.stringify(item.ports)) + ' nodeId="' + item.nodeId
383 + '" nodeName="' + item.nodeName
384 + '">' + portsLength +'</span>';
391 displayPorts: function(content){
394 var finish=content.indexOf("<br>",start);
396 data.push({"ports":content.substring(start,finish)});
398 finish=content.indexOf("<br>",start);
400 var source = new StaticDataSource({
415 abridged : function(data) {
417 $.each(data.nodeData, function(key, value) {
420 var nodeNameEntry = value["nodeName"] ? value["nodeName"] : "Click to update";
422 // TODO: Move anchor tag creation to one.lib.form.
424 aTag = document.createElement("a");
425 aTag.privilege = data.privilege;
426 aTag.addEventListener("click", one.f.switchmanager.nodesLearnt.modal.initialize.updateNode);
427 aTag.addEventListener("mouseover", function(evt) {
428 evt.target.style.cursor = "pointer";
430 aTag.setAttribute("id", encodeURIComponent(value["nodeId"]));
431 aTag.switchDetails = value;
432 aTag.innerHTML = nodeNameEntry;
434 entry.push(value["nodeId"]);
435 entry.push(value["ports"]);
441 popout : function(data) {
443 $.each(data.nodeData, function(key, value) {
445 // fill up all the td's
447 var nodenameentry = value["nodeName"] ? value["nodeName"] : "No name provided";
448 entry.push(nodenameentry);
449 entry.push(value["nodeId"]);
450 entry.push(value["tierName"]);
451 entry.push(value["mac"]);
452 entry.push(value["ports"]);
461 one.f.switchmanager.subnetGatewayConfig = {
464 addIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addIP",
465 addPorts: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addPorts",
466 removeIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_removeIP",
467 datagrid: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_datagrid",
468 selectAll: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_selectAll"
471 modal: "one_f_switchmanager_subnetGatewayConfig_id_modal_modal",
472 ports : "one_f_switchmanager_subnetGatewayConfig_id_modal_ports",
473 save: "one_f_switchmanager_subnetGatewayConfig_id_modal_save",
474 remove: "one_f_switchmanager_subnetGatewayConfig_id_modal_remove",
475 cancel: "one_f_switchmanager_subnetGatewayConfig_id_modal_cancel",
477 name : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayname",
478 gatewayIPAddress : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayipaddress",
479 nodeId: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_nodeid",
480 ports: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_ports"
485 dashlet: function($dashlet) {
486 one.lib.dashlet.empty($dashlet);
487 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.subnetGatewayConfig.name));
488 // Add gateway IP Address button
489 var url = one.f.switchmanager.rootUrl + "/subnets";
490 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, {}, function(content) {
492 if (content.privilege === 'WRITE') {
493 var button = one.lib.dashlet.button.single("Add Gateway IP Address",
494 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addIPAddress, "btn-primary", "btn-mini");
495 var $button = one.lib.dashlet.button.button(button);
496 $button.click(function() {
497 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.gateway();
500 $dashlet.append($button);
502 // Delete gateway ip address button
503 var button = one.lib.dashlet.button.single("Remove Gateway IP Address",
504 one.f.switchmanager.subnetGatewayConfig.id.dashlet.removeIPAddress, "btn-danger", "btn-mini");
505 var $button = one.lib.dashlet.button.button(button);
506 $button.click(function() {
507 var gatewaysToDelete = [];
508 var checkedCheckBoxes = $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find("tbody input:checked")
509 checkedCheckBoxes.each(function(index, value) {
510 gatewaysToDelete.push(checkedCheckBoxes[index].id);
512 if (checkedCheckBoxes.size() === 0) {
515 one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.dialog(gatewaysToDelete)
517 $dashlet.append($button);
520 var button = one.lib.dashlet.button.single("Add Ports",
521 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addPorts, "btn-primary", "btn-mini");
522 var $button = one.lib.dashlet.button.button(button);
523 $button.click(function() {
524 if (one.f.switchmanager.subnetGatewayConfig.registry.gateways.length === 0) {
525 alert('No Gateways Exist');
528 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.ports();
531 $dashlet.append($button);
533 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid, {
537 flexibleRowsPerPage: true
538 }, "table-striped table-condensed");
539 $dashlet.append($gridHTML);
540 var dataSource = one.f.switchmanager.subnetGatewayConfig.data.devicesgrid(content);
541 $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource})
542 .on("loaded", function() {
543 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll).click(function() {
544 $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find(':checkbox').prop('checked',
545 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll).is(':checked'));
547 $(".subnetGatewayConfig").click(function(e){
548 if (!$('.subnetGatewayConfig[type=checkbox]:not(:checked)').length) {
549 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll)
553 $("#"+one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll)
563 main : function(url, requestData, callback) {
564 $.getJSON(url, requestData, function(data) {
572 gateway: function() {
573 var h3 = "Add Gateway IP Address";
574 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
575 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, "", footer);
577 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
578 one.f.switchmanager.subnetGatewayConfig.modal.save.gateway($modal);
580 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.gateway();
581 one.lib.modal.inject.body($modal, $body);
585 var h3 = "Add Ports";
586 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
587 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.ports, h3, "", footer);
589 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
590 one.f.switchmanager.subnetGatewayConfig.modal.save.ports($modal);
593 // TODO: Change to subnetGateway instead.
594 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
595 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.ports(nodes, nodeports);
596 one.lib.modal.inject.body($modal, $body);
602 gateway: function($modal) {
604 result['gatewayName'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
605 if(!one.f.switchmanager.validateName(result['gatewayName'])) {
606 alert("Gateway name can contain upto 255 characters");
609 result['gatewayIPAddress'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress, $modal).val();
610 one.f.switchmanager.subnetGatewayConfig.modal.ajax.gateway(result,
612 if(response.status == true) {
613 $modal.modal('hide');
614 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
616 alert(response.message);
620 ports: function($modal) {
622 var gatewayRegistryIndex = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
623 result['portsName'] = one.f.switchmanager.subnetGatewayConfig.registry.gateways[gatewayRegistryIndex];
624 result['nodeId'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId, $modal).val();
625 result['ports'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports, $modal).val();
626 if(!result['portsName'] || result['portsName'] == "") {
627 alert("No gateway chosen. Cannot add port");
630 if(!result['nodeId'] || result['nodeId'] == "") {
631 alert("Please select a node.");
634 if(!result['ports'] || result['ports'] == "") {
635 alert("Please choose a port.");
638 one.f.switchmanager.subnetGatewayConfig.modal.ajax.ports(result,
640 if(response.status == true) {
641 $modal.modal('hide');
642 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
644 alert(response.message);
650 gateway: function() {
651 var $form = $(document.createElement('form'));
652 var $fieldset = $(document.createElement('fieldset'));
654 var $label = one.lib.form.label("Name");
655 var $input = one.lib.form.input("Name");
656 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
657 $fieldset.append($label).append($input);
659 var $label = one.lib.form.label("Gateway IP Address/Mask");
660 var $input = one.lib.form.input("Gateway IP Address/Mask");
661 var $help = one.lib.form.help('Example: 192.168.10.254/16');
662 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress);
663 $fieldset.append($label).append($input).append($help);
665 $form.append($fieldset);
668 ports: function(nodes, nodeports) {
669 var $form = $(document.createElement('form'));
670 var $fieldset = $(document.createElement('fieldset'));
671 // gateways drop down
672 var $label = one.lib.form.label("Gateway Name");
673 var $select = one.lib.form.select.create(one.f.switchmanager.subnetGatewayConfig.registry.gateways);
674 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
675 one.lib.form.select.prepend($select, { '' : 'Please Select a Gateway' });
676 $select.val($select.find("option:first").val());
677 $fieldset.append($label).append($select);
680 var $label = one.lib.form.label("Node ID");
681 var $select = one.lib.form.select.create(nodes);
682 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId);
683 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
684 $select.val($select.find("option:first").val());
685 $fieldset.append($label).append($select);
688 $select.change(function() {
689 // retrieve port value
690 var node = $(this).find('option:selected').attr('value');
691 one.f.switchmanager.subnetGatewayConfig.registry['currentNode'] = node;
692 var $ports = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
693 var ports = nodeports[node];
695 $(ports).each(function(idx, val) {
696 options[val.internalPortName] = val.portName+' ('+val.portId+')';
698 one.lib.form.select.inject($ports, options);
699 one.lib.form.select.prepend($ports, { '' : 'Please Select a Port' });
700 $ports.val($ports.find("option:first").val());
704 var $label = one.lib.form.label("Select Port");
705 var $select = one.lib.form.select.create();
706 one.lib.form.select.prepend($select, { '' : 'Please Select a Port' });
707 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
708 $fieldset.append($label).append($select);
710 $form.append($fieldset);
715 gateway: function(requestData, callback) {
716 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/add", requestData, function(data) {
720 ports: function(requestData, callback) {
721 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/ports/add", requestData, function(data) {
726 footer : function() {
728 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.subnetGatewayConfig.id.modal.save, "btn-primary", "");
729 var $saveButton = one.lib.dashlet.button.button(saveButton);
730 footer.push($saveButton);
734 dialog: function(gatewaysToDelete) {
735 var h3 = 'Remove Gateway IP Address';
737 var footer = one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.footer();
738 var $body = one.f.switchmanager.subnetGatewayConfig.modal.removeMultiple.body(gatewaysToDelete);
739 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, $body, footer);
742 $('#'+one.f.switchmanager.subnetGatewayConfig.id.modal.cancel, $modal).click(function() {
743 $modal.modal('hide');
746 // bind remove rule button
747 $('#'+one.f.switchmanager.subnetGatewayConfig.id.modal.remove, $modal).click(this, function(e) {
748 var requestData = {};
749 if (gatewaysToDelete.length > 0) {
750 requestData["gatewaysToDelete"] = gatewaysToDelete.toString();
751 var url = one.f.switchmanager.rootUrl + "/subnetGateway/delete";
752 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
753 $modal.modal('hide');
754 if (response.status == true) {
755 // refresh dashlet by passing dashlet div as param
756 one.lib.alert("Gateway IP Address(es) successfully removed");
758 alert(response.message);
760 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
766 footer : function() {
768 var remove = one.lib.dashlet.button.single('Remove Gateway IP Address',one.f.switchmanager.subnetGatewayConfig.id.modal.remove, 'btn-danger', '');
769 var $remove = one.lib.dashlet.button.button(remove);
770 footer.push($remove);
772 var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.subnetGatewayConfig.id.modal.cancel, '', '');
773 var $cancel = one.lib.dashlet.button.button(cancel);
774 footer.push($cancel);
778 body : function (gatewayList) {
779 var $p = $(document.createElement('p'));
780 var p = 'Remove the following Gateway IP Address(es)?';
781 //creata a BS label for each rule and append to list
782 $(gatewayList).each(function(){
783 var $span = $(document.createElement('span'));
785 p += '<br/>' + $span[0].outerHTML;
794 devicesgrid: function(data) {
795 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
796 var source = new StaticDataSource({
799 property: 'selector',
800 label: "<input type='checkbox' id='"
801 +one.f.switchmanager.subnetGatewayConfig.id.dashlet.selectAll+"'/>",
811 label: 'Gateway IP Address/Mask',
815 property: 'nodePorts',
821 formatter: function(items) {
822 $.each(items, function(index, tableRow) {
823 tableRow["selector"] = '<input type="checkbox" class="subnetGatewayConfig" id="'
824 + tableRow["name"] + '"></input>';
825 var json = tableRow["nodePorts"];
826 var nodePorts = JSON.parse(json);
827 var nodePortHtml = "<div>";
828 $.each(nodePorts, function(index, nodePort) {
829 nodePortHtml += nodePort["nodePortName"] + " @ " + nodePort["nodeName"];
830 nodePortHtml += " ";
831 nodePortHtml += '<a href="#" id="' + encodeURIComponent(nodePort["nodePortId"]) +
832 '" gatewayName="' + tableRow["name"] +
833 '" onclick="javascript:one.f.switchmanager.subnetGatewayConfig.actions.deleteNodePort(this);">Remove</a>';
834 nodePortHtml += "<br/>";
836 nodePortHtml += "</div>";
837 tableRow["nodePorts"] = nodePortHtml;
843 // populate the registry with subnet names
844 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
845 $.each(data.nodeData, function(key, value) {
846 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
850 devices : function(data) {
852 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
853 $.each(data.nodeData, function(key, value) {
855 // fill up all the td's
856 var subnetConfigObject = $.parseJSON(value["json"]);
857 var nodePorts = subnetConfigObject.nodePorts;
858 var $nodePortsContainer = $(document.createElement("div"));
860 for(var i = 0; i < nodePorts.length; i++) {
861 var nodePort = nodePorts[i];
862 $nodePortsContainer.append(nodePort + " ");
863 // add delete anchor tag to delete ports
864 var aTag = document.createElement("a");
865 aTag.setAttribute("id", encodeURIComponent(nodePort));
866 aTag.gatewayName = value["name"];
867 aTag.addEventListener("click", function(evt) {
868 var htmlPortAnchor = evt.target;
869 var requestData = {};
870 requestData["gatewayName"] = evt.target.gatewayName;
871 requestData["nodePort"] = decodeURIComponent(evt.target.id);
872 // make ajax call to delete port
873 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
874 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
875 if(response.status == true) {
876 // refresh dashlet by passing dashlet div as param
877 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
879 alert(response.message);
884 aTag.addEventListener("mouseover", function(evt) {
885 evt.target.style.cursor = "pointer";
887 aTag.innerHTML = "Remove";
888 $nodePortsContainer.append(aTag);
889 $nodePortsContainer.append("<br/>");
892 // store gateways in the registry so that they can be used in the add ports popup
893 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
895 var checkbox = document.createElement("input");
896 checkbox.setAttribute("type", "checkbox");
897 checkbox.setAttribute("id", value["name"]);
898 entry.push(checkbox);
899 entry.push(value["name"]);
900 entry.push(value["subnet"]);
901 entry.push($nodePortsContainer);
909 deleteNodePort: function(htmlPortAnchor) {
910 var requestData = {};
911 requestData["gatewayName"] = htmlPortAnchor.getAttribute("gatewayName");
912 requestData["nodePort"] = decodeURIComponent(htmlPortAnchor.id);
913 // make ajax call to delete port
914 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
915 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
916 if(response.status == true) {
917 // refresh dashlet by passing dashlet div as param
918 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
920 alert(response.message);
927 one.f.switchmanager.staticRouteConfig = {
930 add: "one_f_switchmanager_staticRouteConfig_id_dashlet_add",
931 remove: "one_f_switchmanager_staticRouteConfig_id_dashlet_remove",
932 datagrid: "one_f_switchmanager_staticRouteConfig_id_dashlet_datagrid",
933 selectAll: "one_f_switchmanager_staticRouteConfig_id_dashlet_selectAll"
936 modal: "one_f_switchmanager_staticRouteConfig_id_modal_modal",
937 save: "one_f_switchmanager_staticRouteConfig_id_modal_save",
938 cancel: "one_f_switchmanager_staticRouteConfig_id_modal_cancel",
939 remove: "one_f_switchmanager_staticRouteConfig_id_modal_remove",
941 routeName : "one_f_switchmanager_staticRouteConfig_id_modal_form_routename",
942 staticRoute : "one_f_switchmanager_staticRouteConfig_id_modal_form_staticroute",
943 nextHop : "one_f_switchmanager_staticRouteConfig_id_modal_form_nexthop",
947 dashlet: function($dashlet) {
948 one.lib.dashlet.empty($dashlet);
949 var url = one.f.switchmanager.rootUrl + "/staticRoutes";
950 one.f.switchmanager.staticRouteConfig.ajax.main(url, {}, function(content) {
952 if (content.privilege === 'WRITE') {
953 // Add static route button
954 var button = one.lib.dashlet.button.single("Add Static Route", one.f.switchmanager.staticRouteConfig.id.dashlet.add, "btn-primary", "btn-mini");
955 var $button = one.lib.dashlet.button.button(button);
956 $button.click(function() {
957 var $modal = one.f.switchmanager.staticRouteConfig.modal.initialize();
960 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.staticRouteConfig.name));
961 $dashlet.append($button);
963 // Delete static route button
964 var button = one.lib.dashlet.button.single("Remove Static Route", one.f.switchmanager.staticRouteConfig.id.dashlet.remove, "btn-danger", "btn-mini");
965 var $button = one.lib.dashlet.button.button(button);
966 $button.click(function() {
967 var routesToDelete = [];
968 var checkedCheckBoxes = $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find("tbody input:checked");
969 checkedCheckBoxes.each(function(index, value) {
970 routesToDelete.push(checkedCheckBoxes[index].id);
972 if (checkedCheckBoxes.size() === 0) {
975 one.f.switchmanager.staticRouteConfig.modal.removeMultiple.dialog(routesToDelete);
977 $dashlet.append($button);
979 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid, {
983 flexibleRowsPerPage: true
984 }, "table-striped table-condensed");
985 $dashlet.append($gridHTML);
986 var dataSource = one.f.switchmanager.staticRouteConfig.data.staticRouteConfigGrid(content);
987 $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource})
988 .on("loaded", function() {
989 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll).click(function() {
990 $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find(':checkbox').prop('checked',
991 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll).is(':checked'));
993 $(".staticRoute").click(function(e){
994 if (!$('.staticRoute[type=checkbox]:not(:checked)').length) {
995 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll)
999 $("#"+one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll)
1003 e.stopPropagation();
1008 // device ajax calls
1010 main : function(url, requestData, callback) {
1011 $.getJSON(url, requestData, function(data) {
1018 initialize: function() {
1019 var h3 = "Add Static Route";
1020 var footer = one.f.switchmanager.staticRouteConfig.modal.footer();
1021 var $modal = one.lib.modal.spawn(one.f.switchmanager.staticRouteConfig.id.modal.modal, h3, "", footer);
1023 $('#' + one.f.switchmanager.staticRouteConfig.id.modal.save, $modal).click(function() {
1024 one.f.switchmanager.staticRouteConfig.modal.save($modal);
1026 var $body = one.f.switchmanager.staticRouteConfig.modal.body();
1027 one.lib.modal.inject.body($modal, $body);
1030 save: function($modal) {
1032 result['routeName'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.routeName, $modal).val();
1033 result['staticRoute'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute, $modal).val();
1034 result['nextHop'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop, $modal).val();
1035 one.f.switchmanager.staticRouteConfig.modal.ajax.staticRouteConfig(result, function(response) {
1036 if(response.status == true) {
1037 $modal.modal('hide');
1038 // refresh dashlet by passing dashlet div as param
1039 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
1041 // TODO: Show error message in a error message label instead.
1042 alert(response.message);
1047 var $form = $(document.createElement('form'));
1048 var $fieldset = $(document.createElement('fieldset'));
1049 // static route name
1050 var $label = one.lib.form.label("Name");
1051 var $input = one.lib.form.input("Name");
1052 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.routeName);
1053 $fieldset.append($label).append($input);
1054 // static route IP Mask
1055 var $label = one.lib.form.label("Static Route");
1056 var $input = one.lib.form.input("Static Route");
1057 var $help = one.lib.form.help('Example: 53.55.0.0/16');
1058 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute);
1059 $fieldset.append($label).append($input).append($help);
1060 // static route IP Mask
1061 var $label = one.lib.form.label("Next Hop");
1062 var $input = one.lib.form.input("Next Hop");
1063 var $help = one.lib.form.help('Example: 192.168.10.254');
1064 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop);
1065 $fieldset.append($label).append($input).append($help);
1067 $form.append($fieldset);
1071 staticRouteConfig: function(requestData, callback) {
1072 $.getJSON(one.f.switchmanager.rootUrl + "/staticRoute/add", requestData, function(data) {
1080 footer : function() {
1082 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.staticRouteConfig.id.modal.save, "btn-primary", "");
1083 var $saveButton = one.lib.dashlet.button.button(saveButton);
1084 footer.push($saveButton);
1088 dialog: function(routesToDelete) {
1089 var h3 = 'Remove Static Route';
1091 var footer = one.f.switchmanager.staticRouteConfig.modal.removeMultiple.footer();
1092 var $body = one.f.switchmanager.staticRouteConfig.modal.removeMultiple.body(routesToDelete);
1093 var $modal = one.lib.modal.spawn(one.f.switchmanager.staticRouteConfig.id.modal.modal, h3, $body, footer);
1095 // bind close button
1096 $('#'+one.f.switchmanager.staticRouteConfig.id.modal.cancel, $modal).click(function() {
1097 $modal.modal('hide');
1100 // bind remove rule button
1101 $('#'+one.f.switchmanager.staticRouteConfig.id.modal.remove, $modal).click(this, function(e) {
1102 if (routesToDelete.length > 0) {
1103 var requestData = {};
1104 requestData["routesToDelete"] = routesToDelete.toString();
1105 var url = one.f.switchmanager.rootUrl + "/staticRoute/delete";
1106 one.f.switchmanager.staticRouteConfig.ajax.main(url, requestData, function(response) {
1107 $modal.modal('hide');
1108 if (response.status == true) {
1109 // refresh dashlet by passing dashlet div as param
1110 one.lib.alert("Static Route(s) successfully removed");
1112 alert(response.message);
1114 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
1120 footer : function() {
1122 var remove = one.lib.dashlet.button.single('Remove Static Route',one.f.switchmanager.staticRouteConfig.id.modal.remove, 'btn-danger', '');
1123 var $remove = one.lib.dashlet.button.button(remove);
1124 footer.push($remove);
1126 var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.staticRouteConfig.id.modal.cancel, '', '');
1127 var $cancel = one.lib.dashlet.button.button(cancel);
1128 footer.push($cancel);
1132 body : function (staticRouteList) {
1133 var $p = $(document.createElement('p'));
1134 var p = 'Remove the following Static Route(s)?';
1135 //creata a BS label for each rule and append to list
1136 $(staticRouteList).each(function(){
1137 var $span = $(document.createElement('span'));
1139 p += '<br/>' + $span[0].outerHTML;
1148 staticRouteConfigGrid: function(data) {
1149 var source = new StaticDataSource({
1152 property: 'selector',
1153 label: "<input type='checkbox' id='"
1154 +one.f.switchmanager.staticRouteConfig.id.dashlet.selectAll+"'/>",
1163 property: 'staticRoute',
1164 label: 'Static Route',
1168 property: 'nextHop',
1169 label: 'Next Hop Address',
1173 data: data.nodeData,
1174 formatter: function(items) {
1175 $.each(items, function(index, item) {
1176 item["selector"] = '<input type="checkbox" class="staticRoute" id="' + item["name"] + '"></input>';
1184 staticRouteConfig : function(data) {
1186 $.each(data.nodeData, function(key, value) {
1188 // fill up all the td's
1190 var checkbox = document.createElement("input");
1191 checkbox.setAttribute("type", "checkbox");
1192 checkbox.setAttribute("id", value["name"]);
1193 entry.push(checkbox);
1194 entry.push(value["name"]);
1195 entry.push(value["staticRoute"]);
1196 entry.push(value["nextHop"]);
1205 one.f.switchmanager.spanPortConfig = {
1208 add: "one_f_switchmanager_spanPortConfig_id_dashlet_add",
1209 remove: "one_f_switchmanager_spanPortConfig_id_dashlet_remove",
1210 datagrid: "one_f_switchmanager_spanPortConfig_id_dashlet_datagrid",
1211 selectAllFlows: "one_f_switchmanager_spanPortConfig_id_dashlet_selectAllFlows"
1214 modal: "one_f_switchmanager_spanPortConfig_id_modal_modal",
1215 save: "one_f_switchmanager_spanPortConfig_id_modal_save",
1216 cancel: "one_f_switchmanager_spanPortConfig_id_modal_cancel",
1217 remove: "one_f_switchmanager_spanPortConfig_id_modal_remove",
1219 name : "one_f_switchmanager_spanPortConfig_id_modal_form_name",
1220 nodes : "one_f_switchmanager_spanPortConfig_id_modal_form_nodes",
1221 port : "one_f_switchmanager_spanPortConfig_id_modal_form_port",
1225 dashlet: function($dashlet) {
1226 one.lib.dashlet.empty($dashlet);
1228 //populate table in dashlet
1229 var url = one.f.switchmanager.rootUrl + "/spanPorts";
1230 one.f.switchmanager.spanPortConfig.ajax.main(url, {}, function(content) {
1232 if (content.privilege === 'WRITE') {
1234 // Add span port button
1235 var button = one.lib.dashlet.button.single("Add SPAN Port", one.f.switchmanager.spanPortConfig.id.dashlet.add, "btn-primary", "btn-mini");
1236 var $button = one.lib.dashlet.button.button(button);
1238 $button.click(function() {
1239 var $modal = one.f.switchmanager.spanPortConfig.modal.initialize();
1242 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.spanPortConfig.name));
1243 $dashlet.append($button);
1245 // Delete span port button
1246 var button = one.lib.dashlet.button.single("Remove SPAN Port", one.f.switchmanager.spanPortConfig.id.dashlet.remove, "btn-danger", "btn-mini");
1247 var $button = one.lib.dashlet.button.button(button);
1248 $button.click(function() {
1249 var spanPortsToDelete = [];
1250 var checkedCheckBoxes = $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find("tbody input:checked");
1252 if (checkedCheckBoxes.size() === 0) {
1255 checkedCheckBoxes.each(function(index, value) {
1256 var spanPortObj = {};
1257 spanPortObj['spanPortJson'] = decodeURIComponent(checkedCheckBoxes[index].getAttribute("spanPort"));
1258 spanPortObj['spanPortNodeName'] = checkedCheckBoxes[index].getAttribute("spanPortNode");
1259 spanPortObj['spanPortPortName'] = checkedCheckBoxes[index].getAttribute("spanPortPort");
1261 spanPortsToDelete.push(spanPortObj);
1263 one.f.switchmanager.spanPortConfig.modal.removeMultiple.dialog(spanPortsToDelete);
1265 $dashlet.append($button);
1267 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.spanPortConfig.id.dashlet.datagrid, {
1271 flexibleRowsPerPage: true
1272 }, "table-striped table-condensed");
1273 $dashlet.append($gridHTML);
1274 var dataSource = one.f.switchmanager.spanPortConfig.data.spanPortConfigGrid(content);
1275 $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource})
1276 .on("loaded", function() {
1277 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll).click(function() {
1278 $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find(':checkbox').prop('checked',
1279 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll).is(':checked'));
1281 $(".spanPortConfig").click(function(e){
1282 if (!$('.spanPortConfig[type=checkbox]:not(:checked)').length) {
1283 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll)
1287 $("#"+one.f.switchmanager.spanPortConfig.id.dashlet.selectAll)
1291 e.stopPropagation();
1296 // device ajax calls
1298 main : function(url, requestData, callback) {
1299 $.getJSON(url, requestData, function(data) {
1306 initialize: function() {
1307 var h3 = "Add SPAN Port";
1308 var footer = one.f.switchmanager.spanPortConfig.modal.footer();
1309 var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, "", footer);
1311 $('#' + one.f.switchmanager.spanPortConfig.id.modal.save, $modal).click(function() {
1312 one.f.switchmanager.spanPortConfig.modal.save($modal);
1315 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
1316 var $body = one.f.switchmanager.spanPortConfig.modal.body(nodes, nodeports);
1317 one.lib.modal.inject.body($modal, $body);
1321 save: function($modal) {
1323 result['nodeId'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.nodes, $modal).val();
1324 result['spanPort'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.port, $modal).val();
1325 one.f.switchmanager.spanPortConfig.modal.ajax.saveSpanPortConfig(result,
1326 function(response) {
1327 if(response.status == true) {
1328 $modal.modal('hide');
1329 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1331 alert(response.message);
1336 body: function(nodes, nodeports) {
1337 var $form = $(document.createElement('form'));
1338 var $fieldset = $(document.createElement('fieldset'));
1340 var $label = one.lib.form.label("Node");
1341 var $select = one.lib.form.select.create(nodes);
1342 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
1343 $select.val($select.find("option:first").val());
1344 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.nodes);
1347 $select.change(function() {
1348 // retrieve port value
1349 var nodeId = $(this).find('option:selected').attr('value');
1350 one.f.switchmanager.spanPortConfig.registry['currentNode'] = nodeId;
1351 var $ports = $('#'+one.f.switchmanager.spanPortConfig.id.modal.form.port);
1352 var ports = one.f.switchmanager.spanPortConfig.registry['nodePorts'][nodeId]
1354 $(ports).each(function(idx, val) {
1355 options[val.internalPortName] = val.portName+' ('+val.portId+')';
1357 one.lib.form.select.inject($ports, options);
1358 one.lib.form.select.prepend($ports, {'':'Please Select a Port'});
1359 $ports.val($ports.find('option:first').val());
1362 $fieldset.append($label).append($select);
1364 var $label = one.lib.form.label("Port");
1365 var $select = one.lib.form.select.create();
1366 one.lib.form.select.prepend($select, {'':'None'});
1367 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.port);
1368 $select.val($select.find('option:first').val());
1369 $fieldset.append($label).append($select);
1372 $form.append($fieldset);
1376 nodes: function(callback) {
1377 $.getJSON(one.f.switchmanager.rootUrl + "/nodeports", function(data) {
1380 $(data).each(function(index, node) {
1381 nodes[node.nodeId] = node.nodeName;
1382 nodePorts[node.nodeId] = node.nodePorts;
1384 one.f.switchmanager.spanPortConfig.registry['nodePorts'] = nodePorts;
1385 callback(nodes, nodePorts);
1388 saveSpanPortConfig: function(requestData, callback) {
1390 resource["jsonData"] = JSON.stringify(requestData);
1391 $.getJSON(one.f.switchmanager.rootUrl + "/spanPorts/add", resource, function(data) {
1396 footer : function() {
1398 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.spanPortConfig.id.modal.save, "btn-primary", "");
1399 var $saveButton = one.lib.dashlet.button.button(saveButton);
1400 footer.push($saveButton);
1404 dialog: function(spanPortsToDelete) {
1405 var h3 = 'Remove SPAN Port';
1407 var footer = one.f.switchmanager.spanPortConfig.modal.removeMultiple.footer();
1408 var $body = one.f.switchmanager.spanPortConfig.modal.removeMultiple.body(spanPortsToDelete);
1409 var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, $body, footer);
1411 // bind close button
1412 $('#'+one.f.switchmanager.spanPortConfig.id.modal.cancel, $modal).click(function() {
1413 $modal.modal('hide');
1416 // bind remove rule button
1417 $('#'+one.f.switchmanager.spanPortConfig.id.modal.remove, $modal).click(this, function(e) {
1418 var requestData = {};
1420 $(spanPortsToDelete).each(function(index, spanPort) {
1421 spanPorts.push(JSON.parse(spanPort.spanPortJson));
1423 requestData["spanPortsToDelete"] = JSON.stringify(spanPorts);
1425 var url = one.f.switchmanager.rootUrl + "/spanPorts/delete";
1426 one.f.switchmanager.spanPortConfig.ajax.main(url, requestData, function(response) {
1427 $modal.modal('hide');
1428 if (response.status == true) {
1429 // refresh dashlet by passing dashlet div as param
1430 one.lib.alert("Span Port(s) successfully removed");
1432 alert(response.message);
1434 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1439 footer : function() {
1441 var remove = one.lib.dashlet.button.single('Remove SPAN Port',one.f.switchmanager.spanPortConfig.id.modal.remove, 'btn-danger', '');
1442 var $remove = one.lib.dashlet.button.button(remove);
1443 footer.push($remove);
1445 var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.spanPortConfig.id.modal.cancel, '', '');
1446 var $cancel = one.lib.dashlet.button.button(cancel);
1447 footer.push($cancel);
1451 body : function (spanPortToDelete) {
1452 var $p = $(document.createElement('p'));
1453 var p = 'Remove the following Span Port(s)?';
1454 //creata a BS label for each rule and append to list
1456 $(spanPortToDelete).each(function(index, spanPortItem) {
1457 var $span = $(document.createElement('span'));
1458 $span.append(this.spanPortNodeName+"-"+this.spanPortPortName);
1459 p += '<br/>' + $span[0].outerHTML;
1468 spanPortConfigGrid: function(data) {
1469 var source = new StaticDataSource({
1472 property: 'selector',
1473 label: "<input type='checkbox' id='"
1474 +one.f.switchmanager.spanPortConfig.id.dashlet.selectAll+"'/>",
1478 property: 'nodeName',
1483 property: 'spanPortName',
1488 data: data.nodeData,
1489 formatter: function(items) {
1490 $.each(items, function(index, item) {
1491 item["selector"] = '<input type="checkbox" class="spanPortConfig" spanPort=' + encodeURIComponent(item["json"]) + ' spanPortNode="' + item["nodeName"] + '" spanPortPort="' + item["spanPortName"] + '"></input>';
1498 devices : function(data) {
1500 $.each(data.nodeData, function(key, value) {
1502 // fill up all the td's
1504 var checkbox = document.createElement("input");
1505 checkbox.setAttribute("type", "checkbox");
1506 checkbox.spanPort = value.json;
1507 entry.push(checkbox);
1508 entry.push(value["nodeName"]);
1509 entry.push(value["spanPort"]);
1518 one.f.connection = {
1519 id : { // one.f.connection.id
1520 datagrid : 'one-f-connection-id-datagrid',
1521 add : 'one-f-connection-id-add'
1523 dashlet: function($dashlet) {
1524 one.lib.dashlet.empty($dashlet);
1526 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.connection.name));
1528 var add = one.lib.dashlet.button.single('Add Node', one.f.connection.id.add, 'btn-primary', 'btn-mini');
1529 var $add = one.lib.dashlet.button.button(add);
1530 $add.click(function() {
1531 one.f.connection.add.initialize();
1533 $dashlet.append($add);
1535 var url = one.f.switchmanager.rootUrl+'/connect/nodes';
1536 $.getJSON(url, function(data) {
1537 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.connection.id.datagrid, {
1541 flexibleRowsPerPage: true
1542 }, 'table-striped table-condensed table-cursor');
1543 $dashlet.append($gridHTML);
1544 var dataSource = one.f.connection.data(data);
1545 $('#'+one.f.connection.id.datagrid, $dashlet).datagrid({dataSource:dataSource})
1546 .on('loaded', function() {
1547 $(this).find('tbody tr').click(function() {
1548 var nodeId = $(this).find('.nodeId').text();
1549 var nodeType = $(this).find('.nodeType').text();
1550 var nodeName = $(this).find('.nodeName').text();
1551 one.f.connection.remove.initialize(nodeId, nodeName, nodeType);
1556 data : function(data) {
1557 var source = new StaticDataSource({
1560 property: 'nodeName',
1566 formatter: function(items) {
1567 $.each(items, function(index, item) {
1568 var $nodeId = $(document.createElement('span'));
1569 $nodeId.css('display', 'none');
1570 var $nodeType = $nodeId.clone();
1571 var $nodeName = $nodeId.clone();
1572 $nodeId.append(item.nodeId).addClass('nodeId');
1573 $nodeType.append(item.nodeType).addClass('nodeType');
1574 $nodeName.append(item.nodeName).addClass('nodeName');
1575 item.nodeName += $nodeId[0].outerHTML+$nodeType[0].outerHTML+$nodeName[0].outerHTML;
1583 id : { // one.f.connection.add.id
1584 modal : 'one-f-connection-add-id-modal',
1585 add : 'one-f-connection-add-id-add',
1586 cancel : 'one-f-connection-add-id-cancel',
1588 nodeId : 'one-f-connection-add-id-form-nodeId',
1589 ipAddress : 'one-f-connection-add-id-form-ipAddress',
1590 port : 'one-f-connection-add-id-form-port',
1591 nodeType : 'one-f-connection-add-id-form-nodeType'
1594 initialize : function() {
1595 var h3 = 'Add Node';
1596 var footer = one.f.connection.add.footer();
1597 var $body = one.f.connection.add.body();;
1598 var $modal = one.lib.modal.spawn(one.f.connection.add.id.modal, h3, $body, footer);
1600 $('#'+one.f.connection.add.id.add, $modal).click(function() {
1601 var nodeId = $('#'+one.f.connection.add.id.form.nodeId, $modal).val();
1602 if (nodeId === '') {
1603 alert('Please enter a node ID');
1607 resources.ipAddress = $('#'+one.f.connection.add.id.form.ipAddress, $modal).val();
1608 if (resources.ipAddress === '') {
1609 alert('Please enter an IP Address');
1612 resources.port = $('#'+one.f.connection.add.id.form.port, $modal).val();
1613 if (resources.port === '') {
1614 alert('Please enter a port');
1617 var nodeType = $('#'+one.f.connection.add.id.form.nodeType, $modal).val();
1618 if (nodeType !== '') {
1619 resources.nodeType = nodeType;
1621 var url = one.f.switchmanager.rootUrl+'/connect/'+encodeURI(nodeId);
1622 $.post(url, resources, function(result) {
1623 if (result.success === true) {
1624 $modal.modal('hide');
1625 one.lib.alert(result.description);
1627 alert(result.code+': '+result.description);
1631 // bind cancel button
1632 $('#'+one.f.connection.add.id.cancel, $modal).click(function() {
1633 $modal.modal('hide');
1638 var $form = $(document.createElement('form'));
1639 var $fieldset = $(document.createElement('fieldset'));
1641 var $label = one.lib.form.label('Node ID');
1642 var $input = one.lib.form.input('Node ID');
1643 $input.attr('id', one.f.connection.add.id.form.nodeId);
1644 $fieldset.append($label).append($input);
1646 $label = one.lib.form.label('IP Address');
1647 $input = one.lib.form.input('IP Address');
1648 $input.attr('id', one.f.connection.add.id.form.ipAddress);
1649 $fieldset.append($label).append($input);
1651 $label = one.lib.form.label('Port');
1652 $input = one.lib.form.input('Port');
1653 $input.attr('id', one.f.connection.add.id.form.port);
1654 var $help = one.lib.form.help('Enter a number');
1655 $fieldset.append($label).append($input).append($help);
1657 $label = one.lib.form.label('Node Type');
1658 $input = one.lib.form.input('Node Type');
1659 $input.attr('id', one.f.connection.add.id.form.nodeType);
1660 $help = one.lib.form.help('Optional');
1661 $fieldset.append($label).append($input).append($help);
1662 $form.append($fieldset);
1665 footer : function() {
1667 var add = one.lib.dashlet.button.single('Submit', one.f.connection.add.id.add, 'btn-primary', '');
1668 var $add = one.lib.dashlet.button.button(add);
1670 var cancel = one.lib.dashlet.button.single('Cancel', one.f.connection.add.id.cancel, '', '');
1671 var $cancel = one.lib.dashlet.button.button(cancel);
1672 footer.push($cancel);
1677 id : { // one.f.connection.remove.id
1678 modal : 'one-f-connection-remove-id-modal',
1679 remove : 'one-f-connection-remove-id-remove',
1680 cancel : 'one-f-connection-remove-id-cancel'
1682 initialize : function(nodeId, nodeName, nodeType) {
1683 var h3 = 'Remove Node';
1684 var footer = one.f.connection.remove.footer();
1685 var $body = one.f.connection.remove.body(nodeName);
1686 var $modal = one.lib.modal.spawn(one.f.connection.remove.id.modal, h3, $body, footer);
1687 // bind remove buton
1688 $('#'+one.f.connection.remove.id.remove, $modal).click(function() {
1690 resources.nodeType = nodeType;
1691 var url = one.f.switchmanager.rootUrl+'/disconnect/'+encodeURI(nodeId);
1692 $.post(url, resources, function(result) {
1693 if (result.success === true) {
1694 $modal.modal('hide');
1695 one.lib.alert(result.description);
1697 alert(result.code+': '+result.description);
1699 }).fail(function() { debugger; });
1701 // bind cancel button
1702 $('#'+one.f.connection.remove.id.cancel, $modal).click(function() {
1703 $modal.modal('hide');
1707 body : function(nodeName) {
1708 var $p = $(document.createElement('p'));
1709 $p.append('Remove the following node? ');
1710 var $span = $(document.createElement('span'));
1711 $span.addClass('label label-info');
1712 $span.append(nodeName);
1713 $p.append($span[0].outerHTML);
1716 footer : function() {
1718 var remove = one.lib.dashlet.button.single('Remove', one.f.connection.remove.id.remove, 'btn-danger', '');
1719 var $remove = one.lib.dashlet.button.button(remove);
1720 footer.push($remove);
1721 var cancel = one.lib.dashlet.button.single('Cancel', one.f.connection.remove.id.cancel, '', '');
1722 var $cancel = one.lib.dashlet.button.button(cancel);
1723 footer.push($cancel);
1730 // populate nav tabs
1731 $(one.f.menu.left.top).each(function(index, value) {
1732 var $nav = $(".nav", "#left-top");
1733 one.main.page.dashlet($nav, value);
1736 $(one.f.menu.left.bottom).each(function(index, value) {
1737 var $nav = $(".nav", "#left-bottom");
1738 one.main.page.dashlet($nav, value);
1741 $(one.f.menu.right.bottom).each(function(index, value) {
1742 var $nav = $(".nav", "#right-bottom");
1743 one.main.page.dashlet($nav, value);
1746 one.f.addPopOut = function() {
1747 $img1 = $(document.createElement("img"));
1748 $img1.attr("src", "/img/Expand16T.png");
1749 $img1.attr("style", "float: right;");
1750 $img1.hover(function() {
1751 $img1.css("cursor", "pointer");
1753 $img1.click(function() {
1754 var $modal = one.f.switchmanager.nodesLearnt.modal.initialize.popout();
1756 'margin-left': '-45%',
1757 'margin-top': '-3%',
1758 'width':$(document).width() * 0.8,
1759 'height':$(document).height() * 0.9
1761 $(".modal-body", $modal).css({
1762 "max-height": $(document).height() * 0.75,
1766 $dash1 = $($("#left-top .nav")[0]);
1767 $dash1.append($img1);
1772 $('.dash .nav a', '#main').click(function() {
1774 var $li = $(this).parent();
1775 var $ul = $li.parent();
1776 one.lib.nav.unfocus($ul);
1777 $li.addClass('active');
1778 // clear respective dashlet
1779 var $dashlet = $ul.parent().find('.dashlet');
1780 one.lib.dashlet.empty($dashlet);
1782 // callback based on menu
1783 var id = $(this).attr('id');
1784 var menu = one.f.dashlet;
1786 case menu.nodesLearnt.id:
1787 one.f.switchmanager.nodesLearnt.dashlet($dashlet);
1789 case menu.staticRouteConfig.id:
1790 one.f.switchmanager.staticRouteConfig.dashlet($dashlet);
1792 case menu.subnetGatewayConfig.id:
1793 one.f.switchmanager.subnetGatewayConfig.dashlet($dashlet);
1795 case menu.spanPortConfig.id:
1796 one.f.switchmanager.spanPortConfig.dashlet($dashlet);
1798 case menu.connection.id:
1799 one.f.connection.dashlet($dashlet);
1804 // activate first tab on each dashlet
1805 $('.dash .nav').each(function(index, value) {
1806 $($(value).find('li')[0]).find('a').click();