summaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts')
-rw-r--r--vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts195
1 files changed, 195 insertions, 0 deletions
diff --git a/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts
new file mode 100644
index 000000000..5523cf1ff
--- /dev/null
+++ b/vid-webpack-master/src/app/drawingBoard/service-planning/objectsToTree/models/vrf/vrfModal/vpnStep/vpn.step.service.ts
@@ -0,0 +1,195 @@
+import {Injectable} from "@angular/core";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../../../../../shared/store/reducers";
+import {AaiService} from "../../../../../../../shared/services/aaiService/aai.service";
+import {
+ ISearchField,
+ ITableContent,
+ ModalInformation
+} from "../../../../../../../shared/components/searchMembersModal/members-table/element-table-row.model";
+import {ElementsTableService} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.service";
+import {
+ clearAllGenericModalhelper,
+ updateGenericModalhelper
+} from "../../../../../../../shared/storeUtil/utils/global/global.actions";
+import {Observable} from "rxjs";
+import {CustomTableColumnDefinition} from "../../../../../../../shared/components/searchMembersModal/members-table/elements-table.component";
+import {VPNModalRow} from "./vpn.step.model";
+import {NetworkStepService} from "../networkStep/network.step.service";
+import * as _ from "lodash";
+import {
+ associateVRFMember,
+ clearAssociateVRFMemberInstance,
+ createVrfInstance
+} from "../../../../../../../shared/storeUtil/utils/vrf/vrf.actions";
+import {calculateNextUniqueModelName} from "../../../../../../../shared/storeUtil/utils/vnf/vnf.reducers";
+
+@Injectable()
+export class VpnStepService {
+ constructor(private _store: NgRedux<AppState>, private _aaiService: AaiService, private _networkStepService: NetworkStepService) {
+ }
+
+ uniqObjectField: string = "instanceId";
+ type: string = "VPN";
+
+ getVpnStep = (serviceInstance, serviceModelId, ...otherSteps): ModalInformation => {
+ return {
+ type: this.type,
+ serviceModelId: serviceModelId,
+ title: 'Associate VPN',
+ description: 'Select a VPN to associate to the VRF Entry',
+ noElementsMsg: 'No VPN instances were found.',
+ maxSelectRow: 1,
+ uniqObjectField: this.uniqObjectField,
+ backAction: (searchElementsModalComponent) => {
+ ElementsTableService.changeModalInformationDataTrigger.next({
+ modalInformation: otherSteps[1].getNetworkStep(serviceInstance, searchElementsModalComponent.modalInformation.serviceModelId, ...otherSteps),
+ selectedRowsIds: [this._store.getState().global.genericModalHelper.selectedNetwork.instanceUUID]
+ });
+ },
+ topButton: {
+ text: 'SET VPN',
+ action: (searchElementsModalComponent) => {
+ let currentVRF = this._store.getState().global.genericModalHelper['currentVRF'];
+ const vrfStoreKey: string = _.isNil(currentVRF['vrfStoreKey'])
+ ? calculateNextUniqueModelName(currentVRF['model']['name'], searchElementsModalComponent.modalInformation.serviceModelId, this._store.getState().service, 'vrfs')
+ : currentVRF['vrfStoreKey'];
+
+
+ if (_.isNil(currentVRF['vrfStoreKey'])) {
+ this._store.dispatch(createVrfInstance(currentVRF['model'], serviceModelId, vrfStoreKey));
+ } else {
+ this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'networks'));
+ this._store.dispatch(clearAssociateVRFMemberInstance(vrfStoreKey, serviceModelId, 'vpns'));
+ }
+
+ this.associateVrfVPNMember(searchElementsModalComponent, vrfStoreKey);
+ this.associateVrfNetworkMember(searchElementsModalComponent, vrfStoreKey);
+
+ this._store.dispatch(clearAllGenericModalhelper());
+ searchElementsModalComponent.closeDialog();
+ }
+ },
+ getElements: () => this.getVPNs(),
+ criteria: [],
+ searchFields: this.getsVPNStepSearchFields(),
+ tableHeaders: this.getVPNStepHeaders(),
+ tableContent: this.getVPNTableContent()
+ };
+ };
+
+ getVPNs = (): Observable<any[]> => {
+ return this._aaiService.retrieveActiveVPNs().map((vpns: VPNModalRow[]) => {
+ return this.sortElementsResultByField(vpns, "instanceName");
+ });
+ };
+
+ sortElementsResultByField = (elements, fieldName): any[] => {
+ return _.sortBy(elements, o => o[fieldName]);
+ };
+
+ associateVrfVPNMember = (searchElementsModalComponent, vrfStoreKey): void => {
+ let tmpMembers = searchElementsModalComponent._membersTableService.allElementsStatusMap;
+ for (let key in tmpMembers) {
+ if (tmpMembers[key].isSelected) {
+ this._store.dispatch(updateGenericModalhelper(`selected${this.type}`, tmpMembers[key], this.uniqObjectField));
+ this._store.dispatch(associateVRFMember(vrfStoreKey, searchElementsModalComponent.modalInformation.serviceModelId, tmpMembers[key], 'vpns'));
+ }
+ }
+ };
+
+ associateVrfNetworkMember = (searchElementsModalComponent, vrfStoreKey): void => {
+ let selectedNetworks = this._store.getState().global.genericModalHelper['selectedNetwork'];
+ for (let key in selectedNetworks) {
+ this._store.dispatch(associateVRFMember(vrfStoreKey, searchElementsModalComponent.modalInformation.serviceModelId, selectedNetworks[key], 'networks'));
+ }
+ };
+
+ getsVPNStepSearchFields = (): ISearchField[] => {
+ return [
+ {
+ title: 'Type ',
+ dataTestId: 'Type',
+ value: "SERVICE-INFRASTRUCTURE",
+ type: "LABEL"
+ }
+ ]
+ };
+
+ getVPNStepHeaders = (): CustomTableColumnDefinition[] => {
+ return [
+ {displayName: `VPN instance name`, key: ['instanceName']},
+ {displayName: `Version`, key: ['modelInfo', 'modelVersionId']},
+ {displayName: `Instance ID`, key: ['instanceId']},
+ {displayName: `Platform`, key: ['platformName']},
+ {displayName: 'Region', key: ['region']},
+ {displayName: 'Route target', key: ['routeTargets', 'globalRouteTarget'], type: 'LIST'},
+ {displayName: 'Route target role', key: ['routeTargets', 'routeTargetRole'], type: 'LIST'},
+ {displayName: 'Customer VPN ID', key: ['customerId']},
+ ];
+ };
+
+ getVPNTableContent = (): ITableContent[] => {
+ return [
+ {
+ id: 'vpn-name',
+ contents: [{
+ id: ['vpn-name'],
+ value: ['instanceName']
+ }]
+ },
+ {
+ id: 'model-version-id',
+ contents: [{
+ id: ['model-version-id'],
+ value: ['modelInfo', 'modelVersionId']
+ }]
+ },
+ {
+ id: 'vpn-id',
+ contents: [{
+ id: ['vpn-id'],
+ value: ['instanceId']
+ }]
+ },
+ {
+ id: 'vpn-platform',
+ contents: [{
+ id: ['vpn-platform'],
+ value: ['platformName']
+ }]
+ },
+ {
+ id: 'vpn-region',
+ contents: [{
+ id: ['vpn-region'],
+ value: ['region']
+ }]
+ },
+ {
+ id: 'global-route-target',
+ contents: [{
+ id: ['global-route-target'],
+ value: ['routeTargets', 'globalRouteTarget'],
+ type: 'LIST'
+ }]
+ },
+ {
+ id: 'route-target-role',
+ contents: [{
+ id: ['route-target-role'],
+ value: ['routeTargets', 'routeTargetRole'],
+ type: 'LIST'
+ }]
+ },
+ {
+ id: 'customer-vpn-id',
+ contents: [{
+ id: ['customer-vpn-id'],
+ value: ['customerId']
+ }]
+ }
+ ];
+ };
+
+}