angular.module('app.gbp').controller('RootGbpCtrl', RootGbpCtrl);
- RootGbpCtrl.$inject = ['$state', '$rootScope', '$scope', '$filter', 'RootGbpService', 'TenantListService', 'TenantService', 'EpgListService', 'ResolvedPolicyService', 'NextTopologyService', 'EndpointsListService'];
+ RootGbpCtrl.$inject = ['$state', '$rootScope', '$scope', '$filter', '$mdDialog', 'RootGbpService',
+ 'TenantListService', 'EpgListService', 'ResolvedPolicyService', 'NextTopologyService', 'EndpointsListService'];
- function RootGbpCtrl($state, $rootScope, $scope, $filter, RootGbpService, TenantListService, TenantService, EpgListService, ResolvedPolicyService, NextTopologyService, EndpointsListService) {
+ function RootGbpCtrl($state, $rootScope, $scope, $filter, $mdDialog, RootGbpService,
+ TenantListService, EpgListService, ResolvedPolicyService, NextTopologyService, EndpointsListService) {
/* properties */
$scope.apiType = 'operational';
+ $scope.activeObject = null;
$scope.endpoints = EndpointsListService.createList();
- $scope.policyDisabled = true;
$scope.rootTenant = null;
$scope.rootTenants = TenantListService.createList();
$scope.resolvedPolicy = {};
$scope.fillTopologyData = fillTopologyData;
$scope.broadcastFromRoot = broadcastFromRoot;
$scope.closeSidePanel = closeSidePanel;
+ $scope.openSfcDialog = openSfcDialog;
$scope.openSidePanel = openSidePanel;
$scope.setRootTenant = setRootTenant;
$scope.toggleExpanded = toggleExpanded;
$scope.highlightNode = highlightNode;
$scope.highlightLink = highlightLink;
$scope.fadeAll = fadeAll;
+ $scope.rootOpenEndpointDialog = rootOpenEndpointDialog;
+ $scope.rootDeleteEndpointDialog = rootDeleteEndpointDialog;
+ $scope.getEndpointsList = getEndpointsList;
RootGbpService.setMainClass();
init();
*
*/
function closeSidePanel() {
- $scope.sidePanelPage = false;
- NextTopologyService.fadeInAllLayers($rootScope.nxTopology);
+ if($scope.sidePanelPage) {
+ $scope.sidePanelPage = false;
+ $scope.fadeAll();
+ }
}
/**
*
*/
function deselectContract() {
- NextTopologyService.fadeInAllLayers($rootScope.nxTopology);
+ $scope.fadeAll();
$scope.sidePanelPage = 'resolved-policy/contract-sidepanel';
var obj = Object.keys($scope.resolvedPolicy).map(function(k) {
$scope.sidePanelObject = obj;
$scope.selectedNode = null;
+ $scope.activeObject = 'contract';
}
/**
*
*/
function deselectEpg() {
- NextTopologyService.fadeInAllLayers($rootScope.nxTopology);
+ $scope.fadeAll();
var elements;
$scope.sidePanelPage = 'resolved-policy/epg-sidepanel';
elements.get($scope.apiType, $scope.rootTenant);
$scope.sidePanelObject = elements;
$scope.selectedNode = null;
- }
-
- /**
- *
- */
- function enableButtons() {
- $scope.policyDisabled = false;
+ $scope.activeObject = 'epg';
}
/**
*
*/
function fadeAll() {
- NextTopologyService.fadeInAllLayers($rootScope.nxTopology);
+ $rootScope.nxTopology && NextTopologyService.fadeInAllLayers($rootScope.nxTopology);
}
/**
*
*/
function fillTopologyData() {
- var topoData = {nodes: [], links: [],},
- filteredResolvedPolicies = $filter('filter')(resolvedPolicies.data, {'consumer-tenant-id': $scope.rootTenant, 'provider-tenant-id': $scope.rootTenant});
+ if($scope.rootTenant) {
+ var topoData = {nodes: [], links: [],},
+ filteredResolvedPolicies = $filter('filter')(resolvedPolicies.data, {
+ 'consumer-tenant-id': $scope.rootTenant,
+ 'provider-tenant-id': $scope.rootTenant
+ });
- filteredResolvedPolicies && filteredResolvedPolicies.forEach(function(rp) {
- if(rp['consumer-tenant-id'] === $scope.rootTenant) {
- topoData.nodes.push(createNode(rp['consumer-epg-id'], rp['consumer-tenant-id']));
- }
- topoData.nodes.push(createNode(rp['provider-epg-id'], rp['provider-tenant-id']));
+ filteredResolvedPolicies && filteredResolvedPolicies.forEach(function(rp) {
+ if(rp['consumer-tenant-id'] === $scope.rootTenant) {
+ topoData.nodes.push(createNode(rp['consumer-epg-id'], rp['consumer-tenant-id']));
+ }
+ topoData.nodes.push(createNode(rp['provider-epg-id'], rp['provider-tenant-id']));
- fillResolvedPolicy(rp);
- topoData.links = getContracts(rp);
- });
+ fillResolvedPolicy(rp);
+ topoData.links = getContracts(rp);
+ });
- $scope.topologyData = topoData;
- $scope.topologyLoaded = true;
+ $scope.topologyData = topoData;
+ $scope.topologyLoaded = true;
+ }
}
/**
$scope.rootTenants.get('config');
}
+ /**
+ *
+ * @param chainName
+ */
+ function openSfcDialog(chainName) {
+ $mdDialog.show({
+ clickOutsideToClose: true,
+ controller: 'SfcTopologyController',
+ preserveScope: true,
+ templateUrl: $scope.viewPath + 'sfc/dialog-sfc-topology.tpl.html',
+ parent: angular.element(document.body),
+ scope: $scope,
+ locals: {
+ chainName: chainName,
+ },
+ });
+ }
+
+
/**
* Sets '$scope.sidePanelPage' to true. This variable is watched in index.tpl.html template
* and opens/closes side panel
if(object.constructor.name == 'Epg') {
$scope.endpoints.clearData();
$scope.endpoints.getByEpg(object.data.id);
+ $scope.activeObject = 'epg';
}
+ else
+ $scope.activeObject = 'contract';
+
var samePage = page === $scope.sidePanelPage;
$scope.selectedNode = object;
$scope.sidePanelPage = 'resolved-policy/contract-sidepanel';
$scope.sidePanelObject = obj[0];
$scope.selectedNode = obj[0];
+ $scope.activeObject = 'contract';
NextTopologyService.highlightLink($rootScope.nxTopology, obj[0].linkId);
}
*/
function openSidePanelChild(index, type) {
switch(type) {
- case 'subject':
- $scope.sidePanelPage = 'resolved-policy/subject-sidepanel';
- $scope.subjectIndex = index;
- break;
- case 'clause':
- $scope.sidePanelPage = 'resolved-policy/clause-sidepanel';
- $scope.clauseIndex = index;
- break;
- case 'rule':
- $scope.sidePanelPage = 'resolved-policy/rule-sidepanel';
- $scope.ruleIndex = index;
- break;
+ case 'subject':
+ $scope.sidePanelPage = 'resolved-policy/subject-sidepanel';
+ $scope.subjectIndex = index;
+ break;
+ case 'clause':
+ $scope.sidePanelPage = 'resolved-policy/clause-sidepanel';
+ $scope.clauseIndex = index;
+ break;
+ case 'rule':
+ $scope.sidePanelPage = 'resolved-policy/rule-sidepanel';
+ $scope.ruleIndex = index;
+ break;
}
}
*/
function openSidePanelTpl(tpl) {
switch(tpl) {
- case 'contract':
- $scope.sidePanelPage = 'resolved-policy/contract-sidepanel';
- break;
- case 'subject':
- $scope.sidePanelPage = 'resolved-policy/subject-sidepanel';
- break;
- case 'clause':
- $scope.sidePanelPage = 'resolved-policy/clause-sidepanel';
- break;
- case 'rule':
- $scope.sidePanelPage = 'resolved-policy/rule-sidepanel';
- break;
+ case 'contract':
+ $scope.sidePanelPage = 'resolved-policy/contract-sidepanel';
+ break;
+ case 'subject':
+ $scope.sidePanelPage = 'resolved-policy/subject-sidepanel';
+ break;
+ case 'clause':
+ $scope.sidePanelPage = 'resolved-policy/clause-sidepanel';
+ break;
+ case 'rule':
+ $scope.sidePanelPage = 'resolved-policy/rule-sidepanel';
+ break;
}
}
element['policy-rule-group'].forEach(function(el) {
var linkId = generateLinkId(el['contract-id'], providerEpgId, consumerEpgId);
+ $scope.resolvedPolicy = {};
+
if(!$scope.resolvedPolicy.hasOwnProperty(linkId)) {
$scope.resolvedPolicy[linkId] = {
'contract-id': el['contract-id'],
}
$scope.resolvedPolicy[linkId].subjects[el['subject-name']]['resolved-rule'].push(el['resolved-rule']);
- })
- })
+ });
+ });
}
/**
if($scope.stateUrl.startsWith('/resolved-policy')) {
fillTopologyData();
+ if($scope.sidePanelPage) {
+ if($scope.activeObject == 'epg')
+ deselectEpg();
+ else if($scope.activeObject == 'contract')
+ deselectContract();
+ }
}
}
}
}
+ function rootOpenEndpointDialog(operation, endpointData) {
+ $scope.disableKeyFieldsEditing = operation === 'edit';
+ $mdDialog.show({
+ clickOutsideToClose: true,
+ controller: 'AddEndpointController',
+ preserveScope: true,
+ templateUrl: $scope.viewPath + 'endpoints/dialog-add-endpoint.tpl.html',
+ parent: angular.element(document.body),
+ scope: $scope,
+ locals: {
+ endpoint: endpointData,
+ },
+ });
+ }
+
+ function rootDeleteEndpointDialog(endpointData) {
+ var confirm = $mdDialog.confirm()
+ .title('Delete endpoint')
+ .textContent('Do you want to delete endpoint?')
+ .ok('Delete')
+ .cancel('Cancel');
+
+ $mdDialog.show(confirm).then(function () {
+ endpointData.deleteEndpoint(function () {
+ getEndpointsList();
+ });
+ }, function () {
+
+ });
+ }
+
+ function getEndpointsList() {
+ $scope.endpoints.clearData();
+ $scope.endpoints.getByEpg($scope.selectedNode.data.id);
+ }
+
/* event listeners */
/**
* Event fired after content loaded, setStateUrl function is called to fill stateUrl method