From 03b448f806cc561f62941e231f3de9e38e8b9a4e Mon Sep 17 00:00:00 2001 From: Daniel Malachovsky Date: Fri, 5 Feb 2016 13:26:48 +0100 Subject: Splitting sources - splitted vpp.controller.js and vpp.services.js into smaller files to avoid blocking and problems during merging Change-Id: I379dc1e5154c6f685fb6a976db239b620e58fc6e Signed-off-by: Daniel Malachovsky --- .../vpp/controllers/bdm.bridgedomain.controller.js | 18 + .../resources/vpp/controllers/bdm.controller.js | 127 ++++++ .../vpp/controllers/bdm.interface.controller.js | 17 + .../vpp/controllers/bdm.vpp.controller.js | 17 + .../vpp/controllers/inventory.controller.js | 281 +++++++++++++ .../resources/vpp/controllers/vpp.controller.js | 48 +++ .../vpp/services/bdm.bridgedomain.service.js | 14 + .../vpp/services/bdm.interface.service.js | 14 + .../src/main/resources/vpp/services/bdm.service.js | 14 + .../main/resources/vpp/services/bdm.vpp.service.js | 14 + .../resources/vpp/services/inventory.service.js | 142 +++++++ .../main/resources/vpp/services/vpp.services.js | 164 ++++++++ .../src/main/resources/vpp/vpp.controller.js | 449 --------------------- .../module/src/main/resources/vpp/vpp.module.js | 25 +- .../module/src/main/resources/vpp/vpp.services.js | 260 ------------ 15 files changed, 871 insertions(+), 733 deletions(-) create mode 100644 vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js create mode 100644 vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js create mode 100644 vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js create mode 100644 vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js create mode 100644 vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js create mode 100644 vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js create mode 100644 vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js create mode 100644 vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js create mode 100644 vbd/gui/module/src/main/resources/vpp/services/bdm.service.js create mode 100644 vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js create mode 100644 vbd/gui/module/src/main/resources/vpp/services/inventory.service.js create mode 100644 vbd/gui/module/src/main/resources/vpp/services/vpp.services.js delete mode 100644 vbd/gui/module/src/main/resources/vpp/vpp.controller.js delete mode 100644 vbd/gui/module/src/main/resources/vpp/vpp.services.js (limited to 'vbd/gui/module/src') diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js new file mode 100644 index 000000000..ea65afbc9 --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + + +define(['app/vpp/vpp.module'], function(vpp) { + + vpp.register.controller('bdmBridgeDomainCtrl', ['$scope', '$rootScope', '$timeout' ,'dataService', 'toastService', '$mdSidenav', '$mdDialog', + function ($scope, $rootScope, $timeout ,dataService, toastService, $mdSidenav, $mdDialog) { + + }]); + + +}); diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js new file mode 100644 index 000000000..02c9879a8 --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +define(['app/vpp/vpp.module'], function(vpp) { + vpp.register.controller('bdmCtrl', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', function ($scope, $rootScope, filter, dataService, toastService) { + + }]); + + + vpp.register.controller('TableController', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', function ($scope, $rootScope, filter, dataService, toastService) { + var vm = this; + vm.rowCollection = dataService.tableContent; + vm.displayedCollection = [].concat(vm.rowCollection); + vm.updateAssignment = function(receivedInterface) { + var interf = _.find(dataService.interfaces, {name: receivedInterface.name, 'phys-address': receivedInterface['phys-address']}); + angular.copy(receivedInterface, interf); + if (interf.assigned){ + interf['v3po:l2']['bridge-domain'] = dataService.selectedBd.name; + } else { + interf['v3po:l2']['bridge-domain'] = ''; + } + dataService.injectBridgeDomainsTopoElements(); + dataService.buildTableContent(); + var previouslyChangedInterface = _.find(dataService.changedInterfaces, {name: interf.name, 'phys-address': interf['phys-address']}); + if (!previouslyChangedInterface) { + dataService.changedInterfaces.push(interf); + } + console.log(dataService.changedInterfaces); + }; + }]); + + vpp.register.controller('BridgeDomainsController', function(dataService, $location, $mdDialog, toastService) { + var vm = this; + vm.dataService = dataService; + + dataService.nextApp.container(document.getElementById('bridge-domains-next-app')); + dataService.bridgeDomainsTopo.attach(dataService.nextApp); + + window.addEventListener('resize', function () { + if ($location.path() === '/bridgedomains') { + dataService.topo.adaptToContainer(); + } + }); + + vm.bridgedomains = dataService.bridgedomains; + vm.selectedBd = dataService.selectedBd; + + dataService.bridgeDomainsTopo.on('clickNode',function(topo,node) { + console.log(node); + }); + + vm.bdChanged = function() { + dataService.injectBridgeDomainsTopoElements(); + dataService.buildTableContent(); + }; + + vm.addBd = function() { + //show dialog + $mdDialog.show({ + controller: function() { + var vm = this; + vm.bd = {}; + vm.waiting = false; + + //function called when the cancel button ( 'x' in the top right) is clicked + vm.close = function() { + $mdDialog.cancel(); + }; + + vm.isDone = function(status) { + vm.waiting = false; + if (status === 'success') { + dataService.bridgedomains.push(vm.bd); + dataService.selectedBd.name = vm.bd.name; + dataService.injectBridgeDomainsTopoElements(); + dataService.buildTableContent(); + vm.close(); + } + }; + + //function called when the update button is clicked + vm.updateConfig = function() { + vm.waiting = true; + //send a POST with the entered content in the form field + + }; + }, + controllerAs: 'NewBdDialogCtrl', + templateUrl: 'templates/new-bd-dialog.html', + parent: angular.element(document.body), + clickOutsideToClose:false + }) + }; + + vm.deploy = function() { + + }; + + vm.removeBd = function() { + if(vm.selectedBd.name) { + var successCallback = function(success) { + if (success) { + console.log(vm.bridgedomains); + _.remove(vm.bridgedomains, { + name: vm.selectedBd.name + }); + toastService.showToast('Bridge Domain Removed!'); + vm.selectedBd.name = ''; + dataService.clearInjectedInterfacesInBridgeDomainTopo(); + dataService.injectBdIntoBridgeDomainsTopo(); + dataService.tableContent.length = 0; + } else { + toastService.showToast('Error removing Bridge Domain!'); + + } + }; + + //... removeBdFromOdl(vm.selectedBd.name, successCallback); + } + }; + }); +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js new file mode 100644 index 000000000..5aa68a9dc --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +define(['app/vpp/vpp.module'], function(vpp) { + + vpp.register.controller('bdmInterfaceCtrl', ['$scope', '$rootScope', '$timeout' ,'dataService', 'toastService', '$mdSidenav', '$mdDialog', + function ($scope, $rootScope, $timeout ,dataService, toastService, $mdSidenav, $mdDialog) { + + }]); + + +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js new file mode 100644 index 000000000..5ef5c3c6a --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +define(['app/vpp/vpp.module'], function(vpp) { + + vpp.register.controller('bdmVppCtrl', ['$scope', '$rootScope', '$timeout' ,'dataService', 'toastService', '$mdSidenav', '$mdDialog', + function ($scope, $rootScope, $timeout ,dataService, toastService, $mdSidenav, $mdDialog) { + + }]); + + +}); diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js new file mode 100644 index 000000000..f447bd0fb --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +define(['app/vpp/vpp.module'], function(vpp) { + + vpp.register.controller('InventoryTableController', ['$scope', '$rootScope','$filter', 'toastService', 'VppService', '$mdDialog', 'dataService', 'VppInterfaceService', + function($scope, $rootScope, filter, toastService, VppService, $mdDialog, dataService, VppInterfaceService) { + + $scope.getVppList = function() { + $scope.initVppList(); + + VppService.getVppList( + // success callback + function(data) { + $scope.vppList = data; + $scope.$broadcast('RELOAD_VPP_TABLE'); + }, + // error callback + function(res) { + console.warn("Can't load VPPs from controller. Nothing is mounted, or other error", res); + } + ); + }; + + $scope.initVppList = function() { + $scope.vppList = []; + }; + + $scope.viewTopology = function(vpp) { + $mdDialog.show({ + controller: function() { + var vm = this; + + $scope.topo = new nx.graphic.Topology({ + height: 350, + width: 500, + scalable: true, + theme:'blue', + enableGradualScaling:true, + nodeConfig: { + color: '#414040', + label: 'model.label', + scale: 'model.scale', + iconType: function(vertex) { + var type = vertex.get().type; + if (type === 'bd') { + return 'bd' + } else if (type === 'vpp') { + return 'switch' + } else { + return 'interf'; + } + } + }, + linkConfig: { + label: 'model.label', + linkType: 'parallel', + color: function(link) { + if (link.getData().type === 'tunnel') { + return '#00FF00'; + } else { + return '#414040'; + } + }, + width: function(link) { + if (link.getData().type === 'tunnel') { + return 5; + } + } + }, + showIcon: true, + dataProcessor: 'force', + autoLayout: true, + enableSmartNode: false, + tooltipManagerConfig: { + nodeTooltipContentClass: 'TooltipNode', + linkTooltipContentClass: 'TooltipLink' + } + }); + $scope.app = new nx.ui.Application; + + vm.vpp = vpp; + vm.vpp.type = 'vpp'; + vm.vpp.label = vm.vpp.name; + + var nodes = [].concat(vm.vpp); + var links = []; + + _.forEach(vm.vpp.interfaces, function(interf, index){ + interf.label = interf.name; + interf.scale = 0.5; + nodes.push(interf); + links.push({source: 0, target: index + 1}); + }); + + console.log(vpp); + console.log(nodes); + console.log(links); + + $scope.topo.data({ + nodes: nodes, + links: links + }); + + this.close = function() { + $mdDialog.cancel(); + }; + + }, + onComplete: function() { + console.log(document.getElementById('next-vpp-topo')); + $scope.app.container(document.getElementById('next-vpp-topo')); + $scope.topo.attach($scope.app); + + }, + templateUrl: $scope.view_path + 'vpp-topo.html', + controllerAs: 'VppTopoCtrl', + parent: angular.element(document.body), + clickOutsideToClose:true + }) + }; + + $scope.addVppShowForm = function() { + $mdDialog.show({ + controller: function() { + var vm = this; + vm.vpp = {}; + //function called when the cancel button ( 'x' in the top right) is clicked + vm.close = function() { + $mdDialog.cancel(); + }; + + vm.finished = function(successful) { + if (successful) { + vm.close(); + vm.waiting = false; + toastService.showToast('New VPP added!'); + $scope.getVppList(); + } else { + vm.waiting = false; + toastService.showToast('Error adding new VPP'); + } + }; + + //function called when the update button is clicked + vm.updateConfig = function() { + vm.waiting = true; + VppService.mountVpp(vm.vpp.name, vm.vpp.ip, vm.vpp.port, vm.vpp.un, vm.vpp.pw, vm.finished); + }; + }, + controllerAs: 'NewVppDialogCtrl', + templateUrl: $scope.view_path + 'new-vpp-dialog.html', + parent: angular.element(document.body), + clickOutsideToClose:true + }) + }; + + $scope.editVppShowForm = function(vppObject) { + + $mdDialog.show({ + controller: function() { + var vm = this; + + vm.vpp = { + name: vppObject.name, + status: vppObject.status, + ip: vppObject.ipAddress, + port: vppObject.port + }; + + //function called when the cancel button ( 'x' in the top right) is clicked + vm.close = function() { + $mdDialog.cancel(); + }; + + vm.finishedUpdating = function(successful) { + if (successful) { + vm.close(); + vm.waiting = false; + toastService.showToast('VPP configuration updated!'); + $scope.getVppList(); + } else { + vm.waiting = false; + toastService.showToast('Error configuring VPP'); + } + }; + + vm.finishedDeleting = function(successful) { + if (successful) { + VppService.mountVpp(vm.vpp.name, vm.vpp.ip, vm.vpp.port, vm.vpp.un, vm.vpp.pw, vm.finishedUpdating); + $scope.getVppList(); + } else { + vm.waiting = false; + toastService.showToast('Error configuring VPP'); + } + }; + + //function called when the update button is clicked + vm.updateConfig = function() { + //VppService.editVpp(vm.vpp.name, vm.vpp.ip, vm.vpp.port, vm.vpp.un, vm.vpp.pw, vm.finishedUpdating); + VppService.deleteVpp(vm.vpp, vm.finishedDeleting); + }; + }, + controllerAs: 'ConfigVppDialogCtrl', + templateUrl: $scope.view_path + 'config-vpp-dialog.html', + parent: angular.element(document.body), + clickOutsideToClose:true + }); + }; + + $scope.deleteVpp = function(vppObject) { + + var finished = function(successful) { + if (successful) { + toastService.showToast('Removed VPP!'); + $scope.getVppList(); + } else { + toastService.showToast('Error removing VPP'); + } + }; + + VppService.deleteVpp(vppObject, finished); + }; + + $scope.getVppList(); + }]); + + vpp.register.controller('InventoryTableDefinitonController', ['$scope', function($scope) { + + var actionCellTemplate = + 'View Topology' + + 'Edit' + + 'Delete'; + + $scope.gridOptions = { + + expandableRowTemplate: $scope.view_path + 'inventory-table-interfaces-subgrid.tpl.html', + //subGridVariable will be available in subGrid scope + expandableRowScope: { + subGridVariable: 'subGridScopeVariable' + } + + } + + $scope.gridOptions.columnDefs = [ + { name: 'name' }, + { name: 'ipAddress'}, + { name: 'port'}, + { name: 'status'}, + { name:' ',cellTemplate: actionCellTemplate} + ]; + + + //$scope.gridOptions.data = $scope.vppList; + + $scope.gridOptions.onRegisterApi = function(gridApi){ + $scope.gridApi = gridApi; + }; + + $scope.$on('RELOAD_VPP_TABLE', function(event) { + $scope.gridOptions.data = $scope.vppList.map(function(item) { + item.subGridOptions = { + columnDefs: [ + { name:"name" }, + { name:"phys-address"}, + { name:"oper-status"} + ], + data: item.interfaces + }; + + return item; + }); + }); + + }]); +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js new file mode 100644 index 000000000..6b2dde830 --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +var modules = [ + // module + 'app/vpp/vpp.module', + // services + 'app/vpp/services/vpp.services', + 'app/vpp/services/inventory.service', + 'app/vpp/services/bdm.service', + 'app/vpp/services/bdm.bridgedomain.service', + 'app/vpp/services/bdm.interface.service', + 'app/vpp/services/bdm.vpp.service', + //controllers + 'app/vpp/controllers/inventory.controller', + 'app/vpp/controllers/bdm.controller', + 'app/vpp/controllers/bdm.bridgedomain.controller', + 'app/vpp/controllers/bdm.vpp.controller', + 'app/vpp/controllers/bdm.interface.controller' +]; + + +define(modules, function(vpp) { + + vpp.controller('vppCtrl', ['$scope', '$rootScope', '$timeout', 'toastService', '$mdSidenav', '$mdDialog', + function ($scope, $rootScope, $timeout, toastService, $mdSidenav, $mdDialog) { + + $rootScope['section_logo'] = 'src/app/vpp/assets/images/vpp.gif'; + $scope.view_path = 'src/app/vpp/views/'; + + $scope.mainView = "inventory"; + + $scope.setMainView = function(viewName) { + $scope.mainView = viewName; + }; + + + }]); + + +}); + + diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js new file mode 100644 index 000000000..9316cbff7 --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +define(['app/vpp/vpp.module', 'next'], function(vpp) { + vpp.register.factory('bdmBridgeDomainService', function(VPPRestangular, VPPRestangularXml) { + var s = {}; + + return s; + }); +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js new file mode 100644 index 000000000..9dca2d29d --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +define(['app/vpp/vpp.module', 'next'], function(vpp) { + vpp.register.factory('bdmInterfaceService', function(VPPRestangular, VPPRestangularXml) { + var s = {}; + + return s; + }); +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.service.js new file mode 100644 index 000000000..5d6592787 --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/services/bdm.service.js @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +define(['app/vpp/vpp.module', 'next'], function(vpp) { + vpp.register.factory('bdmService', function(VPPRestangular, VPPRestangularXml) { + var s = {}; + + return s; + }); +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js new file mode 100644 index 000000000..5a23d831c --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +define(['app/vpp/vpp.module', 'next'], function(vpp) { + vpp.register.factory('bdmVppService', function(VPPRestangular, VPPRestangularXml) { + var s = {}; + + return s; + }); +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/services/inventory.service.js b/vbd/gui/module/src/main/resources/vpp/services/inventory.service.js new file mode 100644 index 000000000..a90354fb4 --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/services/inventory.service.js @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +define(['app/vpp/vpp.module', 'next'], function(vpp) { + vpp.register.factory('VppService', function(VPPRestangular, VPPRestangularXml, VppInterfaceService, $q) { + var s = {}; + + var Vpp = function(name, ipAddress, port, username, password, status) { + this.name = name || null; + this.ipAddress = ipAddress || null; + this.port = port || null; + this.username = username || null; + this.password = password || null; + this.status = status || null; + this.interfaces = []; + }; + + s.createObj = function(name, ipAddress, port, username, password, status) { + return new Vpp(name, ipAddress, port, username, password, status); + }; + + s.getVppList = function(successCallback, errorCallback) { + var vppList = []; + var promiseList = []; + var restObj = VPPRestangular.one('restconf').one('operational').one('network-topology:network-topology').one('topology').one('topology-netconf'); + + restObj.get().then(function(data) { + //if(data.topology.length || data.topology[0].node.length) { + data.topology[0].node.forEach(function(n) { + if(n['node-id'] !== 'controller-config') { + //create new object + var vppObj = s.createObj(n['node-id'], n['netconf-node-topology:host'], n['netconf-node-topology:port'], null, null, n['netconf-node-topology:connection-status']); + // register a promise + if (vppObj.status === 'connected') { + var promise = VppInterfaceService.getInterfaceListByVppName(n['node-id'], function (interfaceList) { + vppObj.interfaces = interfaceList; + }); + // add promise to array + promiseList.push(promise); + // when promise is resolved, push vpp into vppList + promise.then(function () { + vppList.push(vppObj); + }) + } + else { + vppList.push(vppObj); + } + + } + }); + //} + // when all promises are resolved, call success callback + $q.all(promiseList).then(function () { + successCallback(vppList); + }); + }, function(res) { + errorCallback(res); + }); + }; + + s.deleteVpp = function(vpp, finishedSuccessfullyCallback) { + console.log(vpp); + var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one('topology-netconf').one('node').one('controller-config').one('yang-ext:mount').one('config:modules').one('module').one('odl-sal-netconf-connector-cfg:sal-netconf-connector').one(vpp.name); + + restObj.remove().then(function() { + finishedSuccessfullyCallback(true); + }, function(res) { + finishedSuccessfullyCallback(false); + }); + }; + + s.mountVpp = function(name,ip,port,un,pw,finishedSuccessfullyCallback) { + + var postData = '\ + \ + prefix:sal-netconf-connector\ + '+name+'\ +
'+ip+'
\ + '+port+'\ + '+un+'\ + '+pw+'\ + false\ + \ + prefix:netty-event-executor\ + global-event-executor\ + \ + \ + prefix:binding-broker-osgi-registry\ + binding-osgi-broker\ + \ + \ + prefix:dom-broker-osgi-registry\ + dom-broker\ + \ + \ + prefix:netconf-client-dispatcher\ + global-netconf-dispatcher\ + \ + \ + prefix:threadpool\ + global-netconf-processing-executor\ + \ +
'; + + var restObj = VPPRestangularXml.one('restconf').one('config').one('opendaylight-inventory:nodes').one('node').one('controller-config').one('yang-ext:mount'); + + restObj.post('config:modules', postData).then(function() { + finishedSuccessfullyCallback(true); + }, function(res) { + finishedSuccessfullyCallback(false); + }); + }; + + return s; + }); + + vpp.register.factory('VppInterfaceService', function(VPPRestangular, $q) { + var s = {}; + + s.getInterfaceListByVppName = function(vppName, successCallback) { + var interfaceList = []; + var restObj = VPPRestangular.one('restconf').one('operational').one('network-topology:network-topology').one('topology').one('topology-netconf').one('node').one(vppName).one('yang-ext:mount').one('ietf-interfaces:interfaces-state'); + + return restObj.get().then(function(data) { + if (data['interfaces-state'].interface) { + interfaceList = data['interfaces-state'].interface.filter(function(i) { + if (i.name != 'local0') { + return i; + } + }); + } + successCallback(interfaceList); + }); + }; + + return s; + }); +}); \ No newline at end of file diff --git a/vbd/gui/module/src/main/resources/vpp/services/vpp.services.js b/vbd/gui/module/src/main/resources/vpp/services/vpp.services.js new file mode 100644 index 000000000..70b1631f7 --- /dev/null +++ b/vbd/gui/module/src/main/resources/vpp/services/vpp.services.js @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +define(['app/vpp/vpp.module', 'next'], function(vpp) { + + vpp.register.factory('VPPRestangular', function(Restangular, ENV) { + return Restangular.withConfig(function(RestangularConfig) { + RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL")); + }); + }); + + vpp.register.factory('VPPRestangularXml', function(Restangular, ENV) { + return Restangular.withConfig(function(RestangularConfig) { + RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL")); + RestangularConfig.setDefaultHeaders({ "Content-Type": "application/xml" }, { "Accept": "application/xml" }); + }); + }); + + vpp.register.service('toastService', function($mdToast) { + this.showToast = function(content) { + var toast = $mdToast.simple() + .content(content) + .action('OK') + .position('bottom right'); + $mdToast.show(toast); + } + }); + + vpp.register.service('dataService', function() { + + nx.graphic.Icons.registerIcon("bd", "src/app/vpp/assets/images/bd1.svg", 45, 45); + nx.graphic.Icons.registerIcon("interf", "src/app/vpp/assets/images/interf.svg", 45, 45); + + this.bridgeDomainsTopo = new nx.graphic.Topology({ + height: 350, + width: 500, + scalable: true, + theme:'blue', + enableGradualScaling:true, + nodeConfig: { + color: '#414040', + label: 'model.label', + scale: 'model.scale', + iconType: function(vertex) { + var type = vertex.get().type; + if (type === 'bd') { + return 'bd' + } else if (type === 'vpp') { + return 'switch' + } else { + return 'interf'; + } + } + }, + linkConfig: { + label: 'model.label', + linkType: 'parallel', + color: function(link) { + if (link.getData().type === 'tunnel') { + return '#00FF00'; + } else { + return '#414040'; + } + }, + width: function(link) { + if (link.getData().type === 'tunnel') { + return 5; + } + } + }, + showIcon: true, + dataProcessor: 'force', + autoLayout: true, + enableSmartNode: false, + tooltipManagerConfig: { + nodeTooltipContentClass: 'TooltipNode', + linkTooltipContentClass: 'TooltipLink' + } + }); + this.nextApp = new nx.ui.Application; + + this.vpps = []; + + this.tableContent = []; + this.unassignedInterfaces = []; + this.interfaces = []; + this.injectedInterfaces = []; + this.bridgedomains = []; + this.changedInterfaces = []; + this.selectedBd = { + name: '' + }; + + this.setBridgeDomains = function(data) { + angular.copy(data['bridge-domains']['bridge-domain'], this.bridgedomains); + }; + + this.clearInjectedInterfacesInBridgeDomainTopo = function() { + this.bridgeDomainsTopo.clear(); + this.injectedInterfaces.length = 0; + + }; + + this.generateUnassignedInterfaces = function() { + this.unassignedInterfaces.length = 0; + for (var x=0; xView Topology' + - 'Edit' + - 'Delete'; - - $scope.gridOptions = { - - expandableRowTemplate: $scope.view_path + 'inventory-table-interfaces-subgrid.tpl.html', - expandableRowHeight: 150, - //subGridVariable will be available in subGrid scope - expandableRowScope: { - subGridVariable: 'subGridScopeVariable' - } - - } - - $scope.gridOptions.columnDefs = [ - { name: 'name' }, - { name: 'ipAddress'}, - { name: 'port'}, - { name: 'status'}, - { name:' ',cellTemplate: actionCellTemplate} - ]; - - - //$scope.gridOptions.data = $scope.vppList; - - $scope.gridOptions.onRegisterApi = function(gridApi){ - $scope.gridApi = gridApi; - }; - - $scope.$on('RELOAD_VPP_TABLE', function(event) { - $scope.gridOptions.data = $scope.vppList.map(function(item) { - item.subGridOptions = { - columnDefs: [ - { name:"Name", field:"name" }, - {name:"Mac Address", field: "phys-address"}, - {name:"Oper. Status", fiels: "oper-status"} - ], - data: item.interfaces - }; - - return item; - }); - }); - - }]); - - vpp.register.controller('TableController', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', function ($scope, $rootScope, filter, dataService, toastService) { - var vm = this; - vm.rowCollection = dataService.tableContent; - vm.displayedCollection = [].concat(vm.rowCollection); - vm.updateAssignment = function(receivedInterface) { - var interf = _.find(dataService.interfaces, {name: receivedInterface.name, 'phys-address': receivedInterface['phys-address']}); - angular.copy(receivedInterface, interf); - if (interf.assigned){ - interf['v3po:l2']['bridge-domain'] = dataService.selectedBd.name; - } else { - interf['v3po:l2']['bridge-domain'] = ''; - } - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); - var previouslyChangedInterface = _.find(dataService.changedInterfaces, {name: interf.name, 'phys-address': interf['phys-address']}); - if (!previouslyChangedInterface) { - dataService.changedInterfaces.push(interf); - } - console.log(dataService.changedInterfaces); - }; - }]); - - vpp.register.controller('BridgeDomainsController', function(dataService, $location, $mdDialog, toastService) { - var vm = this; - vm.dataService = dataService; - - dataService.nextApp.container(document.getElementById('bridge-domains-next-app')); - dataService.bridgeDomainsTopo.attach(dataService.nextApp); - - window.addEventListener('resize', function () { - if ($location.path() === '/bridgedomains') { - dataService.topo.adaptToContainer(); - } - }); - - vm.bridgedomains = dataService.bridgedomains; - vm.selectedBd = dataService.selectedBd; - - dataService.bridgeDomainsTopo.on('clickNode',function(topo,node) { - console.log(node); - }); - - vm.bdChanged = function() { - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); - }; - - vm.addBd = function() { - //show dialog - $mdDialog.show({ - controller: function() { - var vm = this; - vm.bd = {}; - vm.waiting = false; - - //function called when the cancel button ( 'x' in the top right) is clicked - vm.close = function() { - $mdDialog.cancel(); - }; - - vm.isDone = function(status) { - vm.waiting = false; - if (status === 'success') { - dataService.bridgedomains.push(vm.bd); - dataService.selectedBd.name = vm.bd.name; - dataService.injectBridgeDomainsTopoElements(); - dataService.buildTableContent(); - vm.close(); - } - }; - - //function called when the update button is clicked - vm.updateConfig = function() { - vm.waiting = true; - //send a POST with the entered content in the form field - - }; - }, - controllerAs: 'NewBdDialogCtrl', - templateUrl: 'templates/new-bd-dialog.html', - parent: angular.element(document.body), - clickOutsideToClose:false - }) - }; - - vm.deploy = function() { - - }; - - vm.removeBd = function() { - if(vm.selectedBd.name) { - var successCallback = function(success) { - if (success) { - console.log(vm.bridgedomains); - _.remove(vm.bridgedomains, { - name: vm.selectedBd.name - }); - toastService.showToast('Bridge Domain Removed!'); - vm.selectedBd.name = ''; - dataService.clearInjectedInterfacesInBridgeDomainTopo(); - dataService.injectBdIntoBridgeDomainsTopo(); - dataService.tableContent.length = 0; - } else { - toastService.showToast('Error removing Bridge Domain!'); - - } - }; - - //... removeBdFromOdl(vm.selectedBd.name, successCallback); - } - }; - }); -}); - - diff --git a/vbd/gui/module/src/main/resources/vpp/vpp.module.js b/vbd/gui/module/src/main/resources/vpp/vpp.module.js index 7d6ed8568..56a1852de 100644 --- a/vbd/gui/module/src/main/resources/vpp/vpp.module.js +++ b/vbd/gui/module/src/main/resources/vpp/vpp.module.js @@ -26,7 +26,7 @@ define(['angularAMD', 'app/routingConfig', 'ui-bootstrap', 'Restangular', 'angul service : $provide.service }; - NavHelperProvider.addControllerUrl('app/vpp/vpp.controller'); + NavHelperProvider.addControllerUrl('app/vpp/controllers/vpp.controller'); NavHelperProvider.addToMenu('vpp', { "link": "#/vpp/index", "active": "main.vpp", @@ -108,29 +108,6 @@ define(['angularAMD', 'app/routingConfig', 'ui-bootstrap', 'Restangular', 'angul }) .accentPalette('odl-orange'); - // $stateProvider.state('main.vpp.inventory', { - // url: '/inventory', - // access: access.admin, - // views: { - // '': { - // controller: 'InventoryController', - // controllerAs: 'InventoryCtrl', - // templateUrl: 'src/app/vpp/views/inventory.html' - // } - // } - // }); - - // $stateProvider.state('main.vpp.bridgedomains', { - // url: '/bridgedomains', - // access: access.admin, - // views: { - // '': { - // controller: 'BridgeDomainsController', - // controllerAs: 'BridgeDomainsCtrl', - // templateUrl: 'src/app/vpp/views/bridge-domains.html' - // } - // } - // }); }); return vpp; diff --git a/vbd/gui/module/src/main/resources/vpp/vpp.services.js b/vbd/gui/module/src/main/resources/vpp/vpp.services.js deleted file mode 100644 index 49337b109..000000000 --- a/vbd/gui/module/src/main/resources/vpp/vpp.services.js +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -define(['app/vpp/vpp.module', 'next'], function(vpp) { - - vpp.register.factory('VPPRestangular', function(Restangular, ENV) { - return Restangular.withConfig(function(RestangularConfig) { - RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL")); - }); - }); - - vpp.register.factory('VPPRestangularXml', function(Restangular, ENV) { - return Restangular.withConfig(function(RestangularConfig) { - RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL")); - RestangularConfig.setDefaultHeaders({ "Content-Type": "application/xml" }, { "Accept": "application/xml" }); - }); - }); - - vpp.register.service('toastService', function($mdToast) { - this.showToast = function(content) { - var toast = $mdToast.simple() - .content(content) - .action('OK') - .position('bottom right'); - $mdToast.show(toast); - } - }); - - vpp.register.service('dataService', function() { - - nx.graphic.Icons.registerIcon("bd", "src/app/vpp/assets/images/bd1.svg", 45, 45); - nx.graphic.Icons.registerIcon("interf", "src/app/vpp/assets/images/interf.svg", 45, 45); - - this.bridgeDomainsTopo = new nx.graphic.Topology({ - height: 350, - width: 500, - scalable: true, - theme:'blue', - enableGradualScaling:true, - nodeConfig: { - color: '#414040', - label: 'model.label', - scale: 'model.scale', - iconType: function(vertex) { - var type = vertex.get().type; - if (type === 'bd') { - return 'bd' - } else if (type === 'vpp') { - return 'switch' - } else { - return 'interf'; - } - } - }, - linkConfig: { - label: 'model.label', - linkType: 'parallel', - color: function(link) { - if (link.getData().type === 'tunnel') { - return '#00FF00'; - } else { - return '#414040'; - } - }, - width: function(link) { - if (link.getData().type === 'tunnel') { - return 5; - } - } - }, - showIcon: true, - dataProcessor: 'force', - autoLayout: true, - enableSmartNode: false, - tooltipManagerConfig: { - nodeTooltipContentClass: 'TooltipNode', - linkTooltipContentClass: 'TooltipLink' - } - }); - this.nextApp = new nx.ui.Application; - - this.vpps = []; - - this.tableContent = []; - this.unassignedInterfaces = []; - this.interfaces = []; - this.injectedInterfaces = []; - this.bridgedomains = []; - this.changedInterfaces = []; - this.selectedBd = { - name: '' - }; - - this.setBridgeDomains = function(data) { - angular.copy(data['bridge-domains']['bridge-domain'], this.bridgedomains); - }; - - this.clearInjectedInterfacesInBridgeDomainTopo = function() { - this.bridgeDomainsTopo.clear(); - this.injectedInterfaces.length = 0; - - }; - - this.generateUnassignedInterfaces = function() { - this.unassignedInterfaces.length = 0; - for (var x=0; x\ -
'+ip+'
\ - '+port+'\ - '+un+'\ - '+pw+'\ - false\ - \ - prefix:netty-event-executor\ - global-event-executor\ - \ - \ - prefix:binding-broker-osgi-registry\ - binding-osgi-broker\ - \ - \ - prefix:dom-broker-osgi-registry\ - dom-broker\ - \ - \ - prefix:netconf-client-dispatcher\ - global-netconf-dispatcher\ - \ - \ - prefix:threadpool\ - global-netconf-processing-executor\ - \ - '; - - var restObj = VPPRestangularXml.one('restconf').one('config').one('opendaylight-inventory:nodes').one('node').one('controller-config').one('yang-ext:mount'); - - restObj.post('config:modules', postData).then(function() { - finishedSuccessfullyCallback(true); - }, function(res) { - finishedSuccessfullyCallback(false); - }); - }; - - return s; - }); - - vpp.register.factory('VppInterfaceService', function(VPPRestangular) { - var s = {}; - - s.getInterfaceList = function(vppName,successCallback, errorCallback) { - var restObj = VPPRestangular.one('restconf').one('operational').one('network-topology:network-topology').one('topology').one('topology-netconf').one('node').one(vppName).one('yang-ext:mount').one('ietf-interfaces:interfaces-state'); - - restObj.get().then(function(data) { - successCallback(data); - }, function(res) { - errorCallback(res); - }); - }; - - return s; - }); - -}); \ No newline at end of file -- cgit 1.2.3-korg