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
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'
36 one.f.dashlet.nodesLearnt
39 one.f.dashlet.staticRouteConfig
45 one.f.dashlet.subnetGatewayConfig,
46 one.f.dashlet.spanPortConfig
52 one.f.switchmanager = {
53 rootUrl: "controller/web/devices",
54 createTable: function(columnNames, body) {
55 var tableAttributes = ["table-striped", "table-bordered", "table-condensed"];
56 var $table = one.lib.dashlet.table.table(tableAttributes);
57 var tableHeaders = columnNames;
58 var $thead = one.lib.dashlet.table.header(tableHeaders);
59 var $tbody = one.lib.dashlet.table.body(body, tableHeaders);
64 validateName: function(name) {
65 return (name.length < 256);
69 one.f.switchmanager.nodesLearnt = {
72 popout: "one_f_switchmanager_nodesLearnt_id_dashlet_popout",
73 datagrid: "one_f_switchmanager_nodesLearnt_id_dashlet_datagrid"
76 modal: "one_f_switchmanager_nodesLearnt_id_modal_modal",
77 ports: "one_f_switchmanager_nodesLearnt_id_modal_ports",
78 save: "one_f_switchmanager_nodesLearnt_id_modal_save",
79 datagrid: "one_f_switchmanager_nodesLearnt_id_modal_datagrid",
80 portsDatagrid: "one_f_switchmanager_nodesLearnt_id_modal_portsDatagrid",
82 nodeId: "one_f_switchmanager_nodesLearnt_id_modal_form_nodeid",
83 nodeName : "one_f_switchmanager_nodesLearnt_id_modal_form_nodename",
84 portStatus : "one_f_switchmanager_nodesLearnt_id_modal_form_portstatus",
85 tier: "one_f_switchmanager_nodesLearnt_id_modal_form_tier",
86 operationMode: "one_f_switchmanager_nodesLearnt_id_modal_form_opmode"
90 dashlet: function($dashlet) {
91 var url = one.f.switchmanager.rootUrl + "/nodesLearnt";
92 one.lib.dashlet.empty($dashlet);
93 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.nodesLearnt.name));
95 one.f.switchmanager.nodesLearnt.ajax.main(url, function(content) {
96 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.dashlet.datagrid, {
100 flexibleRowsPerPage: true
101 }, "table-striped table-condensed");
102 $dashlet.append($gridHTML);
103 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.abridged(content);
104 $("#" + one.f.switchmanager.nodesLearnt.id.dashlet.datagrid).datagrid({dataSource: dataSource}).on("loaded", function() {
105 $(this).find("tbody a").click(one.f.switchmanager.nodesLearnt.modal.initialize.updateNode);
108 $("#" + one.f.switchmanager.nodesLearnt.id.dashlet.datagrid).datagrid({dataSource: dataSource}).on("loaded", function() {
109 $(this).find("tbody span").click(function(){
110 one.f.switchmanager.nodesLearnt.modal.initialize.displayPorts($(this));
117 main : function(url, callback) {
118 $.getJSON(url, function(data) {
125 updateNode: function(evt) {
126 one.f.switchmanager.nodesLearnt.ajax.main(one.f.switchmanager.rootUrl + "/tiers", function(tiers) {
128 var nodeId = decodeURIComponent(evt.target.id);
131 var $body = one.f.switchmanager.nodesLearnt.modal.body.updateNode(nodeId, JSON.parse(decodeURIComponent(evt.target.getAttribute("switchDetails"))), tiers);
132 if (evt.target.getAttribute("privilege") == 'WRITE'){
133 h3 = "Update Node Information";
134 footer = one.f.switchmanager.nodesLearnt.modal.footer.updateNode();
135 } else { //disable node edit
136 $body.find('*').attr('disabled', 'disabled');
137 h3 = 'Node Information';
140 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer);
142 $('#' + one.f.switchmanager.nodesLearnt.id.modal.save, $modal).click(function() {
143 one.f.switchmanager.nodesLearnt.modal.save($modal);
146 // inject body (nodePorts)
147 one.lib.modal.inject.body($modal, $body);
152 var h3 = "Nodes Learnt";
153 var footer = one.f.switchmanager.nodesLearnt.modal.footer.popout();
154 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer);
155 var $body = one.f.switchmanager.nodesLearnt.modal.body.popout($modal);
158 displayPorts: function(ports) {
159 var content = JSON.parse(decodeURIComponent(ports.attr("ports")));
161 var h3 = ((ports.attr("nodeName") == "None")? ports.attr("nodeId") : ports.attr("nodeName"))
163 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.ports, h3, "", footer);
165 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.modal.portsDatagrid, {
169 flexibleRowsPerPage: true,
171 }, "table-striped table-condensed");
172 one.lib.modal.inject.body($modal, $gridHTML);
173 $modal.on("shown", function() {
174 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.displayPorts(content);
175 $("#" + one.f.switchmanager.nodesLearnt.id.modal.portsDatagrid).datagrid({
176 dataSource: dataSource,
184 updateNode: function(nodeId, switchDetails, tiers) {
185 var $form = $(document.createElement('form'));
186 var $fieldset = $(document.createElement('fieldset'));
187 // node ID. not editable.
188 var $label = one.lib.form.label("Node ID");
189 var $input = one.lib.form.input("node id");
190 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeId);
191 $input.attr("disabled", true);
192 $input.attr("value", nodeId);
193 $fieldset.append($label).append($input);
195 var $label = one.lib.form.label("Node Name");
196 var $input = one.lib.form.input("Node Name");
197 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeName);
198 if(switchDetails["nodeName"] != null) {
199 $input.attr('value', switchDetails["nodeName"]);
201 $fieldset.append($label).append($input);
203 var $label = one.lib.form.label("Tier");
204 var $select = one.lib.form.select.create(tiers);
205 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.tier);
206 $select.val(switchDetails["tier"]);
207 $fieldset.append($label).append($select);
209 var $label = one.lib.form.label("Operation Mode");
210 var $select = one.lib.form.select.create(
211 ["Allow reactive forwarding", "Proactive forwarding only"]);
212 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.operationMode);
213 if ((one.main.registry != undefined) && (one.main.registry.container != 'default')) {
214 $select.attr("disabled", true);
216 $select.val(switchDetails["mode"]);
217 $fieldset.append($label).append($select);
218 $form.append($fieldset);
221 popout: function($modal) {
222 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.modal.datagrid, {
226 flexibleRowsPerPage: true,
228 }, "table-striped table-condensed");
229 one.lib.modal.inject.body($modal, $gridHTML);
230 // attach to shown event of modal
231 $modal.on("shown", function() {
232 var url = one.f.switchmanager.rootUrl + "/nodesLearnt";
233 one.f.switchmanager.nodesLearnt.ajax.main(url, function(content) {
234 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.popout(content);
235 $("#" + one.f.switchmanager.nodesLearnt.id.modal.datagrid).datagrid({
236 dataSource: dataSource,
239 .on("loaded", function() {
240 $("#" + one.f.switchmanager.nodesLearnt.id.modal.datagrid).find("tbody span").click(function(){
241 one.f.switchmanager.nodesLearnt.modal.initialize.displayPorts($(this));
248 save: function($modal) {
250 result['nodeName'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeName, $modal).val();
251 if(!one.f.switchmanager.validateName(result['nodeName'])) {
252 alert("Node name can contain upto 255 characters");
255 result['nodeId'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeId, $modal).val();
256 result['tier'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.tier, $modal).val();
257 result['operationMode'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.operationMode, $modal).val();
258 one.f.switchmanager.nodesLearnt.modal.ajax(result,
260 if(response.status == true) {
261 $modal.modal('hide');
262 one.topology.update(); // refresh visual topology with new name
263 // TODO: Identify dashlet by inserting a nodesLearnt div
264 // in the dashlet() instead
265 one.f.switchmanager.nodesLearnt.dashlet($("#left-top .dashlet"));
267 alert(response.message);
272 ajax: function(requestData, callback) {
273 $.getJSON(one.f.switchmanager.rootUrl + "/nodesLearnt/update", requestData, function(response) {
278 updateNode: function() {
280 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.nodesLearnt.id.modal.save, "btn-success", "");
281 var $saveButton = one.lib.dashlet.button.button(saveButton);
282 footer.push($saveButton);
287 // TODO: Maybe put a close button in the footer?
295 abridged: function(data) {
296 var source = new StaticDataSource({
299 property: 'nodeName',
315 formatter: function(items) {
316 $.each(items, function (index, item) {
317 var nodeName = item.nodeName;
318 var nodeNameEntry = item.nodeName ? item.nodeName : "Click to update";
319 item.nodeName = '<a href="#" id="' + item.nodeId + '" switchDetails=' + encodeURIComponent(JSON.stringify(item)) +
320 ' privilege=' + data.privilege + '>' + nodeNameEntry + '</a>';
322 var ports = item.ports;
323 item.ports = '<span class="nodePorts" style="cursor:pointer;color: #08c" ports='+encodeURIComponent(JSON.stringify(item.ports)) + ' nodeId=' + item.nodeId
324 + ' nodeName=' + nodeName
325 + '>' + ports.match(/<\/span>/g).length+'</span>';
333 popout: function(data) {
334 var source = new StaticDataSource({
337 property: 'nodeName',
347 property: 'tierName',
363 formatter: function(items) {
364 $.each(items, function (index, item) {
365 var ports = item.ports;
366 item.ports = '<span class="nodePorts" style="cursor: pointer;color: #08c" ports='+encodeURIComponent(JSON.stringify(item.ports)) + ' nodeId=' + item.nodeId
367 + ' nodeName=' + item.nodeName
368 + '>' + ports.match(/<\/span>/g).length+'</span>';
375 displayPorts: function(content){
378 var finish=content.indexOf("<br>",start);
380 data.push({"ports":content.substring(start,finish)});
382 finish=content.indexOf("<br>",start);
384 var source = new StaticDataSource({
399 abridged : function(data) {
401 $.each(data.nodeData, function(key, value) {
404 var nodeNameEntry = value["nodeName"] ? value["nodeName"] : "Click to update";
406 // TODO: Move anchor tag creation to one.lib.form.
408 aTag = document.createElement("a");
409 aTag.privilege = data.privilege;
410 aTag.addEventListener("click", one.f.switchmanager.nodesLearnt.modal.initialize.updateNode);
411 aTag.addEventListener("mouseover", function(evt) {
412 evt.target.style.cursor = "pointer";
414 aTag.setAttribute("id", encodeURIComponent(value["nodeId"]));
415 aTag.switchDetails = value;
416 aTag.innerHTML = nodeNameEntry;
418 entry.push(value["nodeId"]);
419 entry.push(value["ports"]);
425 popout : function(data) {
427 $.each(data.nodeData, function(key, value) {
429 // fill up all the td's
431 var nodenameentry = value["nodeName"] ? value["nodeName"] : "No name provided";
432 entry.push(nodenameentry);
433 entry.push(value["nodeId"]);
434 entry.push(value["tierName"]);
435 entry.push(value["mac"]);
436 entry.push(value["ports"]);
445 one.f.switchmanager.subnetGatewayConfig = {
448 addIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addIP",
449 addPorts: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addPorts",
450 removeIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_removeIP",
451 datagrid: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_datagrid"
454 modal: "one_f_switchmanager_subnetGatewayConfig_id_modal_modal",
455 save: "one_f_switchmanager_subnetGatewayConfig_id_modal_save",
457 name : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayname",
458 gatewayIPAddress : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayipaddress",
459 nodeId: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_nodeid",
460 ports: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_ports"
465 dashlet: function($dashlet) {
466 one.lib.dashlet.empty($dashlet);
467 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.subnetGatewayConfig.name));
468 // Add gateway IP Address button
469 var url = one.f.switchmanager.rootUrl + "/subnets";
470 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, {}, function(content) {
472 if (content.privilege === 'WRITE') {
473 var button = one.lib.dashlet.button.single("Add Gateway IP Address",
474 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addIPAddress, "btn-primary", "btn-mini");
475 var $button = one.lib.dashlet.button.button(button);
476 $button.click(function() {
477 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.gateway();
480 $dashlet.append($button);
482 // Delete gateway ip address button
483 var button = one.lib.dashlet.button.single("Delete Gateway IP Address(es)",
484 one.f.switchmanager.subnetGatewayConfig.id.dashlet.removeIPAddress, "btn-primary", "btn-mini");
485 var $button = one.lib.dashlet.button.button(button);
486 $button.click(function() {
487 var requestData = {};
488 var gatewaysToDelete = [];
489 var checkedCheckBoxes = $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find("tbody input:checked")
490 checkedCheckBoxes.each(function(index, value) {
491 gatewaysToDelete.push(checkedCheckBoxes[index].id);
493 if (gatewaysToDelete.length > 0) {
494 requestData["gatewaysToDelete"] = gatewaysToDelete.toString();
495 var url = one.f.switchmanager.rootUrl + "/subnetGateway/delete";
496 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
497 if (response.status == true) {
498 // refresh dashlet by passing dashlet div as param
499 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
501 alert(response.message);
506 $dashlet.append($button);
509 var button = one.lib.dashlet.button.single("Add Ports",
510 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addPorts, "btn-primary", "btn-mini");
511 var $button = one.lib.dashlet.button.button(button);
512 $button.click(function() {
513 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.ports();
516 $dashlet.append($button);
518 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid, {
522 flexibleRowsPerPage: true
523 }, "table-striped table-condensed");
524 $dashlet.append($gridHTML);
525 var dataSource = one.f.switchmanager.subnetGatewayConfig.data.devicesgrid(content);
526 $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource});
530 main : function(url, requestData, callback) {
531 $.getJSON(url, requestData, function(data) {
539 gateway: function() {
540 var h3 = "Add Gateway IP Address";
541 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
542 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, "", footer);
544 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
545 one.f.switchmanager.subnetGatewayConfig.modal.save.gateway($modal);
547 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.gateway();
548 one.lib.modal.inject.body($modal, $body);
552 var h3 = "Add Ports";
553 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
554 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, "", footer);
556 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
557 one.f.switchmanager.subnetGatewayConfig.modal.save.ports($modal);
560 // TODO: Change to subnetGateway instead.
561 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
562 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.ports(nodes, nodeports);
563 one.lib.modal.inject.body($modal, $body);
569 gateway: function($modal) {
571 result['gatewayName'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
572 if(!one.f.switchmanager.validateName(result['gatewayName'])) {
573 alert("Gateway name can contain upto 255 characters");
576 result['gatewayIPAddress'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress, $modal).val();
577 one.f.switchmanager.subnetGatewayConfig.modal.ajax.gateway(result,
579 if(response.status == true) {
580 $modal.modal('hide');
581 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
583 alert(response.message);
587 ports: function($modal) {
589 var gatewayRegistryIndex = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
590 result['portsName'] = one.f.switchmanager.subnetGatewayConfig.registry.gateways[gatewayRegistryIndex];
591 result['nodeId'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId, $modal).val();
592 result['ports'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports, $modal).val();
593 if(!result['portsName'] || result['portsName'] == "") {
594 alert("No gateway chosen. Cannot add port");
597 if(!result['nodeId'] || result['nodeId'] == "") {
598 alert("Please select a node.");
601 if(!result['ports'] || result['ports'] == "") {
602 alert("Please choose a port.");
605 one.f.switchmanager.subnetGatewayConfig.modal.ajax.ports(result,
607 if(response.status == true) {
608 $modal.modal('hide');
609 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
611 alert(response.message);
617 gateway: function() {
618 var $form = $(document.createElement('form'));
619 var $fieldset = $(document.createElement('fieldset'));
621 var $label = one.lib.form.label("Name");
622 var $input = one.lib.form.input("Name");
623 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
624 $fieldset.append($label).append($input);
626 var $label = one.lib.form.label("Gateway IP Address/Mask");
627 var $input = one.lib.form.input("Gateway IP Address/Mask");
628 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress);
629 $fieldset.append($label).append($input);
631 $form.append($fieldset);
634 ports: function(nodes, nodeports) {
635 var $form = $(document.createElement('form'));
636 var $fieldset = $(document.createElement('fieldset'));
637 // gateways drop down
638 var $label = one.lib.form.label("Gateway Name");
639 var $select = one.lib.form.select.create(one.f.switchmanager.subnetGatewayConfig.registry.gateways);
640 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
641 $select.val($select.find("option:first").val());
642 $fieldset.append($label).append($select);
645 var $label = one.lib.form.label("Node ID");
646 var $select = one.lib.form.select.create(nodes);
647 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId);
648 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
649 $select.val($select.find("option:first").val());
650 $fieldset.append($label).append($select);
653 $select.change(function() {
654 // retrieve port value
655 var node = $(this).find('option:selected').attr('value');
656 one.f.switchmanager.subnetGatewayConfig.registry['currentNode'] = node;
657 var $ports = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
658 var ports = nodeports[node];
659 one.lib.form.select.inject($ports, ports);
660 one.lib.form.select.prepend($ports, { '' : 'Please Select a Port' });
661 $ports.val($ports.find("option:first").val());
665 var $label = one.lib.form.label("Select Port");
666 var $select = one.lib.form.select.create();
667 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
668 $fieldset.append($label).append($select);
670 $form.append($fieldset);
675 gateway: function(requestData, callback) {
676 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/add", requestData, function(data) {
680 ports: function(requestData, callback) {
681 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/ports/add", requestData, function(data) {
686 footer : function() {
688 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.subnetGatewayConfig.id.modal.save, "btn-success", "");
689 var $saveButton = one.lib.dashlet.button.button(saveButton);
690 footer.push($saveButton);
696 devicesgrid: function(data) {
697 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
698 var source = new StaticDataSource({
701 property: 'selector',
712 label: 'Gateway IP Address/Mask',
722 formatter: function(items) {
723 $.each(items, function(index, tableRow) {
724 tableRow["selector"] = '<input type="checkbox" id=' + tableRow["name"] + '></input>';
725 var json = tableRow["json"];
726 var subnetConfigObject = JSON.parse(json);
727 var nodePortHtml = "<div>";
728 $.each(subnetConfigObject.nodePorts, function(index, nodePort) {
729 nodePortHtml += nodePort;
730 nodePortHtml += " ";
731 nodePortHtml += '<a href="#" id=' + encodeURIComponent(nodePort) +
732 ' gatewayName=' + tableRow["name"] +
733 ' onclick="javascript:one.f.switchmanager.subnetGatewayConfig.actions.deleteNodePort(this);">Delete</a>';
734 nodePortHtml += "<br/>";
736 nodePortHtml += "</div>";
737 tableRow["json"] = nodePortHtml;
743 // populate the registry with subnet names
744 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
745 $.each(data.nodeData, function(key, value) {
746 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
750 devices : function(data) {
752 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
753 $.each(data.nodeData, function(key, value) {
755 // fill up all the td's
756 var subnetConfigObject = $.parseJSON(value["json"]);
757 var nodePorts = subnetConfigObject.nodePorts;
758 var $nodePortsContainer = $(document.createElement("div"));
760 for(var i = 0; i < nodePorts.length; i++) {
761 var nodePort = nodePorts[i];
762 $nodePortsContainer.append(nodePort + " ");
763 // add delete anchor tag to delete ports
764 var aTag = document.createElement("a");
765 aTag.setAttribute("id", encodeURIComponent(nodePort));
766 aTag.gatewayName = value["name"];
767 aTag.addEventListener("click", function(evt) {
768 var htmlPortAnchor = evt.target;
769 var requestData = {};
770 requestData["gatewayName"] = evt.target.gatewayName;
771 requestData["nodePort"] = decodeURIComponent(evt.target.id);
772 // make ajax call to delete port
773 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
774 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
775 if(response.status == true) {
776 // refresh dashlet by passing dashlet div as param
777 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
779 alert(response.message);
784 aTag.addEventListener("mouseover", function(evt) {
785 evt.target.style.cursor = "pointer";
787 aTag.innerHTML = "Delete";
788 $nodePortsContainer.append(aTag);
789 $nodePortsContainer.append("<br/>");
792 // store gateways in the registry so that they can be used in the add ports popup
793 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
795 var checkbox = document.createElement("input");
796 checkbox.setAttribute("type", "checkbox");
797 checkbox.setAttribute("id", value["name"]);
798 entry.push(checkbox);
799 entry.push(value["name"]);
800 entry.push(value["subnet"]);
801 entry.push($nodePortsContainer);
809 deleteNodePort: function(htmlPortAnchor) {
810 var requestData = {};
811 requestData["gatewayName"] = htmlPortAnchor.getAttribute("gatewayName");
812 requestData["nodePort"] = decodeURIComponent(htmlPortAnchor.id);
813 // make ajax call to delete port
814 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
815 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
816 if(response.status == true) {
817 // refresh dashlet by passing dashlet div as param
818 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
820 alert(response.message);
827 one.f.switchmanager.staticRouteConfig = {
830 add: "one_f_switchmanager_staticRouteConfig_id_dashlet_add",
831 remove: "one_f_switchmanager_staticRouteConfig_id_dashlet_remove",
832 datagrid: "one_f_switchmanager_staticRouteConfig_id_dashlet_datagrid"
835 modal: "one_f_switchmanager_staticRouteConfig_id_modal_modal",
836 save: "one_f_switchmanager_staticRouteConfig_id_modal_save",
838 routeName : "one_f_switchmanager_staticRouteConfig_id_modal_form_routename",
839 staticRoute : "one_f_switchmanager_staticRouteConfig_id_modal_form_staticroute",
840 nextHop : "one_f_switchmanager_staticRouteConfig_id_modal_form_nexthop",
844 dashlet: function($dashlet) {
845 one.lib.dashlet.empty($dashlet);
846 var url = one.f.switchmanager.rootUrl + "/staticRoutes";
847 one.f.switchmanager.staticRouteConfig.ajax.main(url, {}, function(content) {
849 if (content.privilege === 'WRITE') {
850 // Add static route button
851 var button = one.lib.dashlet.button.single("Add Static Route", one.f.switchmanager.staticRouteConfig.id.dashlet.add, "btn-primary", "btn-mini");
852 var $button = one.lib.dashlet.button.button(button);
853 $button.click(function() {
854 var $modal = one.f.switchmanager.staticRouteConfig.modal.initialize();
857 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.staticRouteConfig.name));
858 $dashlet.append($button);
860 // Delete static route button
861 var button = one.lib.dashlet.button.single("Delete Static Route(s)", one.f.switchmanager.staticRouteConfig.id.dashlet.remove, "btn-primary", "btn-mini");
862 var $button = one.lib.dashlet.button.button(button);
863 $button.click(function() {
864 var requestData = {};
865 var routesToDelete = [];
866 //var checkedCheckBoxes = $("input:checked", $(this).closest(".dashlet").find("table"));
867 var checkedCheckBoxes = $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find("tbody input:checked");
868 checkedCheckBoxes.each(function(index, value) {
869 routesToDelete.push(checkedCheckBoxes[index].id);
871 if (routesToDelete.length > 0) {
872 requestData["routesToDelete"] = routesToDelete.toString();
873 var url = one.f.switchmanager.rootUrl + "/staticRoute/delete";
874 one.f.switchmanager.staticRouteConfig.ajax.main(url, requestData, function(response) {
875 if (response.status == true) {
876 // refresh dashlet by passing dashlet div as param
877 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
879 alert(response.message);
884 $dashlet.append($button);
886 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid, {
890 flexibleRowsPerPage: true
891 }, "table-striped table-condensed");
892 $dashlet.append($gridHTML);
893 var dataSource = one.f.switchmanager.staticRouteConfig.data.staticRouteConfigGrid(content);
894 $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource});
899 main : function(url, requestData, callback) {
900 $.getJSON(url, requestData, function(data) {
907 initialize: function() {
908 var h3 = "Add Static Route";
909 var footer = one.f.switchmanager.staticRouteConfig.modal.footer();
910 var $modal = one.lib.modal.spawn(one.f.switchmanager.staticRouteConfig.id.modal.modal, h3, "", footer);
912 $('#' + one.f.switchmanager.staticRouteConfig.id.modal.save, $modal).click(function() {
913 one.f.switchmanager.staticRouteConfig.modal.save($modal);
915 var $body = one.f.switchmanager.staticRouteConfig.modal.body();
916 one.lib.modal.inject.body($modal, $body);
919 save: function($modal) {
921 result['routeName'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.routeName, $modal).val();
922 result['staticRoute'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute, $modal).val();
923 result['nextHop'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop, $modal).val();
924 one.f.switchmanager.staticRouteConfig.modal.ajax.staticRouteConfig(result, function(response) {
925 if(response.status == true) {
926 $modal.modal('hide');
927 // refresh dashlet by passing dashlet div as param
928 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
930 // TODO: Show error message in a error message label instead.
931 alert(response.message);
936 var $form = $(document.createElement('form'));
937 var $fieldset = $(document.createElement('fieldset'));
939 var $label = one.lib.form.label("Name");
940 var $input = one.lib.form.input("Name");
941 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.routeName);
942 $fieldset.append($label).append($input);
943 // static route IP Mask
944 var $label = one.lib.form.label("Static Route");
945 var $input = one.lib.form.input("Static Route");
946 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute);
947 $fieldset.append($label).append($input);
948 // static route IP Mask
949 var $label = one.lib.form.label("Next Hop");
950 var $input = one.lib.form.input("Next Hop");
951 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop);
952 $fieldset.append($label).append($input);
954 $form.append($fieldset);
958 staticRouteConfig: function(requestData, callback) {
959 $.getJSON(one.f.switchmanager.rootUrl + "/staticRoute/add", requestData, function(data) {
967 footer : function() {
969 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.staticRouteConfig.id.modal.save, "btn-success", "");
970 var $saveButton = one.lib.dashlet.button.button(saveButton);
971 footer.push($saveButton);
977 staticRouteConfigGrid: function(data) {
978 var source = new StaticDataSource({
981 property: 'selector',
991 property: 'staticRoute',
992 label: 'Static Route',
997 label: 'Next Hop Address',
1001 data: data.nodeData,
1002 formatter: function(items) {
1003 $.each(items, function(index, item) {
1004 item["selector"] = '<input type="checkbox" id=' + item["name"] + '></input>';
1012 staticRouteConfig : function(data) {
1014 $.each(data.nodeData, function(key, value) {
1016 // fill up all the td's
1018 var checkbox = document.createElement("input");
1019 checkbox.setAttribute("type", "checkbox");
1020 checkbox.setAttribute("id", value["name"]);
1021 entry.push(checkbox);
1022 entry.push(value["name"]);
1023 entry.push(value["staticRoute"]);
1024 entry.push(value["nextHop"]);
1033 one.f.switchmanager.spanPortConfig = {
1036 add: "one_f_switchmanager_spanPortConfig_id_dashlet_add",
1037 remove: "one_f_switchmanager_spanPortConfig_id_dashlet_remove",
1038 datagrid: "one_f_switchmanager_spanPortConfig_id_dashlet_datagrid"
1041 modal: "one_f_switchmanager_spanPortConfig_id_modal_modal",
1042 save: "one_f_switchmanager_spanPortConfig_id_modal_save",
1044 name : "one_f_switchmanager_spanPortConfig_id_modal_form_name",
1045 nodes : "one_f_switchmanager_spanPortConfig_id_modal_form_nodes",
1046 port : "one_f_switchmanager_spanPortConfig_id_modal_form_port",
1050 dashlet: function($dashlet) {
1051 one.lib.dashlet.empty($dashlet);
1053 //populate table in dashlet
1054 var url = one.f.switchmanager.rootUrl + "/spanPorts";
1055 one.f.switchmanager.spanPortConfig.ajax.main(url, {}, function(content) {
1057 if (content.privilege === 'WRITE') {
1059 // Add span port button
1060 var button = one.lib.dashlet.button.single("Add SPAN Port", one.f.switchmanager.spanPortConfig.id.dashlet.add, "btn-primary", "btn-mini");
1061 var $button = one.lib.dashlet.button.button(button);
1063 $button.click(function() {
1064 var $modal = one.f.switchmanager.spanPortConfig.modal.initialize();
1067 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.spanPortConfig.name));
1068 $dashlet.append($button);
1070 // Delete span port button
1071 var button = one.lib.dashlet.button.single("Delete SPAN Port(s)", one.f.switchmanager.spanPortConfig.id.dashlet.remove, "btn-primary", "btn-mini");
1072 var $button = one.lib.dashlet.button.button(button);
1073 $button.click(function() {
1075 var checkedCheckBoxes = $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find("tbody input:checked");
1076 if (checkedCheckBoxes.length > 0) {
1077 var spanPortsToDelete = "";
1078 checkedCheckBoxes.each(function(index, value) {
1079 spanPortsToDelete += decodeURIComponent(checkedCheckBoxes[index].getAttribute("spanPort")) + "###";
1082 var requestData = {};
1083 requestData["spanPortsToDelete"] = spanPortsToDelete;
1084 var url = one.f.switchmanager.rootUrl + "/spanPorts/delete";
1085 one.f.switchmanager.spanPortConfig.ajax.main(url, requestData, function(response) {
1086 if (response.status == true) {
1087 // refresh dashlet by passing dashlet div as param
1088 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1090 alert(response.message);
1095 $dashlet.append($button);
1097 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.spanPortConfig.id.dashlet.datagrid, {
1101 flexibleRowsPerPage: true
1102 }, "table-striped table-condensed");
1103 $dashlet.append($gridHTML);
1104 var dataSource = one.f.switchmanager.spanPortConfig.data.spanPortConfigGrid(content);
1105 $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource});
1111 // device ajax calls
1113 main : function(url, requestData, callback) {
1114 $.getJSON(url, requestData, function(data) {
1121 initialize: function() {
1122 var h3 = "Add SPAN Port";
1123 var footer = one.f.switchmanager.spanPortConfig.modal.footer();
1124 var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, "", footer);
1126 $('#' + one.f.switchmanager.spanPortConfig.id.modal.save, $modal).click(function() {
1127 one.f.switchmanager.spanPortConfig.modal.save($modal);
1130 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
1131 var $body = one.f.switchmanager.spanPortConfig.modal.body(nodes, nodeports);
1132 one.lib.modal.inject.body($modal, $body);
1136 save: function($modal) {
1138 result['nodeId'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.nodes, $modal).val();
1139 result['spanPort'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.port, $modal).val();
1140 one.f.switchmanager.spanPortConfig.modal.ajax.saveSpanPortConfig(result,
1141 function(response) {
1142 if(response.status == true) {
1143 $modal.modal('hide');
1144 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1146 alert(response.message);
1151 body: function(nodes, nodeports) {
1152 var $form = $(document.createElement('form'));
1153 var $fieldset = $(document.createElement('fieldset'));
1155 var $label = one.lib.form.label("Node");
1156 var $select = one.lib.form.select.create(nodes);
1157 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
1158 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.nodes);
1161 $select.change(function() {
1162 // retrieve port value
1163 var node = $(this).find('option:selected').attr('value');
1164 one.f.switchmanager.spanPortConfig.registry['currentNode'] = node;
1165 var $ports = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.port);
1166 var ports = nodeports[node];
1167 one.lib.form.select.inject($ports, ports);
1170 $fieldset.append($label).append($select);
1172 var $label = one.lib.form.label("Input Port");
1173 var $select = one.lib.form.select.create();
1174 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.port);
1175 $fieldset.append($label).append($select);
1178 $form.append($fieldset);
1182 nodes: function(callback) {
1183 $.getJSON(one.f.switchmanager.rootUrl + "/nodeports", function(data) {
1184 var nodes = one.f.switchmanager.spanPortConfig.modal.data.nodes(data);
1185 var nodeports = data;
1186 one.f.switchmanager.spanPortConfig.registry['nodeports'] = nodeports;
1187 callback(nodes, nodeports);
1190 saveSpanPortConfig: function(requestData, callback) {
1192 resource["jsonData"] = JSON.stringify(requestData);
1193 $.getJSON(one.f.switchmanager.rootUrl + "/spanPorts/add", resource, function(data) {
1199 nodes : function(data) {
1201 $.each(data, function(key, value) {
1207 footer : function() {
1209 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.spanPortConfig.id.modal.save, "btn-success", "");
1210 var $saveButton = one.lib.dashlet.button.button(saveButton);
1211 footer.push($saveButton);
1217 spanPortConfigGrid: function(data) {
1218 var source = new StaticDataSource({
1221 property: 'selector',
1226 property: 'nodeName',
1231 property: 'spanPort',
1236 data: data.nodeData,
1237 formatter: function(items) {
1238 $.each(items, function(index, item) {
1239 item["selector"] = '<input type="checkbox" spanPort=' + encodeURIComponent(item["json"]) + '></input>';
1246 devices : function(data) {
1248 $.each(data.nodeData, function(key, value) {
1250 // fill up all the td's
1252 var checkbox = document.createElement("input");
1253 checkbox.setAttribute("type", "checkbox");
1254 checkbox.spanPort = value.json;
1255 entry.push(checkbox);
1256 entry.push(value["nodeName"]);
1257 entry.push(value["spanPort"]);
1267 // populate nav tabs
1268 $(one.f.menu.left.top).each(function(index, value) {
1269 var $nav = $(".nav", "#left-top");
1270 one.main.page.dashlet($nav, value);
1273 $(one.f.menu.left.bottom).each(function(index, value) {
1274 var $nav = $(".nav", "#left-bottom");
1275 one.main.page.dashlet($nav, value);
1278 $(one.f.menu.right.bottom).each(function(index, value) {
1279 var $nav = $(".nav", "#right-bottom");
1280 one.main.page.dashlet($nav, value);
1283 one.f.addPopOut = function() {
1284 $img1 = $(document.createElement("img"));
1285 $img1.attr("src", "/img/Expand16T.png");
1286 $img1.attr("style", "float: right;");
1287 $img1.hover(function() {
1288 $img1.css("cursor", "pointer");
1290 $img1.click(function() {
1291 var $modal = one.f.switchmanager.nodesLearnt.modal.initialize.popout();
1293 'margin-left': '-45%',
1294 'margin-top': '-3%',
1295 'width':$(document).width() * 0.8,
1296 'height':$(document).height() * 0.9
1298 $(".modal-body", $modal).css({
1299 "max-height": $(document).height() * 0.75,
1303 $dash1 = $($("#left-top .nav")[0]);
1304 $dash1.append($img1);
1309 $('.dash .nav a', '#main').click(function() {
1311 var $li = $(this).parent();
1312 var $ul = $li.parent();
1313 one.lib.nav.unfocus($ul);
1314 $li.addClass('active');
1315 // clear respective dashlet
1316 var $dashlet = $ul.parent().find('.dashlet');
1317 one.lib.dashlet.empty($dashlet);
1319 // callback based on menu
1320 var id = $(this).attr('id');
1321 var menu = one.f.dashlet;
1323 case menu.nodesLearnt.id:
1324 one.f.switchmanager.nodesLearnt.dashlet($dashlet);
1326 case menu.staticRouteConfig.id:
1327 one.f.switchmanager.staticRouteConfig.dashlet($dashlet);
1329 case menu.subnetGatewayConfig.id:
1330 one.f.switchmanager.subnetGatewayConfig.dashlet($dashlet);
1332 case menu.spanPortConfig.id:
1333 one.f.switchmanager.spanPortConfig.dashlet($dashlet);
1338 // activate first tab on each dashlet
1339 $('.dash .nav').each(function(index, value) {
1340 $($(value).find('li')[0]).find('a').click();