+
+ });
+ },
+ body: function(nodes, nodeports) {
+ var $form = $(document.createElement('form'));
+ var $fieldset = $(document.createElement('fieldset'));
+ // node
+ var $label = one.lib.form.label("Node");
+ var $select = one.lib.form.select.create(nodes);
+ one.lib.form.select.prepend($select, { '' : 'Please Select a Node' });
+ $select.val($select.find("option:first").val());
+ $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.nodes);
+
+ // bind onchange
+ $select.change(function() {
+ // retrieve port value
+ var nodeId = $(this).find('option:selected').attr('value');
+ one.f.switchmanager.spanPortConfig.registry['currentNode'] = nodeId;
+ var $ports = $('#'+one.f.switchmanager.spanPortConfig.id.modal.form.port);
+ var ports = one.f.switchmanager.spanPortConfig.registry['nodePorts'][nodeId]
+ var options = {};
+ $(ports).each(function(idx, val) {
+ options[val.internalPortName] = val.portName+' ('+val.portId+')';
+ });
+ one.lib.form.select.inject($ports, options);
+ one.lib.form.select.prepend($ports, {'':'Please Select a Port'});
+ $ports.val($ports.find('option:first').val());
+ });
+
+ $fieldset.append($label).append($select);
+ // input port
+ var $label = one.lib.form.label("Input Port");
+ var $select = one.lib.form.select.create();
+ one.lib.form.select.prepend($select, {'':'None'});
+ $select.attr('id', one.f.switchmanager.spanPortConfig.id.modal.form.port);
+ $select.val($select.find('option:first').val());
+ $fieldset.append($label).append($select);
+
+ // return
+ $form.append($fieldset);
+ return $form;
+ },
+ ajax: {
+ nodes: function(callback) {
+ $.getJSON(one.f.switchmanager.rootUrl + "/nodeports", function(data) {
+ var nodes = {};
+ var nodePorts = {};
+ $(data).each(function(index, node) {
+ nodes[node.nodeId] = node.nodeName;
+ nodePorts[node.nodeId] = node.nodePorts;
+ });
+ one.f.switchmanager.spanPortConfig.registry['nodePorts'] = nodePorts;
+ callback(nodes, nodePorts);
+ });
+ },
+ saveSpanPortConfig: function(requestData, callback) {
+ var resource = {};
+ resource["jsonData"] = JSON.stringify(requestData);
+ $.getJSON(one.f.switchmanager.rootUrl + "/spanPorts/add", resource, function(data) {
+ callback(data);
+ });
+ }
+ },
+ footer : function() {
+ var footer = [];
+ var saveButton = one.lib.dashlet.button.single("Save", one.f.switchmanager.spanPortConfig.id.modal.save, "btn-primary", "");
+ var $saveButton = one.lib.dashlet.button.button(saveButton);
+ footer.push($saveButton);
+ return footer;
+ },
+ removeMultiple: {
+ dialog: function(spanPortsToDelete) {
+ var h3 = 'Remove SPAN Port';
+
+ var footer = one.f.switchmanager.spanPortConfig.modal.removeMultiple.footer();
+ var $body = one.f.switchmanager.spanPortConfig.modal.removeMultiple.body(spanPortsToDelete);
+ var $modal = one.lib.modal.spawn(one.f.switchmanager.spanPortConfig.id.modal.modal, h3, $body, footer);
+
+ // bind close button
+ $('#'+one.f.switchmanager.spanPortConfig.id.modal.cancel, $modal).click(function() {
+ $modal.modal('hide');
+ });
+
+ // bind remove rule button
+ $('#'+one.f.switchmanager.spanPortConfig.id.modal.remove, $modal).click(this, function(e) {
+ var requestData = {};
+ var spanPorts = [];
+ $(spanPortsToDelete).each(function(index, spanPort) {
+ spanPorts.push(JSON.parse(spanPort.spanPortJson));
+ });
+ requestData["spanPortsToDelete"] = JSON.stringify(spanPorts);
+
+ var url = one.f.switchmanager.rootUrl + "/spanPorts/delete";
+ one.f.switchmanager.spanPortConfig.ajax.main(url, requestData, function(response) {
+ $modal.modal('hide');
+ if (response.status == true) {
+ // refresh dashlet by passing dashlet div as param
+ one.lib.alert("Span Port(s) successfully removed");
+ } else {
+ alert(response.message);
+ }
+ one.f.switchmanager.spanPortConfig.dashlet($("#right-bottom .dashlet"));
+ });
+ });
+ $modal.modal();
+ },
+ footer : function() {
+ var footer = [];
+ var remove = one.lib.dashlet.button.single('Remove SPAN Port',one.f.switchmanager.spanPortConfig.id.modal.remove, 'btn-danger', '');
+ var $remove = one.lib.dashlet.button.button(remove);
+ footer.push($remove);
+
+ var cancel = one.lib.dashlet.button.single('Cancel', one.f.switchmanager.spanPortConfig.id.modal.cancel, '', '');
+ var $cancel = one.lib.dashlet.button.button(cancel);
+ footer.push($cancel);
+
+ return footer;
+ },
+ body : function (spanPortToDelete) {
+ var $p = $(document.createElement('p'));
+ var p = 'Remove the following Span Port(s)?';
+ //creata a BS label for each rule and append to list
+
+ $(spanPortToDelete).each(function(index, spanPortItem) {
+ var $span = $(document.createElement('span'));
+ $span.append(this.spanPortNodeName+"-"+this.spanPortPortName);
+ p += '<br/>' + $span[0].outerHTML;
+ });
+ $p.append(p);
+ return $p;
+ }
+ }
+ },
+ // data functions
+ data : {
+ spanPortConfigGrid: function(data) {
+ var source = new StaticDataSource({
+ columns: [
+ {
+ property: 'selector',
+ label: "<input type='checkbox' id='"
+ +one.f.switchmanager.spanPortConfig.id.dashlet.selectAll+"'/>",
+ sortable: false
+ },
+ {
+ property: 'nodeName',
+ label: 'Node',
+ sortable: true
+ },
+ {
+ property: 'spanPortName',
+ label: 'SPAN Port',
+ sortable: true
+ },
+ ],
+ data: data.nodeData,
+ formatter: function(items) {
+ $.each(items, function(index, item) {
+ item["selector"] = '<input type="checkbox" class="spanPortConfig" spanPort=' + encodeURIComponent(item["json"]) + ' spanPortNode="' + item["nodeName"] + '" spanPortPort="' + item["spanPortName"] + '"></input>';
+ });
+ },
+ delay: 0
+ });
+ return source;
+ },
+ devices : function(data) {
+ var result = [];
+ $.each(data.nodeData, function(key, value) {
+ var tr = {};
+ // fill up all the td's
+ var entry = [];
+ var checkbox = document.createElement("input");
+ checkbox.setAttribute("type", "checkbox");
+ checkbox.spanPort = value.json;
+ entry.push(checkbox);
+ entry.push(value["nodeName"]);
+ entry.push(value["spanPort"]);
+ tr.entry = entry;
+ result.push(tr);
+ });
+ return result;
+ }
+ }
+}
+
+one.f.connection = {
+ id : { // one.f.connection.id
+ datagrid : 'one-f-connection-id-datagrid',
+ add : 'one-f-connection-id-add'
+ },
+ dashlet: function($dashlet) {
+ one.lib.dashlet.empty($dashlet);
+ // heading
+ $dashlet.append(one.lib.dashlet.header(one.f.dashlet.connection.name));
+ // add button
+ var add = one.lib.dashlet.button.single('Add Node', one.f.connection.id.add, 'btn-primary', 'btn-mini');
+ var $add = one.lib.dashlet.button.button(add);
+ $add.click(function() {
+ one.f.connection.add.initialize();
+ });
+ $dashlet.append($add);
+ // load table
+ var url = one.f.switchmanager.rootUrl+'/connect/nodes';
+ $.getJSON(url, function(data) {
+ var $gridHTML = one.lib.dashlet.datagrid.init(one.f.connection.id.datagrid, {
+ searchable: true,
+ filterable: false,
+ pagination: true,
+ flexibleRowsPerPage: true
+ }, 'table-striped table-condensed table-cursor');
+ $dashlet.append($gridHTML);
+ var dataSource = one.f.connection.data(data);
+ $('#'+one.f.connection.id.datagrid, $dashlet).datagrid({dataSource:dataSource})
+ .on('loaded', function() {
+ $(this).find('tbody tr').click(function() {
+ var nodeId = $(this).find('.nodeId').text();
+ var nodeType = $(this).find('.nodeType').text();
+ var nodeName = $(this).find('.nodeName').text();
+ one.f.connection.remove.initialize(nodeId, nodeName, nodeType);
+ });
+ });
+ });
+ },
+ data : function(data) {
+ var source = new StaticDataSource({
+ columns: [
+ {
+ property: 'nodeName',
+ label: 'Node',
+ sortable: true
+ }
+ ],
+ data: data,
+ formatter: function(items) {
+ $.each(items, function(index, item) {
+ var $nodeId = $(document.createElement('span'));
+ $nodeId.css('display', 'none');
+ var $nodeType = $nodeId.clone();
+ var $nodeName = $nodeId.clone();
+ $nodeId.append(item.nodeId).addClass('nodeId');
+ $nodeType.append(item.nodeType).addClass('nodeType');
+ $nodeName.append(item.nodeName).addClass('nodeName');
+ item.nodeName += $nodeId[0].outerHTML+$nodeType[0].outerHTML+$nodeName[0].outerHTML;
+ });
+ },
+ delay: 0
+ });
+ return source;
+ },
+ add : {
+ id : { // one.f.connection.add.id
+ modal : 'one-f-connection-add-id-modal',
+ add : 'one-f-connection-add-id-add',
+ cancel : 'one-f-connection-add-id-cancel',
+ form : {
+ nodeId : 'one-f-connection-add-id-form-nodeId',
+ ipAddress : 'one-f-connection-add-id-form-ipAddress',
+ port : 'one-f-connection-add-id-form-port',
+ nodeType : 'one-f-connection-add-id-form-nodeType'
+ }
+ },
+ initialize : function() {
+ var h3 = 'Add Node';
+ var footer = one.f.connection.add.footer();
+ var $body = one.f.connection.add.body();;
+ var $modal = one.lib.modal.spawn(one.f.connection.add.id.modal, h3, $body, footer);
+ // bind add buton
+ $('#'+one.f.connection.add.id.add, $modal).click(function() {
+ var nodeId = $('#'+one.f.connection.add.id.form.nodeId, $modal).val();
+ if (nodeId === '') {
+ alert('Please enter a node ID');
+ return false;
+ }
+ var resources = {};
+ resources.ipAddress = $('#'+one.f.connection.add.id.form.ipAddress, $modal).val();
+ if (resources.ipAddress === '') {
+ alert('Please enter an IP Address');
+ return false;
+ }
+ resources.port = $('#'+one.f.connection.add.id.form.port, $modal).val();
+ if (resources.port === '') {
+ alert('Please enter a port');
+ return false;
+ }
+ var nodeType = $('#'+one.f.connection.add.id.form.nodeType, $modal).val();
+ if (nodeType !== '') {
+ resources.nodeType = nodeType;