5523cf1ffd24f1c0d642b7de02795a50cd83ed53
[vid.git] / vid-webpack-master / src / app / drawingBoard / service-planning / objectsToTree / models / vrf / vrfModal / vpnStep / vpn.step.service.ts
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";
5 import {
6   ISearchField,
7   ITableContent,
8   ModalInformation
9 } from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model";
10 import {ElementsTableService} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.service";
11 import {
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";
20 import {
21   associateVRFMember,
22   clearAssociateVRFMemberInstance,
23   createVrfInstance
24 } from "../../../../../../../shared/storeUtil/utils/vrf/vrf.actions";
25 import {calculateNextUniqueModelName} from "../../../../../../../shared/storeUtil/utils/vnf/vnf.reducers";
26
27 @Injectable()
28 export class VpnStepService {
29   constructor(private _store: NgRedux<AppState>, private _aaiService: AaiService, private _networkStepService: NetworkStepService) {
30   }
31
32   uniqObjectField: string = "instanceId";
33   type: string = "VPN";
34
35   getVpnStep = (serviceInstance, serviceModelId, ...otherSteps): ModalInformation => {
36     return {
37       type: this.type,
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.',
42       maxSelectRow: 1,
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]
48         });
49       },
50       topButton: {
51         text: 'SET VPN',
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'];
57
58
59           if (_.isNil(currentVRF['vrfStoreKey'])) {
60             this._store.dispatch(createVrfInstance(currentVRF['model'], serviceModelId, vrfStoreKey));
61           } else {
62             this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'networks'));
63             this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'vpns'));
64           }
65
66           this.associateVrfVPNMember(searchElementsModalComponent, vrfStoreKey);
67           this.associateVrfNetworkMember(searchElementsModalComponent, vrfStoreKey);
68
69           this._store.dispatch(clearAllGenericModalhelper());
70           searchElementsModalComponent.closeDialog();
71         }
72       },
73       getElements: () => this.getVPNs(),
74       criteria: [],
75       searchFields: this.getsVPNStepSearchFields(),
76       tableHeaders: this.getVPNStepHeaders(),
77       tableContent: this.getVPNTableContent()
78     };
79   };
80
81   getVPNs = (): Observable<any[]> => {
82     return this._aaiService.retrieveActiveVPNs().map((vpns: VPNModalRow[]) => {
83       return this.sortElementsResultByField(vpns, "instanceName");
84     });
85   };
86
87   sortElementsResultByField = (elements, fieldName): any[] => {
88     return _.sortBy(elements, o => o[fieldName]);
89   };
90
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'));
97       }
98     }
99   };
100
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'));
105     }
106   };
107
108   getsVPNStepSearchFields = (): ISearchField[] => {
109     return [
110       {
111         title: 'Type ',
112         dataTestId: 'Type',
113         value: "SERVICE-INFRASTRUCTURE",
114         type: "LABEL"
115       }
116     ]
117   };
118
119   getVPNStepHeaders = (): CustomTableColumnDefinition[] => {
120     return [
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']},
129     ];
130   };
131
132   getVPNTableContent = (): ITableContent[] => {
133     return [
134       {
135         id: 'vpn-name',
136         contents: [{
137           id: ['vpn-name'],
138           value: ['instanceName']
139         }]
140       },
141       {
142         id: 'model-version-id',
143         contents: [{
144           id: ['model-version-id'],
145           value: ['modelInfo', 'modelVersionId']
146         }]
147       },
148       {
149         id: 'vpn-id',
150         contents: [{
151           id: ['vpn-id'],
152           value: ['instanceId']
153         }]
154       },
155       {
156         id: 'vpn-platform',
157         contents: [{
158           id: ['vpn-platform'],
159           value: ['platformName']
160         }]
161       },
162       {
163         id: 'vpn-region',
164         contents: [{
165           id: ['vpn-region'],
166           value: ['region']
167         }]
168       },
169       {
170         id: 'global-route-target',
171         contents: [{
172           id: ['global-route-target'],
173           value: ['routeTargets', 'globalRouteTarget'],
174           type: 'LIST'
175         }]
176       },
177       {
178         id: 'route-target-role',
179         contents: [{
180           id: ['route-target-role'],
181           value: ['routeTargets', 'routeTargetRole'],
182           type: 'LIST'
183         }]
184       },
185       {
186         id: 'customer-vpn-id',
187         contents: [{
188           id: ['customer-vpn-id'],
189           value: ['customerId']
190         }]
191       }
192     ];
193   };
194
195 }