2 * Copyright (c) 2015 Inocybe Technologies and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 define(['jquery', 'underscore', 'app/ovsdb/ovsdb.module', 'app/ovsdb/OvsCore', 'app/ovsdb/ovsdb.directives', 'app/ovsdb/ovsdb.services', 'app/ovsdb/lib/select2.full.min'], function ($, _, ovsdb, OvsCore) {
\r
11 var RootOvsdbCtrl = function ($rootScope, cssInjector) {
\r
12 // transparent 1px gif picture
\r
13 $rootScope['section_logo'] = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
\r
15 cssInjector.add('src/app/ovsdb/css/select2.min.css');
\r
16 cssInjector.add('src/app/ovsdb/css/toggle-switch.css');
\r
18 cssInjector.add('src/app/ovsdb/css/ovsdb.css');
\r
20 RootOvsdbCtrl.$inject = ['$rootScope', 'cssInjector'];
\r
22 var BaseOvsdbCtrl = function ($scope) {
\r
28 $scope.showError = function () {
\r
29 $('#errorMessage').fadeIn().delay(3000).fadeOut();
\r
32 BaseOvsdbCtrl.$inject = ['$scope'];
\r
34 var OvsdbCtrl = function ($q, $scope, TopologySvc, NeutronSvc, OvsUtil) {
\r
35 BaseOvsdbCtrl.call(this, $scope);
\r
36 var lgraphDataDefer = $q.defer(),
\r
37 physDataDefer = $q.defer(),
\r
47 $scope.dataPromise = physDataDefer.promise;
\r
48 $scope.lgraphIsReadyPromise = lgraphDataDefer.promise;
\r
49 $scope.canvasWidth = $('#tabs').width();
\r
50 $scope.canvasHeight = 580;
\r
52 $scope.dialogData = ['d'];
\r
54 $scope.tenants = [];
\r
55 $scope.subnets = [];
\r
56 $scope.selectedTenant = '';
\r
57 $scope.selectedSubnet = '';
\r
59 $scope.toggleLayer = function () {
\r
60 $scope.rotateGraph($scope.opt.layer);
\r
63 $scope.resizeGraph = function () {
\r
64 var $row = $('#ovsdb_contain > div.row:first');
\r
65 var h = $row.height();
\r
68 $('#nv_graph > svg').animate({
\r
73 $scope.minimizeGraph = function () {
\r
74 var $row = $('#ovsdb_contain > div.row:first');
\r
75 var h = $row.data('ph');
\r
77 $('#nv_graph > svg').animate({
\r
82 function applyFilter(inverse) {
\r
83 var bridgeIds = _.uniq(filterTenant.bridgeIds.concat(filterSubnet.bridgeIds));
\r
84 var ovsdbIds = _.uniq(filterTenant.ovsdbIds.concat(filterSubnet.ovsdbIds));
\r
85 $scope.filterNode(bridgeIds, '.bridge');
\r
86 $scope.filterNode(ovsdbIds, '.switch');
\r
87 $scope.filterLink();
\r
90 function removeFilter() {
\r
91 $scope.filterNode([''], '.bridge', false);
\r
92 $scope.filterNode([''], '.switch', false);
\r
93 $scope.filterLink();
\r
96 $scope.fiterByTenant = function() {
\r
97 if ($scope.selectedTenant) {
\r
98 var tenant = $scope.selectedTenant;
\r
99 OvsUtil.extractLogicalByTenant(tenant.id).then(function(result) {
\r
100 var bridgeId = result[0],
\r
101 ovsdbId = result[1];
\r
103 filterTenant.bridgeIds = _.uniq(filterTenant.bridgeIds.concat(bridgeId));
\r
104 filterTenant.ovsdbIds = _.uniq(filterTenant.ovsdbIds.concat(ovsdbId));
\r
108 filterTenant.bridgeIds = [''];
\r
109 filterTenant.ovsdbIds = [''];
\r
114 $scope.filterBySubnet = function() {
\r
115 if (!_.isEmpty($scope.selectedSubnet)) {
\r
116 var subnets = _.map($scope.selectedSubnet, function(d) {
\r
119 OvsUtil.extractLogicalBySubnet(subnets).then(function(result) {
\r
120 var bridgeId = result[0],
\r
121 ovsdbId = result[1];
\r
122 filterSubnet.bridgeIds = _.uniq(filterSubnet.bridgeIds.concat(bridgeId));
\r
123 filterSubnet.ovsdbIds = _.uniq(filterSubnet.ovsdbIds.concat(ovsdbId));
\r
127 filterSubnet.bridgeIds = [''];
\r
128 filterSubnet.ovsdbIds = [''];
\r
133 $scope.onNodeClick = function (d, nodes, links) {
\r
134 $scope.pDialogData = d.node.pretty();
\r
138 $('#tenantSelect').select2({
\r
140 minimumResultsForSearch: Infinity
\r
141 }).next().children('span').children('span').css('width', '200'); //hack to have the arrow with the same background
\r
143 $("#tagPicker").select2({
\r
147 var $tabs = $('#tabs').tabs({selected: 0});
\r
149 $scope.goToPhysicalView = function(d) {
\r
150 $tabs.tabs("option", "active", 1);
\r
151 $('#tenantSelect').val(d.tenantId).change();
\r
153 if ( d instanceof OvsCore.Neutron.Network) {
\r
154 $('#tagPicker').val(d.subnets.map(function(d){return d.id;})).change();
\r
158 OvsUtil.getLogicalTopology().then(function(networks) {
\r
159 var tenantList = NeutronSvc.getAllTenants();
\r
160 _.each(tenantList, function(t) {
\r
161 $scope.tenants.push({id : t, name: t});
\r
163 NeutronSvc.getSubNets().then(function(subHash) {
\r
164 $scope.subnets = _.values(subHash).map(function(n) { return n[0]; });
\r
167 lgraphDataDefer.resolve(networks);
\r
170 TopologySvc.getTopologies().then(function(d) {
\r
171 physDataDefer.resolve(d);
\r
176 OvsdbCtrl.$inject = ['$q', '$scope', 'TopologySvc', 'NeutronSvc', 'OvsUtil'];
\r
177 OvsdbCtrl.prototype = Object.create(BaseOvsdbCtrl.prototype);
\r
179 ovsdb.register.controller('RootOvsdbCtrl', RootOvsdbCtrl);
\r
180 ovsdb.register.controller('OvsdbCtrl', OvsdbCtrl);
\r