1 import {Injectable} from "@angular/core";
2 import {NgRedux} from "@angular-redux/store";
3 import {AppState} from "../../../../../../../shared/store/reducers";
4 import {AaiService} from "../../../../../../../shared/services/aaiService/aai.service";
9 } from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model";
10 import {ElementsTableService} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.service";
12 clearAllGenericModalhelper,
13 updateGenericModalhelper
14 } from "../../../../../../../shared/storeUtil/utils/global/global.actions";
15 import {Observable} from "rxjs";
16 import {CustomTableColumnDefinition} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.component";
17 import {VPNModalRow} from "./vpn.step.model";
18 import {NetworkStepService} from "../networkStep/network.step.service";
19 import * as _ from "lodash";
22 clearAssociateVRFMemberInstance,
24 } from "../../../../../../../shared/storeUtil/utils/vrf/vrf.actions";
25 import {calculateNextUniqueModelName} from "../../../../../../../shared/storeUtil/utils/reducersHelper";
28 export class VpnStepService {
29 constructor(private _store: NgRedux<AppState>, private _aaiService: AaiService, private _networkStepService: NetworkStepService) {
32 uniqObjectField: string = "instanceId";
35 getVpnStep = (serviceInstance, serviceModelId, ...otherSteps): ModalInformation => {
38 serviceModelId: serviceModelId,
39 title: 'Associate VPN',
40 description: 'Select a VPN to associate to the VRF Entry',
41 noElementsMsg: 'No VPN instances were found.',
43 uniqObjectField: this.uniqObjectField,
44 backAction: (searchElementsModalComponent) => {
45 ElementsTableService.changeModalInformationDataTrigger.next({
46 modalInformation: otherSteps[1].getNetworkStep(serviceInstance, searchElementsModalComponent.modalInformation.serviceModelId, ...otherSteps),
47 selectedRowsIds: [this._store.getState().global.genericModalHelper.selectedNetwork.instanceUUID]
52 action: (searchElementsModalComponent) => {
53 let currentVRF = this._store.getState().global.genericModalHelper['currentVRF'];
54 const vrfStoreKey: string = _.isNil(currentVRF['vrfStoreKey'])
55 ? calculateNextUniqueModelName(currentVRF['model']['name'], searchElementsModalComponent.modalInformation.serviceModelId, this._store.getState().service, 'vrfs')
56 : currentVRF['vrfStoreKey'];
59 if (_.isNil(currentVRF['vrfStoreKey'])) {
60 this._store.dispatch(createVrfInstance(currentVRF['model'], serviceModelId, vrfStoreKey));
62 this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'networks'));
63 this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'vpns'));
66 this.associateVrfVPNMember(searchElementsModalComponent, vrfStoreKey);
67 this.associateVrfNetworkMember(searchElementsModalComponent, vrfStoreKey);
69 this._store.dispatch(clearAllGenericModalhelper());
70 searchElementsModalComponent.closeDialog();
73 getElements: () => this.getVPNs(),
75 searchFields: this.getsVPNStepSearchFields(),
76 tableHeaders: this.getVPNStepHeaders(),
77 tableContent: this.getVPNTableContent()
81 getVPNs = (): Observable<any[]> => {
82 return this._aaiService.retrieveActiveVPNs().map((vpns: VPNModalRow[]) => {
83 return this.sortElementsResultByField(vpns, "instanceName");
87 sortElementsResultByField = (elements, fieldName): any[] => {
88 return _.sortBy(elements, o => o[fieldName]);
91 associateVrfVPNMember = (searchElementsModalComponent, vrfStoreKey): void => {
92 let tmpMembers = searchElementsModalComponent._membersTableService.allElementsStatusMap;
93 for (let key in tmpMembers) {
94 if (tmpMembers[key].isSelected) {
95 this._store.dispatch(updateGenericModalhelper(`selected${this.type}`, tmpMembers[key], this.uniqObjectField));
96 this._store.dispatch(associateVRFMember(vrfStoreKey, searchElementsModalComponent.modalInformation.serviceModelId, tmpMembers[key], 'vpns'));
101 associateVrfNetworkMember = (searchElementsModalComponent, vrfStoreKey): void => {
102 let selectedNetworks = this._store.getState().global.genericModalHelper['selectedNetwork'];
103 for (let key in selectedNetworks) {
104 this._store.dispatch(associateVRFMember(vrfStoreKey, searchElementsModalComponent.modalInformation.serviceModelId, selectedNetworks[key], 'networks'));
108 getsVPNStepSearchFields = (): ISearchField[] => {
113 value: "SERVICE-INFRASTRUCTURE",
119 getVPNStepHeaders = (): CustomTableColumnDefinition[] => {
121 {displayName: `VPN instance name`, key: ['instanceName']},
122 {displayName: `Version`, key: ['modelInfo', 'modelVersionId']},
123 {displayName: `Instance ID`, key: ['instanceId']},
124 {displayName: `Platform`, key: ['platformName']},
125 {displayName: 'Region', key: ['region']},
126 {displayName: 'Route target', key: ['routeTargets', 'globalRouteTarget'], type: 'LIST'},
127 {displayName: 'Route target role', key: ['routeTargets', 'routeTargetRole'], type: 'LIST'},
128 {displayName: 'Customer VPN ID', key: ['customerId']},
132 getVPNTableContent = (): ITableContent[] => {
138 value: ['instanceName']
142 id: 'model-version-id',
144 id: ['model-version-id'],
145 value: ['modelInfo', 'modelVersionId']
152 value: ['instanceId']
158 id: ['vpn-platform'],
159 value: ['platformName']
170 id: 'global-route-target',
172 id: ['global-route-target'],
173 value: ['routeTargets', 'globalRouteTarget'],
178 id: 'route-target-role',
180 id: ['route-target-role'],
181 value: ['routeTargets', 'routeTargetRole'],
186 id: 'customer-vpn-id',
188 id: ['customer-vpn-id'],
189 value: ['customerId']