move vpnservice and cleanup poms
[netvirt.git] / ovsdb-ui / module / src / main / resources / ovsdb / ovsdb.controller.js
index 5982a06eaa14cb9b4309f9d7a2d726ac70b6e182..95a8c9bbd4712e4a21dd160156e599d3edde05a7 100644 (file)
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
  */\r
-\r
-define(['jquery', 'app/ovsdb/ovsdb.module','app/ovsdb/ovsdb.services'], function($, ovsdb) {\r
+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
   'use strict';\r
 \r
-  var RootOvsdbCtrl = function($rootScope) {\r
-      $rootScope['section_logo'] = 'logo_ovsdb';\r
-  };\r
-  RootOvsdbCtrl.$inject = ['$rootScope'];\r
+  var RootOvsdbCtrl = function ($rootScope, cssInjector) {\r
+    // transparent 1px gif picture\r
+    $rootScope['section_logo'] = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r
 \r
-  var BaseOvsdbCtrl = function($scope) {\r
-      $scope['err'] = {\r
-        "message": "",\r
-        "tag": "",\r
-        "type": ""\r
-      };\r
+    cssInjector.add('src/app/ovsdb/css/select2.min.css');\r
+    cssInjector.add('src/app/ovsdb/css/toggle-switch.css');\r
 \r
-      $scope.showError = function() {\r
-        $('#errorMessage').fadeIn().delay(3000).fadeOut();\r
-      };\r
+    cssInjector.add('src/app/ovsdb/css/ovsdb.css');\r
+  };\r
+  RootOvsdbCtrl.$inject = ['$rootScope', 'cssInjector'];\r
+\r
+  var BaseOvsdbCtrl = function ($scope) {\r
+    $scope.err = {\r
+      "message": "",\r
+      "tag": "",\r
+      "type": ""\r
+    };\r
+    $scope.showError = function () {\r
+      $('#errorMessage').fadeIn().delay(3000).fadeOut();\r
+    };\r
   };\r
   BaseOvsdbCtrl.$inject = ['$scope'];\r
 \r
-  var OvsdbCtrl = function($scope, TopologyNetworkSvc) {\r
-      BaseOvsdbCtrl.call(this, $scope);\r
+  var OvsdbCtrl = function ($q, $scope, TopologySvc, NeutronSvc, OvsUtil) {\r
+    BaseOvsdbCtrl.call(this, $scope);\r
+    var lgraphDataDefer = $q.defer(),\r
+      physDataDefer = $q.defer(),\r
+      filterTenant = {\r
+        bridgeIds : [''],\r
+        ovsdbIds : ['']\r
+      },\r
+      filterSubnet = {\r
+        bridgeIds : [''],\r
+        ovsdbIds : ['']\r
+      };\r
+\r
+    $scope.dataPromise = physDataDefer.promise;\r
+    $scope.lgraphIsReadyPromise = lgraphDataDefer.promise;\r
+    $scope.canvasWidth = $('#tabs').width();\r
+    $scope.canvasHeight = 580;\r
+\r
+    $scope.dialogData = ['d'];\r
+\r
+    $scope.tenants = [];\r
+    $scope.subnets = [];\r
+    $scope.selectedTenant = '';\r
+    $scope.selectedSubnet = '';\r
+\r
+    $scope.toggleLayer = function () {\r
+      $scope.rotateGraph($scope.opt.layer);\r
+    };\r
+\r
+    $scope.resizeGraph = function () {\r
+      var $row = $('#ovsdb_contain > div.row:first');\r
+      var h = $row.height();\r
+      $row.data('ph', h);\r
+      $row.fadeOut();\r
+      $('#nv_graph > svg').animate({\r
+        height: '+=' + h\r
+      });\r
+    };\r
+\r
+    $scope.minimizeGraph = function () {\r
+      var $row = $('#ovsdb_contain > div.row:first');\r
+      var h = $row.data('ph');\r
+      $row.fadeIn();\r
+      $('#nv_graph > svg').animate({\r
+        height: '-=' + h\r
+      });\r
+    };\r
+\r
+    function applyFilter(inverse) {\r
+      var bridgeIds = _.uniq(filterTenant.bridgeIds.concat(filterSubnet.bridgeIds));\r
+      var ovsdbIds = _.uniq(filterTenant.ovsdbIds.concat(filterSubnet.ovsdbIds));\r
+      $scope.filterNode(bridgeIds, '.bridge');\r
+      $scope.filterNode(ovsdbIds, '.switch');\r
+      $scope.filterLink();\r
+    }\r
+\r
+    function removeFilter() {\r
+      $scope.filterNode([''], '.bridge', false);\r
+      $scope.filterNode([''], '.switch', false);\r
+      $scope.filterLink();\r
+    }\r
+\r
+    $scope.fiterByTenant = function() {\r
+      if ($scope.selectedTenant) {\r
+        var tenant = $scope.selectedTenant;\r
+        OvsUtil.extractLogicalByTenant(tenant.id).then(function(result) {\r
+          var bridgeId = result[0],\r
+            ovsdbId = result[1];\r
+\r
+          filterTenant.bridgeIds = _.uniq(filterTenant.bridgeIds.concat(bridgeId));\r
+          filterTenant.ovsdbIds = _.uniq(filterTenant.ovsdbIds.concat(ovsdbId));\r
+          applyFilter();\r
+        });\r
+      } else {\r
+        filterTenant.bridgeIds = [''];\r
+        filterTenant.ovsdbIds = [''];\r
+        applyFilter();\r
+      }\r
+    };\r
+\r
+    $scope.filterBySubnet = function() {\r
+      if (!_.isEmpty($scope.selectedSubnet)) {\r
+        var subnets = _.map($scope.selectedSubnet, function(d) {\r
+          return d.id;\r
+        });\r
+        OvsUtil.extractLogicalBySubnet(subnets).then(function(result) {\r
+          var bridgeId = result[0],\r
+            ovsdbId = result[1];\r
+            filterSubnet.bridgeIds = _.uniq(filterSubnet.bridgeIds.concat(bridgeId));\r
+            filterSubnet.ovsdbIds = _.uniq(filterSubnet.ovsdbIds.concat(ovsdbId));\r
+            applyFilter();\r
+        });\r
+      } else {\r
+        filterSubnet.bridgeIds = [''];\r
+        filterSubnet.ovsdbIds = [''];\r
+        applyFilter();\r
+      }\r
+    };\r
+\r
+    $scope.onNodeClick = function (d, nodes, links) {\r
+      $scope.pDialogData = d.node.pretty();\r
+      $scope.$apply();\r
+    };\r
+\r
+    $('#tenantSelect').select2({\r
+      width: "200",\r
+      minimumResultsForSearch: Infinity\r
+    }).next().children('span').children('span').css('width', '200'); //hack to have the arrow with the same background\r
+\r
+    $("#tagPicker").select2({\r
+      width: "230",\r
+    });\r
+\r
+    var $tabs = $('#tabs').tabs({selected: 0});\r
+\r
+    $scope.goToPhysicalView = function(d) {\r
+      $tabs.tabs("option", "active", 1);\r
+      $('#tenantSelect').val(d.tenantId).change();\r
+\r
+      if ( d instanceof OvsCore.Neutron.Network) {\r
+        $('#tagPicker').val(d.subnets.map(function(d){return d.id;})).change();\r
+      }\r
+    };\r
+\r
+    OvsUtil.getLogicalTopology().then(function(networks) {\r
+      var tenantList = NeutronSvc.getAllTenants();\r
+      _.each(tenantList, function(t) {\r
+        $scope.tenants.push({id : t, name: t});\r
+      });\r
+      NeutronSvc.getSubNets().then(function(subHash) {\r
+        $scope.subnets = _.values(subHash).map(function(n) { return n[0]; });\r
+      });\r
+\r
+      lgraphDataDefer.resolve(networks);\r
+    });\r
+\r
+    TopologySvc.getTopologies().then(function(d) {\r
+      physDataDefer.resolve(d);\r
+    });\r
 \r
   };\r
-  OvsdbCtrl.$inject = ['$scope', 'TopologyNetworkSvc'];\r
+\r
+  OvsdbCtrl.$inject = ['$q', '$scope', 'TopologySvc', 'NeutronSvc', 'OvsUtil'];\r
   OvsdbCtrl.prototype = Object.create(BaseOvsdbCtrl.prototype);\r
 \r
   ovsdb.register.controller('RootOvsdbCtrl', RootOvsdbCtrl);\r