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 $rootScope['section_logo'] = 'logo_ovsdb';
\r
13 cssInjector.add('src/app/ovsdb/css/select2.min.css');
\r
14 cssInjector.add('src/app/ovsdb/css/toggle-switch.css');
\r
16 cssInjector.add('src/app/ovsdb/css/ovsdb.css');
\r
18 RootOvsdbCtrl.$inject = ['$rootScope', 'cssInjector'];
\r
20 var BaseOvsdbCtrl = function ($scope) {
\r
26 $scope.showError = function () {
\r
27 $('#errorMessage').fadeIn().delay(3000).fadeOut();
\r
30 BaseOvsdbCtrl.$inject = ['$scope'];
\r
32 var OvsdbCtrl = function ($q, $scope, TopologySvc, NeutronSvc, OvsUtil) {
\r
33 BaseOvsdbCtrl.call(this, $scope);
\r
34 var lgraphDataDefer = $q.defer(),
\r
35 physDataDefer = $q.defer(),
\r
45 $scope.dataPromise = physDataDefer.promise;
\r
46 $scope.lgraphIsReadyPromise = lgraphDataDefer.promise;
\r
47 $scope.canvasWidth = $('#tabs').width();
\r
48 $scope.canvasHeight = 580;
\r
50 $scope.dialogData = ['d'];
\r
52 $scope.tenants = [];
\r
53 $scope.subnets = [];
\r
54 $scope.selectedTenant = '';
\r
55 $scope.selectedSubnet = '';
\r
57 $scope.toggleLayer = function () {
\r
58 $scope.rotateGraph($scope.opt.layer);
\r
61 $scope.resizeGraph = function () {
\r
62 var $row = $('#ovsdb_contain > div.row:first');
\r
63 var h = $row.height();
\r
66 $('#nv_graph > svg').animate({
\r
71 $scope.minimizeGraph = function () {
\r
72 var $row = $('#ovsdb_contain > div.row:first');
\r
73 var h = $row.data('ph');
\r
75 $('#nv_graph > svg').animate({
\r
80 function applyFilter(inverse) {
\r
81 var bridgeIds = _.uniq(filterTenant.bridgeIds.concat(filterSubnet.bridgeIds));
\r
82 var ovsdbIds = _.uniq(filterTenant.ovsdbIds.concat(filterSubnet.ovsdbIds));
\r
83 $scope.filterNode(bridgeIds, '.bridge');
\r
84 $scope.filterNode(ovsdbIds, '.switch');
\r
85 $scope.filterLink();
\r
88 function removeFilter() {
\r
89 $scope.filterNode([''], '.bridge', false);
\r
90 $scope.filterNode([''], '.switch', false);
\r
91 $scope.filterLink();
\r
94 $scope.fiterByTenant = function() {
\r
95 if ($scope.selectedTenant) {
\r
96 var tenant = $scope.selectedTenant;
\r
97 OvsUtil.extractLogicalByTenant(tenant.id).then(function(result) {
\r
98 var bridgeId = result[0],
\r
99 ovsdbId = result[1];
\r
101 filterTenant.bridgeIds = _.uniq(filterTenant.bridgeIds.concat(bridgeId));
\r
102 filterTenant.ovsdbIds = _.uniq(filterTenant.ovsdbIds.concat(ovsdbId));
\r
106 filterTenant.bridgeIds = [''];
\r
107 filterTenant.ovsdbIds = [''];
\r
112 $scope.filterBySubnet = function() {
\r
113 if (!_.isEmpty($scope.selectedSubnet)) {
\r
114 var subnets = _.map($scope.selectedSubnet, function(d) {
\r
117 OvsUtil.extractLogicalBySubnet(subnets).then(function(result) {
\r
118 var bridgeId = result[0],
\r
119 ovsdbId = result[1];
\r
120 filterSubnet.bridgeIds = _.uniq(filterSubnet.bridgeIds.concat(bridgeId));
\r
121 filterSubnet.ovsdbIds = _.uniq(filterSubnet.ovsdbIds.concat(ovsdbId));
\r
125 filterSubnet.bridgeIds = [''];
\r
126 filterSubnet.ovsdbIds = [''];
\r
131 $scope.onNodeClick = function (d, nodes, links) {
\r
132 $scope.pDialogData = d.node.pretty();
\r
136 $('#tenantSelect').select2({
\r
138 minimumResultsForSearch: Infinity
\r
139 }).next().children('span').children('span').css('width', '200'); //hack to have the arrow with the same background
\r
141 $("#tagPicker").select2({
\r
145 var $tabs = $('#tabs').tabs({selected: 0});
\r
147 $scope.goToPhysicalView = function(d) {
\r
148 $tabs.tabs("option", "active", 1);
\r
149 $('#tenantSelect').val(d.tenantId).change();
\r
151 if ( d instanceof OvsCore.Neutron.Network) {
\r
152 $('#tagPicker').val(d.subnets.map(function(d){return d.id;})).change();
\r
156 OvsUtil.getLogicalTopology().then(function(networks) {
\r
157 var tenantList = NeutronSvc.getAllTenants();
\r
158 _.each(tenantList, function(t) {
\r
159 $scope.tenants.push({id : t, name: t});
\r
161 NeutronSvc.getSubNets().then(function(subHash) {
\r
162 $scope.subnets = _.values(subHash).map(function(n) { return n[0]; });
\r
165 lgraphDataDefer.resolve(networks);
\r
168 TopologySvc.getTopologies().then(function(d) {
\r
169 physDataDefer.resolve(d);
\r
174 OvsdbCtrl.$inject = ['$q', '$scope', 'TopologySvc', 'NeutronSvc', 'OvsUtil'];
\r
175 OvsdbCtrl.prototype = Object.create(BaseOvsdbCtrl.prototype);
\r
177 ovsdb.register.controller('RootOvsdbCtrl', RootOvsdbCtrl);
\r
178 ovsdb.register.controller('OvsdbCtrl', OvsdbCtrl);
\r