Merge "Use ${project.version} for internal dependencies"
[ovsdb.git] / ovsdb-ui / module / src / main / resources / ovsdb / ovsdb.controller.js
1 /*\r
2  * Copyright (c) 2015 Inocybe Technologies and others.  All rights reserved.\r
3  *\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
7  */\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
9   'use strict';\r
10 \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
14 \r
15     cssInjector.add('src/app/ovsdb/css/select2.min.css');\r
16     cssInjector.add('src/app/ovsdb/css/toggle-switch.css');\r
17 \r
18     cssInjector.add('src/app/ovsdb/css/ovsdb.css');\r
19   };\r
20   RootOvsdbCtrl.$inject = ['$rootScope', 'cssInjector'];\r
21 \r
22   var BaseOvsdbCtrl = function ($scope) {\r
23     $scope.err = {\r
24       "message": "",\r
25       "tag": "",\r
26       "type": ""\r
27     };\r
28     $scope.showError = function () {\r
29       $('#errorMessage').fadeIn().delay(3000).fadeOut();\r
30     };\r
31   };\r
32   BaseOvsdbCtrl.$inject = ['$scope'];\r
33 \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
38       filterTenant = {\r
39         bridgeIds : [''],\r
40         ovsdbIds : ['']\r
41       },\r
42       filterSubnet = {\r
43         bridgeIds : [''],\r
44         ovsdbIds : ['']\r
45       };\r
46 \r
47     $scope.dataPromise = physDataDefer.promise;\r
48     $scope.lgraphIsReadyPromise = lgraphDataDefer.promise;\r
49     $scope.canvasWidth = $('#tabs').width();\r
50     $scope.canvasHeight = 580;\r
51 \r
52     $scope.dialogData = ['d'];\r
53 \r
54     $scope.tenants = [];\r
55     $scope.subnets = [];\r
56     $scope.selectedTenant = '';\r
57     $scope.selectedSubnet = '';\r
58 \r
59     $scope.toggleLayer = function () {\r
60       $scope.rotateGraph($scope.opt.layer);\r
61     };\r
62 \r
63     $scope.resizeGraph = function () {\r
64       var $row = $('#ovsdb_contain > div.row:first');\r
65       var h = $row.height();\r
66       $row.data('ph', h);\r
67       $row.fadeOut();\r
68       $('#nv_graph > svg').animate({\r
69         height: '+=' + h\r
70       });\r
71     };\r
72 \r
73     $scope.minimizeGraph = function () {\r
74       var $row = $('#ovsdb_contain > div.row:first');\r
75       var h = $row.data('ph');\r
76       $row.fadeIn();\r
77       $('#nv_graph > svg').animate({\r
78         height: '-=' + h\r
79       });\r
80     };\r
81 \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
88     }\r
89 \r
90     function removeFilter() {\r
91       $scope.filterNode([''], '.bridge', false);\r
92       $scope.filterNode([''], '.switch', false);\r
93       $scope.filterLink();\r
94     }\r
95 \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
102 \r
103           filterTenant.bridgeIds = _.uniq(filterTenant.bridgeIds.concat(bridgeId));\r
104           filterTenant.ovsdbIds = _.uniq(filterTenant.ovsdbIds.concat(ovsdbId));\r
105           applyFilter();\r
106         });\r
107       } else {\r
108         filterTenant.bridgeIds = [''];\r
109         filterTenant.ovsdbIds = [''];\r
110         applyFilter();\r
111       }\r
112     };\r
113 \r
114     $scope.filterBySubnet = function() {\r
115       if (!_.isEmpty($scope.selectedSubnet)) {\r
116         var subnets = _.map($scope.selectedSubnet, function(d) {\r
117           return d.id;\r
118         });\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
124             applyFilter();\r
125         });\r
126       } else {\r
127         filterSubnet.bridgeIds = [''];\r
128         filterSubnet.ovsdbIds = [''];\r
129         applyFilter();\r
130       }\r
131     };\r
132 \r
133     $scope.onNodeClick = function (d, nodes, links) {\r
134       $scope.pDialogData = d.node.pretty();\r
135       $scope.$apply();\r
136     };\r
137 \r
138     $('#tenantSelect').select2({\r
139       width: "200",\r
140       minimumResultsForSearch: Infinity\r
141     }).next().children('span').children('span').css('width', '200'); //hack to have the arrow with the same background\r
142 \r
143     $("#tagPicker").select2({\r
144       width: "230",\r
145     });\r
146 \r
147     var $tabs = $('#tabs').tabs({selected: 0});\r
148 \r
149     $scope.goToPhysicalView = function(d) {\r
150       $tabs.tabs("option", "active", 1);\r
151       $('#tenantSelect').val(d.tenantId).change();\r
152 \r
153       if ( d instanceof OvsCore.Neutron.Network) {\r
154         $('#tagPicker').val(d.subnets.map(function(d){return d.id;})).change();\r
155       }\r
156     };\r
157 \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
162       });\r
163       NeutronSvc.getSubNets().then(function(subHash) {\r
164         $scope.subnets = _.values(subHash).map(function(n) { return n[0]; });\r
165       });\r
166 \r
167       lgraphDataDefer.resolve(networks);\r
168     });\r
169 \r
170     TopologySvc.getTopologies().then(function(d) {\r
171       physDataDefer.resolve(d);\r
172     });\r
173 \r
174   };\r
175 \r
176   OvsdbCtrl.$inject = ['$q', '$scope', 'TopologySvc', 'NeutronSvc', 'OvsUtil'];\r
177   OvsdbCtrl.prototype = Object.create(BaseOvsdbCtrl.prototype);\r
178 \r
179   ovsdb.register.controller('RootOvsdbCtrl', RootOvsdbCtrl);\r
180   ovsdb.register.controller('OvsdbCtrl', OvsdbCtrl);\r
181 });\r