-define(['app/gbp/common/gbp.service', 'app/gbp/resolved-policy/resolved-policy.service'], function () {
+define([
+ 'app/gbp/common/gbp.service',
+ 'app/gbp/resolved-policy/resolved-policy-list.service',
+ 'app/gbp/endpoints/sxp-mapping-list.service'
+], function () {
'use strict';
angular.module('app.gbp').controller('RootGbpCtrl', RootGbpCtrl);
- RootGbpCtrl.$inject = ['$state', '$rootScope', '$scope', '$filter', '$mdDialog', 'RootGbpService',
- 'TenantListService', 'EpgListService', 'ResolvedPolicyService', 'NextTopologyService', 'EndpointsListService'];
+ RootGbpCtrl.$inject = ['$filter', '$mdDialog', '$rootScope', '$scope', '$state',
+ 'EndpointsListService', 'NextTopologyService', 'ResolvedPolicyListService', 'RootGbpService',
+ 'TenantListService', 'SxpMappingListService'];
- function RootGbpCtrl($state, $rootScope, $scope, $filter, $mdDialog, RootGbpService,
- TenantListService, EpgListService, ResolvedPolicyService, NextTopologyService, EndpointsListService) {
+ function RootGbpCtrl($filter, $mdDialog, $rootScope, $scope, $state,
+ EndpointsListService, NextTopologyService, ResolvedPolicyListService, RootGbpService,
+ TenantListService, SxpMappingListService) {
/* properties */
$scope.apiType = 'operational';
$scope.activeObject = null;
$scope.endpoints = EndpointsListService.createList();
+ $scope.endpointSgtList = SxpMappingListService.createList();
$scope.rootTenant = null;
$scope.rootTenants = TenantListService.createList();
$scope.resolvedPolicy = {};
$scope.sidePanelPage = false;
$scope.sidePanelPageEndpoint = false;
$scope.stateUrl = null;
- $scope.topologyData = {nodes: [], links: []};
+ $scope.topologyData = { nodes: [], links: [] };
$scope.viewPath = 'src/app/gbp/';
- var resolvedPolicies = ResolvedPolicyService.createObject();
- resolvedPolicies.get(fillTopologyData);
+ var resolvedPolicies = ResolvedPolicyListService.createList();
+ getResolvedPolicies();
/* methods */
- $scope.fillTopologyData = fillTopologyData;
$scope.broadcastFromRoot = broadcastFromRoot;
$scope.closeSidePanel = closeSidePanel;
$scope.openSfcDialog = openSfcDialog;
* @param arr
*/
function collapseAll(arr) {
- arr.forEach(function(element) {
+ arr.forEach(function (element) {
element.expanded = false;
});
}
* @param tenant
* @returns {{id: string, source: *, target: *, tenant: *}}
*/
- function createLink( source, target, contract, tenant) {
+ function createLink( linkId) {
+ var linkIdParts = linkId.split('_');
return {
- 'id': generateLinkId(contract, source, target),
- 'source': source,
- 'target': target,
- 'tenant': tenant,
+ 'id': linkId,
+ 'source': linkIdParts[1],
+ 'target': linkIdParts[2],
+ 'tenant': $scope.rootTenant
};
}
*
* @param nodeName
* @param tenantId
- * @returns {{id: *, tenantId: *, node-id: *, label: *}}
+ * @returns {Object}
*/
- function createNode(nodeName, tenantId) {
+ function createNode(nodeName) {
return {
'id': nodeName,
- 'tenantId' : tenantId,
+ 'tenantId': $scope.rootTenant,
'node-id': nodeName,
- 'label': nodeName,
+ 'label': nodeName
};
}
$scope.fadeAll();
$scope.sidePanelPage = 'resolved-policy/contract-sidepanel';
- var obj = Object.keys($scope.resolvedPolicy).map(function(k) {
- var obj = $scope.resolvedPolicy[k];
- obj.linkId = k;
+ $scope.sidePanelObject = Object.keys($scope.resolvedPolicy.contracts).map(function (k) {
+ var ob = $scope.resolvedPolicy.contracts[k];
+ ob.linkId = k;
- return obj;
+ return ob;
});
- $scope.sidePanelObject = obj;
$scope.selectedNode = null;
$scope.activeObject = 'contract';
}
*/
function deselectEpg() {
$scope.fadeAll();
- var elements;
-
$scope.sidePanelPage = 'resolved-policy/epg-sidepanel';
- elements = EpgListService.createList();
- elements.get($scope.apiType, $scope.rootTenant);
- $scope.sidePanelObject = elements;
+
+ $scope.sidePanelObject = Object.keys($scope.resolvedPolicy.epgs).map(function (k) {
+ var ob = $scope.resolvedPolicy.epgs[k];
+ ob.id = k;
+
+ return ob;
+ });
$scope.selectedNode = null;
$scope.activeObject = 'epg';
}
* @param arr
*/
function expandAll(arr) {
- arr.forEach(function(element) {
+ arr.forEach(function (element) {
element.expanded = true;
});
}
}
/**
- *
- * @param data
- */
- function fillResolvedPolicy(data) {
- if(data['policy-rule-group-with-endpoint-constraints']) {
- processPolicyRuleGroupWithEpConstraints(
- data['policy-rule-group-with-endpoint-constraints'],
- data['provider-epg-id'],
- data['consumer-epg-id']);
- }
-
- }
-
- /**
- *
+ * reads resolvedPolicies list, prepares nodes and links for topology and fills them
*/
function fillTopologyData() {
- if($scope.rootTenant) {
- var topoData = {nodes: [], links: [],},
- filteredResolvedPolicies = $filter('filter')(resolvedPolicies.data, {
- 'consumer-tenant-id': $scope.rootTenant,
- 'provider-tenant-id': $scope.rootTenant
- });
-
+ var tempTopoData = {nodes: [], links: []};
- 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);
- });
-
- $scope.topologyData = topoData;
- $scope.topologyLoaded = true;
- }
- }
+ $scope.resolvedPolicy = resolvedPolicies.aggregateResolvedPolicies();
+ console.log('resolved and aggregated', $scope.resolvedPolicy);
- /**
- *
- * @param contractId
- * @param providerEpgId
- * @param consumerEpgId
- * @returns {string}
- */
- function generateLinkId(contractId, providerEpgId, consumerEpgId) {
- return contractId + '_' + providerEpgId + '_' + consumerEpgId;
- }
+ tempTopoData.nodes = Object.keys($scope.resolvedPolicy.epgs).map(function (key) {
+ return createNode(key);
+ });
- /**
- *
- * @param data
- * @returns {Array}
- */
- function getContracts(data) {
- var retVal = [];
-
- if( data['policy-rule-group-with-endpoint-constraints'] &&
- data['policy-rule-group-with-endpoint-constraints'][0]['policy-rule-group']) {
- data['policy-rule-group-with-endpoint-constraints'][0]['policy-rule-group'].forEach(function(prg) {
- retVal.push(
- createLink(
- data['provider-epg-id'],
- data['consumer-epg-id'],
- prg['contract-id'],
- prg['tenant-id']
- )
- )
- });
- }
+ tempTopoData.links = Object.keys($scope.resolvedPolicy.contracts).map(function (key) {
+ return createLink(key);
+ });
- return retVal;
+ $scope.topologyData = tempTopoData;
+ $scope.topologyLoaded = true;
}
/**
return 0;
}
+ function getResolvedPolicies() {
+ if($scope.rootTenant) {
+ resolvedPolicies.get($scope.rootTenant, fillTopologyData);
+ }
+ }
+
/**
*
* @param node
function init() {
$scope.rootTenants.clearData();
$scope.rootTenants.get('config');
+ $state.go('main.gbp.index.resolvedPolicy');
+ $scope.endpointSgtList.get();
}
/**
parent: angular.element(document.body),
scope: $scope,
locals: {
- chainName: chainName,
- },
+ chainName: chainName
+ }
});
}
* and opens/closes side panel
*/
function openSidePanel(page, object, cbk) {
- 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;
* @param idElement
*/
function openSidePanelContract(idElement) {
- var obj = $filter('filter')(Object.keys($scope.resolvedPolicy).map(function(k) {
- var obj = $scope.resolvedPolicy[k];
+ var obj = $filter('filter')(Object.keys($scope.resolvedPolicy.contracts).map(function (k) {
+ var obj = $scope.resolvedPolicy.contracts[k];
obj.linkId = k;
return obj;
- }), {'contract-id': idElement});
+ }), { 'contract-id': idElement });
$scope.sidePanelPage = 'resolved-policy/contract-sidepanel';
$scope.sidePanelObject = obj[0];
* @param type
*/
function openSidePanelChild(index, type) {
- switch(type) {
+ switch (type) {
case 'subject':
$scope.sidePanelPage = 'resolved-policy/subject-sidepanel';
$scope.subjectIndex = index;
* @param tpl
*/
function openSidePanelTpl(tpl) {
- switch(tpl) {
+ switch (tpl) {
case 'contract':
$scope.sidePanelPage = 'resolved-policy/contract-sidepanel';
break;
}
}
- /**
- *
- * @param data
- * @param providerEpgId
- * @param consumerEpgId
- */
- function processPolicyRuleGroupWithEpConstraints(data, providerEpgId, consumerEpgId) {
- data.forEach(function(element) {
- 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'],
- 'subjects': {},
- };
- }
-
- if(!$scope.resolvedPolicy[linkId].subjects.hasOwnProperty(el['subject-name'])) {
- $scope.resolvedPolicy[linkId].subjects[el['subject-name']] = {'resolved-rule': []};
- }
-
- $scope.resolvedPolicy[linkId].subjects[el['subject-name']]['resolved-rule'].push(el['resolved-rule']);
- });
- });
- }
-
/**
*
*/
function setRootTenant() {
$scope.broadcastFromRoot('ROOT_TENANT_CHANGED');
- if($scope.stateUrl.startsWith('/resolved-policy')) {
- fillTopologyData();
+ if ($scope.stateUrl.startsWith('/resolved-policy')) {
+ getResolvedPolicies()
if($scope.sidePanelPage) {
if($scope.activeObject == 'epg')
deselectEpg();
$scope.stateUrl = $state.current.url;
closeSidePanel();
- if($scope.stateUrl.startsWith('/resolved-policy')) {
- fillTopologyData();
+ if ($scope.stateUrl.startsWith('/resolved-policy')) {
+ getResolvedPolicies()
}
}
* @param element
*/
function toggleExpanded(element) {
- if(typeof element !== 'string') {
- if(element.expanded)
- element.expanded = false;
- else
- element.expanded = true;
+ if (typeof element !== 'string') {
+ element.expanded = !element.expanded;
}
}
parent: angular.element(document.body),
scope: $scope,
locals: {
- endpoint: endpointData,
- },
+ endpoint: endpointData
+ }
});
}
$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