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', 'TenantService', '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, TenantService, 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.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;
+ NextTopologyService.fadeInAllLayers($rootScope.nxTopology);
+ }
}
/**
$scope.sidePanelObject = obj;
$scope.selectedNode = null;
+ $scope.activeObject = 'contract';
}
/**
elements.get($scope.apiType, $scope.rootTenant);
$scope.sidePanelObject = elements;
$scope.selectedNode = null;
- }
-
- /**
- *
- */
- function enableButtons() {
- $scope.policyDisabled = false;
+ $scope.activeObject = 'epg';
}
/**
*
*/
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;
+ }
}
/**
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
<div layout="row" class="layout-row">
<span>Endpoints ({{endpoints.data.length}})</span>
<span class="flex" flex></span>
- <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="expandAll(endpoints.data)" aria-label="Expand all">
- <i class="fa fa-expand ng-scope"></i>
- <div class="md-ripple-container"></div>
- <md-tooltip md-direction="bottom">
- Expand all
- </md-tooltip>
- </md-button>
- <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="collapseAll(endpoints.data)" aria-label="Collapse all">
- <i class="fa fa-compress ng-scope"></i>
- <div class="md-ripple-container"></div>
- <md-tooltip md-direction="bottom">
- Collapse all
- </md-tooltip>
- </md-button>
+ <span ng-if="endpoints.data.length">
+ <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="expandAll(endpoints.data)" aria-label="Expand all">
+ <i class="fa fa-expand ng-scope"></i>
+ <div class="md-ripple-container"></div>
+ <md-tooltip md-direction="bottom">
+ Expand all
+ </md-tooltip>
+ </md-button>
+ <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="collapseAll(endpoints.data)" aria-label="Collapse all">
+ <i class="fa fa-compress ng-scope"></i>
+ <div class="md-ripple-container"></div>
+ <md-tooltip md-direction="bottom">
+ Collapse all
+ </md-tooltip>
+ </md-button>
+ </span>
</div>
</md-subheader>
<md-list class="expander">
<ng-repeat ng-repeat="endpoint in endpoints.data">
+ <md-button class="md-icon-button" ng-click="rootOpenEndpointDialog('edit', endpoint)">
+ <md-icon>edit</md-icon>
+ </md-button>
+ <md-button class="md-icon-button" ng-click="rootDeleteEndpointDialog(endpoint)">
+ <md-icon>delete</md-icon>
+ </md-button>
<md-list-item ng-click="toggleExpanded(endpoint)">
<span>{{endpoint.data['context-id']}}</span>
<md-content ng-show="endpoint.expanded" class="md-whiteframe-2dp ng-scope layout-margin">
<div layout="row" class="layout-row">
<span>Actions ({{selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].action.length}})</span>
<span class="flex" flex></span>
- <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="expandAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].action)" aria-label="Expand all">
- <i class="fa fa-expand ng-scope"></i>
- <div class="md-ripple-container"></div>
- <md-tooltip md-direction="bottom">
- Expand all
- </md-tooltip>
- </md-button>
- <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="collapseAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].action)" aria-label="Collapse all">
- <i class="fa fa-compress ng-scope"></i>
- <div class="md-ripple-container"></div>
- <md-tooltip md-direction="bottom">
- Collapse all
- </md-tooltip>
- </md-button>
+ <span ng-if="selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].action.length">
+ <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="expandAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].action)" aria-label="Expand all">
+ <i class="fa fa-expand ng-scope"></i>
+ <div class="md-ripple-container"></div>
+ <md-tooltip md-direction="bottom">
+ Expand all
+ </md-tooltip>
+ </md-button>
+ <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="collapseAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].action)" aria-label="Collapse all">
+ <i class="fa fa-compress ng-scope"></i>
+ <div class="md-ripple-container"></div>
+ <md-tooltip md-direction="bottom">
+ Collapse all
+ </md-tooltip>
+ </md-button>
+ </span>
</div>
</md-subheader>
<md-list class="expander">
<div layout="row" class="layout-row">
<span>Classifiers ({{selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].classifier.length}})</span>
<span class="flex" flex></span>
- <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="expandAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].classifier)" aria-label="Expand all">
- <i class="fa fa-expand ng-scope"></i>
- <div class="md-ripple-container"></div>
- <md-tooltip md-direction="bottom">
- Expand all
- </md-tooltip>
- </md-button>
- <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="collapseAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].classifier)" aria-label="Collapse all">
- <i class="fa fa-compress ng-scope"></i>
- <div class="md-ripple-container"></div>
- <md-tooltip md-direction="bottom">
- Collapse all
- </md-tooltip>
- </md-button>
+ <span ng-if="selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].classifier.length">
+ <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="expandAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].classifier)" aria-label="Expand all">
+ <i class="fa fa-expand ng-scope"></i>
+ <div class="md-ripple-container"></div>
+ <md-tooltip md-direction="bottom">
+ Expand all
+ </md-tooltip>
+ </md-button>
+ <md-button class="md-button md-primary md-button md-ink-ripple expand-button" type="button" ng-click="collapseAll(selectedNode.subjects[subjectIndex]['resolved-rule'][0][ruleIndex].classifier)" aria-label="Collapse all">
+ <i class="fa fa-compress ng-scope"></i>
+ <div class="md-ripple-container"></div>
+ <md-tooltip md-direction="bottom">
+ Collapse all
+ </md-tooltip>
+ </md-button>
+ </span>
</div>
</md-subheader>
<md-list class="expander">