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 save: "one_f_switchmanager_nodesLearnt_id_modal_save",
78 datagrid: "one_f_switchmanager_nodesLearnt_id_modal_datagrid",
80 nodeId: "one_f_switchmanager_nodesLearnt_id_modal_form_nodeid",
81 nodeName : "one_f_switchmanager_nodesLearnt_id_modal_form_nodename",
82 portStatus : "one_f_switchmanager_nodesLearnt_id_modal_form_portstatus",
83 tier: "one_f_switchmanager_nodesLearnt_id_modal_form_tier",
84 operationMode: "one_f_switchmanager_nodesLearnt_id_modal_form_opmode"
88 dashlet: function($dashlet) {
89 var url = one.f.switchmanager.rootUrl + "/nodesLearnt";
90 one.lib.dashlet.empty($dashlet);
91 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.nodesLearnt.name));
93 one.f.switchmanager.nodesLearnt.ajax.main(url, function(content) {
94 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.dashlet.datagrid, {
98 flexibleRowsPerPage: true
99 }, "table-striped table-condensed");
100 $dashlet.append($gridHTML);
101 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.abridged(content);
102 $("#" + one.f.switchmanager.nodesLearnt.id.dashlet.datagrid).datagrid({dataSource: dataSource}).on("loaded", function() {
103 $(this).find("tbody a").click(one.f.switchmanager.nodesLearnt.modal.initialize.updateNode);
108 main : function(url, callback) {
109 $.getJSON(url, function(data) {
116 updateNode: function(evt) {
117 one.f.switchmanager.nodesLearnt.ajax.main(one.f.switchmanager.rootUrl + "/tiers", function(tiers) {
119 var nodeId = decodeURIComponent(evt.target.id);
122 var $body = one.f.switchmanager.nodesLearnt.modal.body.updateNode(nodeId, JSON.parse(decodeURIComponent(evt.target.getAttribute("switchDetails"))), tiers);
123 if (evt.target.getAttribute("privilege") == 'WRITE'){
124 h3 = "Update Node Information";
125 footer = one.f.switchmanager.nodesLearnt.modal.footer.updateNode();
126 } else { //disable node edit
127 $body.find('*').attr('disabled', 'disabled');
128 h3 = 'Node Information';
131 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer);
133 $('#' + one.f.switchmanager.nodesLearnt.id.modal.save, $modal).click(function() {
134 one.f.switchmanager.nodesLearnt.modal.save($modal);
137 // inject body (nodePorts)
138 one.lib.modal.inject.body($modal, $body);
143 var h3 = "Nodes Learnt";
144 var footer = one.f.switchmanager.nodesLearnt.modal.footer.popout();
145 var $modal = one.lib.modal.spawn(one.f.switchmanager.nodesLearnt.id.modal.modal, h3, "", footer);
146 var $body = one.f.switchmanager.nodesLearnt.modal.body.popout($modal);
151 updateNode: function(nodeId, switchDetails, tiers) {
152 var $form = $(document.createElement('form'));
153 var $fieldset = $(document.createElement('fieldset'));
154 // node ID. not editable.
155 var $label = one.lib.form.label("Node ID");
156 var $input = one.lib.form.input("node id");
157 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeId);
158 $input.attr("disabled", true);
159 $input.attr("value", nodeId);
160 $fieldset.append($label).append($input);
162 var $label = one.lib.form.label("Node Name");
163 var $input = one.lib.form.input("Node Name");
164 $input.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.nodeName);
165 if(switchDetails["nodeName"] != null) {
166 $input.attr('value', switchDetails["nodeName"]);
168 $fieldset.append($label).append($input);
170 var $label = one.lib.form.label("Tier");
171 var $select = one.lib.form.select.create(tiers);
172 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.tier);
173 $select.val(switchDetails["tier"]);
174 $fieldset.append($label).append($select);
176 var $label = one.lib.form.label("Operation Mode");
177 var $select = one.lib.form.select.create(
178 ["Allow reactive forwarding", "Proactive forwarding only"]);
179 $select.attr('id', one.f.switchmanager.nodesLearnt.id.modal.form.operationMode);
180 if ((one.main.registry != undefined) && (one.main.registry.container != 'default')) {
181 $select.attr("disabled", true);
183 $select.val(switchDetails["mode"]);
184 $fieldset.append($label).append($select);
185 $form.append($fieldset);
188 popout: function($modal) {
189 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.nodesLearnt.id.modal.datagrid, {
193 flexibleRowsPerPage: true
194 }, "table-striped table-condensed");
195 one.lib.modal.inject.body($modal, $gridHTML);
196 // attach to shown event of modal
197 $modal.on("shown", function() {
198 var url = one.f.switchmanager.rootUrl + "/nodesLearnt";
199 one.f.switchmanager.nodesLearnt.ajax.main(url, function(content) {
200 var dataSource = one.f.switchmanager.nodesLearnt.data.gridDataSource.popout(content);
201 $("#" + one.f.switchmanager.nodesLearnt.id.modal.datagrid).datagrid({
202 dataSource: dataSource,
209 save: function($modal) {
211 result['nodeName'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeName, $modal).val();
212 if(!one.f.switchmanager.validateName(result['nodeName'])) {
213 alert("Node name can contain upto 255 characters");
216 result['nodeId'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.nodeId, $modal).val();
217 result['tier'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.tier, $modal).val();
218 result['operationMode'] = $('#' + one.f.switchmanager.nodesLearnt.id.modal.form.operationMode, $modal).val();
219 one.f.switchmanager.nodesLearnt.modal.ajax(result,
221 if(response.status == true) {
222 $modal.modal('hide');
223 one.topology.update(); // refresh visual topology with new name
224 // TODO: Identify dashlet by inserting a nodesLearnt div
225 // in the dashlet() instead
226 one.f.switchmanager.nodesLearnt.dashlet($("#left-top .dashlet"));
228 alert(response.message);
233 ajax: function(requestData, callback) {
234 $.getJSON(one.f.switchmanager.rootUrl + "/nodesLearnt/update", requestData, function(response) {
239 updateNode: function() {
241 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.nodesLearnt.id.modal.save, "btn-success", "");
242 var $saveButton = one.lib.dashlet.button.button(saveButton);
243 footer.push($saveButton);
248 // TODO: Maybe put a close button in the footer?
256 abridged: function(data) {
257 var source = new StaticDataSource({
260 property: 'nodeName',
276 formatter: function(items) {
277 $.each(items, function (index, item) {
278 var nodeNameEntry = item.nodeName ? item.nodeName : "Click to update";
279 item.nodeName = '<a href="#" id="' + item.nodeId + '" switchDetails=' + encodeURIComponent(JSON.stringify(item)) +
280 ' privilege=' + data.privilege + '>' + nodeNameEntry + '</a>';
288 popout: function(data) {
289 var source = new StaticDataSource({
292 property: 'nodeName',
302 property: 'tierName',
323 abridged : function(data) {
325 $.each(data.nodeData, function(key, value) {
328 var nodeNameEntry = value["nodeName"] ? value["nodeName"] : "Click to update";
330 // TODO: Move anchor tag creation to one.lib.form.
332 aTag = document.createElement("a");
333 aTag.privilege = data.privilege;
334 aTag.addEventListener("click", one.f.switchmanager.nodesLearnt.modal.initialize.updateNode);
335 aTag.addEventListener("mouseover", function(evt) {
336 evt.target.style.cursor = "pointer";
338 aTag.setAttribute("id", encodeURIComponent(value["nodeId"]));
339 aTag.switchDetails = value;
340 aTag.innerHTML = nodeNameEntry;
342 entry.push(value["nodeId"]);
343 entry.push(value["ports"]);
349 popout : function(data) {
351 $.each(data.nodeData, function(key, value) {
353 // fill up all the td's
355 var nodenameentry = value["nodeName"] ? value["nodeName"] : "No name provided";
356 entry.push(nodenameentry);
357 entry.push(value["nodeId"]);
358 entry.push(value["tierName"]);
359 entry.push(value["mac"]);
360 entry.push(value["ports"]);
369 one.f.switchmanager.subnetGatewayConfig = {
372 addIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addIP",
373 addPorts: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_addPorts",
374 removeIPAddress: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_removeIP",
375 datagrid: "one_f_switchmanager_subnetGatewayConfig_id_dashlet_datagrid"
378 modal: "one_f_switchmanager_subnetGatewayConfig_id_modal_modal",
379 save: "one_f_switchmanager_subnetGatewayConfig_id_modal_save",
381 name : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayname",
382 gatewayIPAddress : "one_f_switchmanager_subnetGatewayConfig_id_modal_form_gatewayipaddress",
383 nodeId: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_nodeid",
384 ports: "one_f_switchmanager_subnetGatewayConfig_id_modal_form_ports"
389 dashlet: function($dashlet) {
390 one.lib.dashlet.empty($dashlet);
391 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.subnetGatewayConfig.name));
392 // Add gateway IP Address button
393 var url = one.f.switchmanager.rootUrl + "/subnets";
394 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, {}, function(content) {
396 if (content.privilege === 'WRITE') {
397 var button = one.lib.dashlet.button.single("Add Gateway IP Address",
398 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addIPAddress, "btn-primary", "btn-mini");
399 var $button = one.lib.dashlet.button.button(button);
400 $button.click(function() {
401 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.gateway();
404 $dashlet.append($button);
406 // Delete gateway ip address button
407 var button = one.lib.dashlet.button.single("Delete Gateway IP Address(es)",
408 one.f.switchmanager.subnetGatewayConfig.id.dashlet.removeIPAddress, "btn-primary", "btn-mini");
409 var $button = one.lib.dashlet.button.button(button);
410 $button.click(function() {
411 var requestData = {};
412 var gatewaysToDelete = [];
413 var checkedCheckBoxes = $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).find("tbody input:checked")
414 checkedCheckBoxes.each(function(index, value) {
415 gatewaysToDelete.push(checkedCheckBoxes[index].id);
417 if (gatewaysToDelete.length > 0) {
418 requestData["gatewaysToDelete"] = gatewaysToDelete.toString();
419 var url = one.f.switchmanager.rootUrl + "/subnetGateway/delete";
420 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
421 if (response.status == true) {
422 // refresh dashlet by passing dashlet div as param
423 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
425 alert(response.message);
430 $dashlet.append($button);
433 var button = one.lib.dashlet.button.single("Add Ports",
434 one.f.switchmanager.subnetGatewayConfig.id.dashlet.addPorts, "btn-primary", "btn-mini");
435 var $button = one.lib.dashlet.button.button(button);
436 $button.click(function() {
437 var $modal = one.f.switchmanager.subnetGatewayConfig.modal.initialize.ports();
440 $dashlet.append($button);
442 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid, {
446 flexibleRowsPerPage: true
447 }, "table-striped table-condensed");
448 $dashlet.append($gridHTML);
449 var dataSource = one.f.switchmanager.subnetGatewayConfig.data.devicesgrid(content);
450 $("#" + one.f.switchmanager.subnetGatewayConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource});
454 main : function(url, requestData, callback) {
455 $.getJSON(url, requestData, function(data) {
463 gateway: function() {
464 var h3 = "Add Gateway IP Address";
465 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
466 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, "", footer);
468 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
469 one.f.switchmanager.subnetGatewayConfig.modal.save.gateway($modal);
471 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.gateway();
472 one.lib.modal.inject.body($modal, $body);
476 var h3 = "Add Ports";
477 var footer = one.f.switchmanager.subnetGatewayConfig.modal.footer();
478 var $modal = one.lib.modal.spawn(one.f.switchmanager.subnetGatewayConfig.id.modal.modal, h3, "", footer);
480 $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.save, $modal).click(function() {
481 one.f.switchmanager.subnetGatewayConfig.modal.save.ports($modal);
484 // TODO: Change to subnetGateway instead.
485 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
486 var $body = one.f.switchmanager.subnetGatewayConfig.modal.body.ports(nodes, nodeports);
487 one.lib.modal.inject.body($modal, $body);
493 gateway: function($modal) {
495 result['gatewayName'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
496 if(!one.f.switchmanager.validateName(result['gatewayName'])) {
497 alert("Gateway name can contain upto 255 characters");
500 result['gatewayIPAddress'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress, $modal).val();
501 one.f.switchmanager.subnetGatewayConfig.modal.ajax.gateway(result,
503 if(response.status == true) {
504 $modal.modal('hide');
505 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
507 alert(response.message);
511 ports: function($modal) {
513 var gatewayRegistryIndex = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.name, $modal).val();
514 result['portsName'] = one.f.switchmanager.subnetGatewayConfig.registry.gateways[gatewayRegistryIndex];
515 result['nodeId'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId, $modal).val();
516 result['ports'] = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports, $modal).val();
517 if(!result['portsName'] || result['portsName'] == "") {
518 alert("No gateway chosen. Cannot add port");
521 if(!result['nodeId'] || result['nodeId'] == "") {
522 alert("Please select a node.");
525 if(!result['ports'] || result['ports'] == "") {
526 alert("Please choose a port.");
529 one.f.switchmanager.subnetGatewayConfig.modal.ajax.ports(result,
531 if(response.status == true) {
532 $modal.modal('hide');
533 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
535 alert(response.message);
541 gateway: function() {
542 var $form = $(document.createElement('form'));
543 var $fieldset = $(document.createElement('fieldset'));
545 var $label = one.lib.form.label("Name");
546 var $input = one.lib.form.input("Name");
547 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
548 $fieldset.append($label).append($input);
550 var $label = one.lib.form.label("Gateway IP Address/Mask");
551 var $input = one.lib.form.input("Gateway IP Address/Mask");
552 $input.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.gatewayIPAddress);
553 $fieldset.append($label).append($input);
555 $form.append($fieldset);
558 ports: function(nodes, nodeports) {
559 var $form = $(document.createElement('form'));
560 var $fieldset = $(document.createElement('fieldset'));
561 // gateways drop down
562 var $label = one.lib.form.label("Gateway Name");
563 var $select = one.lib.form.select.create(one.f.switchmanager.subnetGatewayConfig.registry.gateways);
564 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.name);
565 $select.val($select.find("option:first").val());
566 $fieldset.append($label).append($select);
569 var $label = one.lib.form.label("Node ID");
570 var $select = one.lib.form.select.create(nodes);
571 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.nodeId);
572 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
573 $select.val($select.find("option:first").val());
574 $fieldset.append($label).append($select);
577 $select.change(function() {
578 // retrieve port value
579 var node = $(this).find('option:selected').attr('value');
580 one.f.switchmanager.subnetGatewayConfig.registry['currentNode'] = node;
581 var $ports = $('#' + one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
582 var ports = nodeports[node];
583 one.lib.form.select.inject($ports, ports);
584 one.lib.form.select.prepend($ports, { '' : 'Please Select a Port' });
585 $ports.val($ports.find("option:first").val());
589 var $label = one.lib.form.label("Select Port");
590 var $select = one.lib.form.select.create();
591 $select.attr('id', one.f.switchmanager.subnetGatewayConfig.id.modal.form.ports);
592 $fieldset.append($label).append($select);
594 $form.append($fieldset);
599 gateway: function(requestData, callback) {
600 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/add", requestData, function(data) {
604 ports: function(requestData, callback) {
605 $.getJSON(one.f.switchmanager.rootUrl + "/subnetGateway/ports/add", requestData, function(data) {
610 footer : function() {
612 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.subnetGatewayConfig.id.modal.save, "btn-success", "");
613 var $saveButton = one.lib.dashlet.button.button(saveButton);
614 footer.push($saveButton);
620 devicesgrid: function(data) {
621 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
622 var source = new StaticDataSource({
625 property: 'selector',
636 label: 'Gateway IP Address/Mask',
646 formatter: function(items) {
647 $.each(items, function(index, tableRow) {
648 tableRow["selector"] = '<input type="checkbox" id=' + tableRow["name"] + '></input>';
649 var json = tableRow["json"];
650 var subnetConfigObject = JSON.parse(json);
651 var nodePortHtml = "<div>";
652 $.each(subnetConfigObject.nodePorts, function(index, nodePort) {
653 nodePortHtml += nodePort;
654 nodePortHtml += " ";
655 nodePortHtml += '<a href="#" id=' + encodeURIComponent(nodePort) +
656 ' gatewayName=' + tableRow["name"] +
657 ' onclick="javascript:one.f.switchmanager.subnetGatewayConfig.actions.deleteNodePort(this);">Delete</a>';
658 nodePortHtml += "<br/>";
660 nodePortHtml += "</div>";
661 tableRow["json"] = nodePortHtml;
667 // populate the registry with subnet names
668 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
669 $.each(data.nodeData, function(key, value) {
670 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
674 devices : function(data) {
676 one.f.switchmanager.subnetGatewayConfig.registry.gateways = [];
677 $.each(data.nodeData, function(key, value) {
679 // fill up all the td's
680 var subnetConfigObject = $.parseJSON(value["json"]);
681 var nodePorts = subnetConfigObject.nodePorts;
682 var $nodePortsContainer = $(document.createElement("div"));
684 for(var i = 0; i < nodePorts.length; i++) {
685 var nodePort = nodePorts[i];
686 $nodePortsContainer.append(nodePort + " ");
687 // add delete anchor tag to delete ports
688 var aTag = document.createElement("a");
689 aTag.setAttribute("id", encodeURIComponent(nodePort));
690 aTag.gatewayName = value["name"];
691 aTag.addEventListener("click", function(evt) {
692 var htmlPortAnchor = evt.target;
693 var requestData = {};
694 requestData["gatewayName"] = evt.target.gatewayName;
695 requestData["nodePort"] = decodeURIComponent(evt.target.id);
696 // make ajax call to delete port
697 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
698 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
699 if(response.status == true) {
700 // refresh dashlet by passing dashlet div as param
701 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
703 alert(response.message);
708 aTag.addEventListener("mouseover", function(evt) {
709 evt.target.style.cursor = "pointer";
711 aTag.innerHTML = "Delete";
712 $nodePortsContainer.append(aTag);
713 $nodePortsContainer.append("<br/>");
716 // store gateways in the registry so that they can be used in the add ports popup
717 one.f.switchmanager.subnetGatewayConfig.registry.gateways.push(value["name"]);
719 var checkbox = document.createElement("input");
720 checkbox.setAttribute("type", "checkbox");
721 checkbox.setAttribute("id", value["name"]);
722 entry.push(checkbox);
723 entry.push(value["name"]);
724 entry.push(value["subnet"]);
725 entry.push($nodePortsContainer);
733 deleteNodePort: function(htmlPortAnchor) {
734 var requestData = {};
735 requestData["gatewayName"] = htmlPortAnchor.getAttribute("gatewayName");
736 requestData["nodePort"] = decodeURIComponent(htmlPortAnchor.id);
737 // make ajax call to delete port
738 var url = one.f.switchmanager.rootUrl + "/subnetGateway/ports/delete";
739 one.f.switchmanager.subnetGatewayConfig.ajax.main(url, requestData, function(response) {
740 if(response.status == true) {
741 // refresh dashlet by passing dashlet div as param
742 one.f.switchmanager.subnetGatewayConfig.dashlet($("#right-bottom .dashlet"));
744 alert(response.message);
751 one.f.switchmanager.staticRouteConfig = {
754 add: "one_f_switchmanager_staticRouteConfig_id_dashlet_add",
755 remove: "one_f_switchmanager_staticRouteConfig_id_dashlet_remove",
756 datagrid: "one_f_switchmanager_staticRouteConfig_id_dashlet_datagrid"
759 modal: "one_f_switchmanager_staticRouteConfig_id_modal_modal",
760 save: "one_f_switchmanager_staticRouteConfig_id_modal_save",
762 routeName : "one_f_switchmanager_staticRouteConfig_id_modal_form_routename",
763 staticRoute : "one_f_switchmanager_staticRouteConfig_id_modal_form_staticroute",
764 nextHop : "one_f_switchmanager_staticRouteConfig_id_modal_form_nexthop",
768 dashlet: function($dashlet) {
769 one.lib.dashlet.empty($dashlet);
770 var url = one.f.switchmanager.rootUrl + "/staticRoutes";
771 one.f.switchmanager.staticRouteConfig.ajax.main(url, {}, function(content) {
773 if (content.privilege === 'WRITE') {
774 // Add static route button
775 var button = one.lib.dashlet.button.single("Add Static Route", one.f.switchmanager.staticRouteConfig.id.dashlet.add, "btn-primary", "btn-mini");
776 var $button = one.lib.dashlet.button.button(button);
777 $button.click(function() {
778 var $modal = one.f.switchmanager.staticRouteConfig.modal.initialize();
781 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.staticRouteConfig.name));
782 $dashlet.append($button);
784 // Delete static route button
785 var button = one.lib.dashlet.button.single("Delete Static Route(s)", one.f.switchmanager.staticRouteConfig.id.dashlet.remove, "btn-primary", "btn-mini");
786 var $button = one.lib.dashlet.button.button(button);
787 $button.click(function() {
788 var requestData = {};
789 var routesToDelete = [];
790 //var checkedCheckBoxes = $("input:checked", $(this).closest(".dashlet").find("table"));
791 var checkedCheckBoxes = $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).find("tbody input:checked");
792 checkedCheckBoxes.each(function(index, value) {
793 routesToDelete.push(checkedCheckBoxes[index].id);
795 if (routesToDelete.length > 0) {
796 requestData["routesToDelete"] = routesToDelete.toString();
797 var url = one.f.switchmanager.rootUrl + "/staticRoute/delete";
798 one.f.switchmanager.staticRouteConfig.ajax.main(url, requestData, function(response) {
799 if (response.status == true) {
800 // refresh dashlet by passing dashlet div as param
801 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
803 alert(response.message);
808 $dashlet.append($button);
810 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid, {
814 flexibleRowsPerPage: true
815 }, "table-striped table-condensed");
816 $dashlet.append($gridHTML);
817 var dataSource = one.f.switchmanager.staticRouteConfig.data.staticRouteConfigGrid(content);
818 $("#" + one.f.switchmanager.staticRouteConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource});
823 main : function(url, requestData, callback) {
824 $.getJSON(url, requestData, function(data) {
831 initialize: function() {
832 var h3 = "Add Static Route";
833 var footer = one.f.switchmanager.staticRouteConfig.modal.footer();
834 var $modal = one.lib.modal.spawn(one.f.switchmanager.staticRouteConfig.id.modal.modal, h3, "", footer);
836 $('#' + one.f.switchmanager.staticRouteConfig.id.modal.save, $modal).click(function() {
837 one.f.switchmanager.staticRouteConfig.modal.save($modal);
839 var $body = one.f.switchmanager.staticRouteConfig.modal.body();
840 one.lib.modal.inject.body($modal, $body);
843 save: function($modal) {
845 result['routeName'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.routeName, $modal).val();
846 result['staticRoute'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute, $modal).val();
847 result['nextHop'] = $('#' + one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop, $modal).val();
848 one.f.switchmanager.staticRouteConfig.modal.ajax.staticRouteConfig(result, function(response) {
849 if(response.status == true) {
850 $modal.modal('hide');
851 // refresh dashlet by passing dashlet div as param
852 one.f.switchmanager.staticRouteConfig.dashlet($("#left-bottom .dashlet"));
854 // TODO: Show error message in a error message label instead.
855 alert(response.message);
860 var $form = $(document.createElement('form'));
861 var $fieldset = $(document.createElement('fieldset'));
863 var $label = one.lib.form.label("Name");
864 var $input = one.lib.form.input("Name");
865 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.routeName);
866 $fieldset.append($label).append($input);
867 // static route IP Mask
868 var $label = one.lib.form.label("Static Route");
869 var $input = one.lib.form.input("Static Route");
870 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.staticRoute);
871 $fieldset.append($label).append($input);
872 // static route IP Mask
873 var $label = one.lib.form.label("Next Hop");
874 var $input = one.lib.form.input("Next Hop");
875 $input.attr('id', one.f.switchmanager.staticRouteConfig.id.modal.form.nextHop);
876 $fieldset.append($label).append($input);
878 $form.append($fieldset);
882 staticRouteConfig: function(requestData, callback) {
883 $.getJSON(one.f.switchmanager.rootUrl + "/staticRoute/add", requestData, function(data) {
891 footer : function() {
893 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.staticRouteConfig.id.modal.save, "btn-success", "");
894 var $saveButton = one.lib.dashlet.button.button(saveButton);
895 footer.push($saveButton);
901 staticRouteConfigGrid: function(data) {
902 var source = new StaticDataSource({
905 property: 'selector',
915 property: 'staticRoute',
916 label: 'Static Route',
921 label: 'Next Hop Address',
926 formatter: function(items) {
927 $.each(items, function(index, item) {
928 item["selector"] = '<input type="checkbox" id=' + item["name"] + '></input>';
936 staticRouteConfig : function(data) {
938 $.each(data.nodeData, function(key, value) {
940 // fill up all the td's
942 var checkbox = document.createElement("input");
943 checkbox.setAttribute("type", "checkbox");
944 checkbox.setAttribute("id", value["name"]);
945 entry.push(checkbox);
946 entry.push(value["name"]);
947 entry.push(value["staticRoute"]);
948 entry.push(value["nextHop"]);
957 one.f.switchmanager.spanPortConfig = {
960 add: "one_f_switchmanager_spanPortConfig_id_dashlet_add",
961 remove: "one_f_switchmanager_spanPortConfig_id_dashlet_remove",
962 datagrid: "one_f_switchmanager_spanPortConfig_id_dashlet_datagrid"
965 modal: "one_f_switchmanager_spanPortConfig_id_modal_modal",
966 save: "one_f_switchmanager_spanPortConfig_id_modal_save",
968 name : "one_f_switchmanager_spanPortConfig_id_modal_form_name",
969 nodes : "one_f_switchmanager_spanPortConfig_id_modal_form_nodes",
970 port : "one_f_switchmanager_spanPortConfig_id_modal_form_port",
974 dashlet: function($dashlet) {
975 one.lib.dashlet.empty($dashlet);
977 //populate table in dashlet
978 var url = one.f.switchmanager.rootUrl + "/spanPorts";
979 one.f.switchmanager.spanPortConfig.ajax.main(url, {}, function(content) {
981 if (content.privilege === 'WRITE') {
983 // Add span port button
984 var button = one.lib.dashlet.button.single("Add Span Port", one.f.switchmanager.spanPortConfig.id.dashlet.add, "btn-primary", "btn-mini");
985 var $button = one.lib.dashlet.button.button(button);
987 $button.click(function() {
988 var $modal = one.f.switchmanager.spanPortConfig.modal.initialize();
991 $dashlet.append(one.lib.dashlet.header(one.f.dashlet.spanPortConfig.name));
992 $dashlet.append($button);
994 // Delete span port button
995 var button = one.lib.dashlet.button.single("Delete SPAN Port(s)", one.f.switchmanager.spanPortConfig.id.dashlet.remove, "btn-primary", "btn-mini");
996 var $button = one.lib.dashlet.button.button(button);
997 $button.click(function() {
999 var checkedCheckBoxes = $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).find("tbody input:checked");
1000 if (checkedCheckBoxes.length > 0) {
1001 var spanPortsToDelete = "";
1002 checkedCheckBoxes.each(function(index, value) {
1003 spanPortsToDelete += decodeURIComponent(checkedCheckBoxes[index].getAttribute("spanPort")) + "###";
1006 var requestData = {};
1007 requestData["spanPortsToDelete"] = spanPortsToDelete;
1008 var url = one.f.switchmanager.rootUrl + "/spanPorts/delete";
1009 one.f.switchmanager.spanPortConfig.ajax.main(url, requestData, function(response) {
1010 if (response.status == true) {
1011 // refresh dashlet by passing dashlet div as param
1012 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1014 alert(response.message);
1019 $dashlet.append($button);
1021 var $gridHTML = one.lib.dashlet.datagrid.init(one.f.switchmanager.spanPortConfig.id.dashlet.datagrid, {
1025 flexibleRowsPerPage: true
1026 }, "table-striped table-condensed");
1027 $dashlet.append($gridHTML);
1028 var dataSource = one.f.switchmanager.spanPortConfig.data.spanPortConfigGrid(content);
1029 $("#" + one.f.switchmanager.spanPortConfig.id.dashlet.datagrid).datagrid({dataSource: dataSource});
1035 // device ajax calls
1037 main : function(url, requestData, callback) {
1038 $.getJSON(url, requestData, function(data) {
1045 initialize: function() {
1046 var h3 = "Add SPAN Port";
1047 var footer = one.f.switchmanager.spanPortConfig.modal.footer();
1048 var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, "", footer);
1050 $('#' + one.f.switchmanager.spanPortConfig.id.modal.save, $modal).click(function() {
1051 one.f.switchmanager.spanPortConfig.modal.save($modal);
1054 one.f.switchmanager.spanPortConfig.modal.ajax.nodes(function(nodes, nodeports) {
1055 var $body = one.f.switchmanager.spanPortConfig.modal.body(nodes, nodeports);
1056 one.lib.modal.inject.body($modal, $body);
1060 save: function($modal) {
1062 result['nodeId'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.nodes, $modal).val();
1063 result['spanPort'] = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.port, $modal).val();
1064 one.f.switchmanager.spanPortConfig.modal.ajax.saveSpanPortConfig(result,
1065 function(response) {
1066 if(response.status == true) {
1067 $modal.modal('hide');
1068 one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
1070 alert(response.message);
1075 body: function(nodes, nodeports) {
1076 var $form = $(document.createElement('form'));
1077 var $fieldset = $(document.createElement('fieldset'));
1079 var $label = one.lib.form.label("Node");
1080 var $select = one.lib.form.select.create(nodes);
1081 one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
1082 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.nodes);
1085 $select.change(function() {
1086 // retrieve port value
1087 var node = $(this).find('option:selected').attr('value');
1088 one.f.switchmanager.spanPortConfig.registry['currentNode'] = node;
1089 var $ports = $('#' + one.f.switchmanager.spanPortConfig.id.modal.form.port);
1090 var ports = nodeports[node];
1091 one.lib.form.select.inject($ports, ports);
1094 $fieldset.append($label).append($select);
1096 var $label = one.lib.form.label("Input Port");
1097 var $select = one.lib.form.select.create();
1098 $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.port);
1099 $fieldset.append($label).append($select);
1102 $form.append($fieldset);
1106 nodes: function(callback) {
1107 $.getJSON(one.f.switchmanager.rootUrl + "/nodeports", function(data) {
1108 var nodes = one.f.switchmanager.spanPortConfig.modal.data.nodes(data);
1109 var nodeports = data;
1110 one.f.switchmanager.spanPortConfig.registry['nodeports'] = nodeports;
1111 callback(nodes, nodeports);
1114 saveSpanPortConfig: function(requestData, callback) {
1116 resource["jsonData"] = JSON.stringify(requestData);
1117 $.getJSON(one.f.switchmanager.rootUrl + "/spanPorts/add", resource, function(data) {
1123 nodes : function(data) {
1125 $.each(data, function(key, value) {
1131 footer : function() {
1133 var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.spanPortConfig.id.modal.save, "btn-success", "");
1134 var $saveButton = one.lib.dashlet.button.button(saveButton);
1135 footer.push($saveButton);
1141 spanPortConfigGrid: function(data) {
1142 var source = new StaticDataSource({
1145 property: 'selector',
1150 property: 'nodeName',
1155 property: 'spanPort',
1160 data: data.nodeData,
1161 formatter: function(items) {
1162 $.each(items, function(index, item) {
1163 item["selector"] = '<input type="checkbox" spanPort=' + encodeURIComponent(item["json"]) + '></input>';
1170 devices : function(data) {
1172 $.each(data.nodeData, function(key, value) {
1174 // fill up all the td's
1176 var checkbox = document.createElement("input");
1177 checkbox.setAttribute("type", "checkbox");
1178 checkbox.spanPort = value.json;
1179 entry.push(checkbox);
1180 entry.push(value["nodeName"]);
1181 entry.push(value["spanPort"]);
1191 // populate nav tabs
1192 $(one.f.menu.left.top).each(function(index, value) {
1193 var $nav = $(".nav", "#left-top");
1194 one.main.page.dashlet($nav, value);
1197 $(one.f.menu.left.bottom).each(function(index, value) {
1198 var $nav = $(".nav", "#left-bottom");
1199 one.main.page.dashlet($nav, value);
1202 $(one.f.menu.right.bottom).each(function(index, value) {
1203 var $nav = $(".nav", "#right-bottom");
1204 one.main.page.dashlet($nav, value);
1207 one.f.addPopOut = function() {
1208 $img1 = $(document.createElement("img"));
1209 $img1.attr("src", "/img/Expand16T.png");
1210 $img1.attr("style", "float: right;");
1211 $img1.hover(function() {
1212 $img1.css("cursor", "pointer");
1214 $img1.click(function() {
1215 var $modal = one.f.switchmanager.nodesLearnt.modal.initialize.popout();
1217 'margin-left': '-45%',
1218 'margin-top': '-3%',
1219 'width':$(document).width() * 0.8,
1220 'height':$(document).height() * 0.9
1222 $(".modal-body", $modal).css({
1223 "max-height": $(document).height() * 0.75,
1227 $dash1 = $($("#left-top .nav")[0]);
1228 $dash1.append($img1);
1233 $('.dash .nav a', '#main').click(function() {
1235 var $li = $(this).parent();
1236 var $ul = $li.parent();
1237 one.lib.nav.unfocus($ul);
1238 $li.addClass('active');
1239 // clear respective dashlet
1240 var $dashlet = $ul.parent().find('.dashlet');
1241 one.lib.dashlet.empty($dashlet);
1243 // callback based on menu
1244 var id = $(this).attr('id');
1245 var menu = one.f.dashlet;
1247 case menu.nodesLearnt.id:
1248 one.f.switchmanager.nodesLearnt.dashlet($dashlet);
1250 case menu.staticRouteConfig.id:
1251 one.f.switchmanager.staticRouteConfig.dashlet($dashlet);
1253 case menu.subnetGatewayConfig.id:
1254 one.f.switchmanager.subnetGatewayConfig.dashlet($dashlet);
1256 case menu.spanPortConfig.id:
1257 one.f.switchmanager.spanPortConfig.dashlet($dashlet);
1262 // activate first tab on each dashlet
1263 $('.dash .nav').each(function(index, value) {
1264 $($(value).find('li')[0]).find('a').click();