Adding unlimited max value to VNF, NETWORK
[vid.git] / vid-webpack-master / src / app / drawingBoard / service-planning / objectsToTree / models / vrf / vrf.model.info.ts
1 import {ILevelNodeInfo} from "../basic.model.info";
2 import {ComponentInfoType} from "../../../component-info/component-info-model";
3 import {ITreeNode} from "angular-tree-component/dist/defs/api";
4 import {AvailableNodeIcons} from "../../../available-models-tree/available-models-tree.service";
5 import {ModelInformationItem} from "../../../../../shared/components/model-information/model-information.component";
6 import {VrfInstance} from "../../../../../shared/models/vrfInstance";
7 import {VrfTreeNode} from "../../../../../shared/models/vrfTreeNode";
8 import {VrfModel} from "../../../../../shared/models/vrfModel";
9 import {NgRedux} from "@angular-redux/store";
10 import {AppState} from "../../../../../shared/store/reducers";
11 import {SharedTreeService} from "../../shared.tree.service";
12 import {DialogService} from 'ng2-bootstrap-modal';
13 import {SearchElementsModalComponent} from "../../../../../shared/components/searchMembersModal/search-elements-modal.component";
14 import {IframeService} from "../../../../../shared/utils/iframe.service";
15 import {NetworkStepService} from "./vrfModal/networkStep/network.step.service";
16 import {VpnStepService} from "./vrfModal/vpnStep/vpn.step.service";
17 import {NetworkModelInfo} from "../network/network.model.info";
18 import {VpnModelInfo} from "../vpn/vpn.model.info";
19 import {
20   clearAllGenericModalhelper,
21   updateGenericModalhelper,
22   updateGenericModalTableDataHelper
23 } from "../../../../../shared/storeUtil/utils/global/global.actions";
24 import {
25   deleteActionVrfInstance,
26   undoDeleteActionVrfInstance
27 } from "../../../../../shared/storeUtil/utils/vrf/vrf.actions";
28 import * as _ from "lodash";
29 import {FeatureFlagsService} from "../../../../../shared/services/featureFlag/feature-flags.service";
30
31 export class VrfModelInfo implements ILevelNodeInfo {
32   constructor(private _store: NgRedux<AppState>,
33               private _sharedTreeService: SharedTreeService,
34               private _dialogService: DialogService,
35               private _iframeService: IframeService,
36               private _featureFlagsService : FeatureFlagsService,
37               private _networkStepService: NetworkStepService,
38               private _vpnStepService: VpnStepService) {
39   }
40
41   name: string = 'vrfs';
42   type: string = 'VRF';
43   typeName: string = 'VRF';
44   childNames: string [] = ["networks", "vpns"];
45   componentInfoType = ComponentInfoType.VRF;
46
47   isEcompGeneratedNaming(currentModel): boolean {
48     return false;
49   }
50
51   updateDynamicInputsDataFromModel = (currentModel): any => [];
52
53   getModel = (vrfModelId: string, instance: VrfInstance, serviceHierarchy): VrfModel => {
54     const originalModelName = instance.originalName ? instance.originalName : vrfModelId;
55     return new VrfModel(serviceHierarchy[this.name][originalModelName]);
56   };
57
58
59   createInstanceTreeNode = (instance: VrfInstance, model: VrfModel, parentModel, storeKey: string): VrfTreeNode => {
60     let node = new VrfTreeNode(instance, model, storeKey);
61     node.missingData = this.hasMissingData(instance, node, model.isEcompGeneratedNaming);
62     node.typeName = this.typeName;
63     node.menuActions = this.getMenuAction(<any>node, model.uuid);
64     node.isFailed = _.isNil(instance.isFailed) ? false : instance.isFailed;
65     node.statusMessage = !_.isNil(instance.statusMessage) ? instance.statusMessage : "";
66     return node;
67   };
68
69
70   getNextLevelObject = (nextLevelType: string): any => {
71     if (nextLevelType === 'vpns') {
72       return new VpnModelInfo(this._store, this._sharedTreeService);
73     } else {
74       if (nextLevelType === 'networks') {
75         return new NetworkModelInfo(null, this._sharedTreeService, null, null, null, null, null,this._featureFlagsService,  this._store);
76       }
77     }
78   };
79
80   getTooltip = (): string => 'VRF';
81
82   getType = (): string => 'VRF';
83
84   hasMissingData(instance, dynamicInputs: any, isEcompGeneratedNaming: boolean): boolean {
85     return false;
86   }
87
88   onClickAdd(node, serviceModelId: string): void {
89     this._store.dispatch(clearAllGenericModalhelper());
90     this._store.dispatch(updateGenericModalTableDataHelper('currentVRF', {
91       model: this._store.getState().service.serviceHierarchy[serviceModelId].vrfs[node.data.name],
92       instance: null
93     }));
94     this._iframeService.addFullScreen();
95     let modalSteps = [this._vpnStepService, this._networkStepService];
96     const serviceInstance = this._store.getState().service.serviceInstance[serviceModelId];
97     this._dialogService.addDialog(SearchElementsModalComponent, {
98         modalInformation: this._networkStepService.getNetworkStep(serviceInstance, serviceModelId, ...modalSteps)
99       }
100     )
101   }
102
103   getNodeCount(node: ITreeNode, serviceModelId: string): number {
104     //TODO
105     return 0;
106   }
107
108   showNodeIcons(node: ITreeNode, serviceModelId: string): AvailableNodeIcons {
109     const serviceHierarchy = this._store.getState().service.serviceHierarchy[serviceModelId];
110
111     let counter: number = !_.isNil(this._store.getState().service.serviceInstance[serviceModelId]) ?
112       (this._store.getState().service.serviceInstance[serviceModelId].existingVRFCounterMap[node.data.modelUniqueId] || 0) : 0;
113     counter -= this._sharedTreeService.getExistingInstancesWithDeleteMode(node, serviceModelId, 'vrfs');
114     const model = node.data.getModel(node.data.name, node.data, serviceHierarchy);
115     const maxInstances: number = model.max;
116     const isReachedLimit = !(maxInstances > counter);
117     const showAddIcon = this._sharedTreeService.shouldShowAddIcon() && !isReachedLimit;
118
119     return new AvailableNodeIcons(showAddIcon, isReachedLimit)
120   }
121
122   getMenuAction(node: ITreeNode, serviceModelId: string): { [methodName: string]: { method: Function, visible: Function, enable: Function } } {
123     return <any>{
124       changeAssociations: {
125         method: (node, serviceModelId) => {
126           let modalSteps = [this._vpnStepService, this._networkStepService];
127           this._store.dispatch(clearAllGenericModalhelper());
128           const vrfInstance = this._store.getState().service.serviceInstance[serviceModelId].vrfs[node.data.vrfStoreKey];
129           const vrfModel = this._store.getState().service.serviceHierarchy[serviceModelId].vrfs[node.data.name];
130           this._store.dispatch(updateGenericModalTableDataHelper('currentVRF', {
131             model: vrfModel,
132             instance: vrfInstance,
133             vrfStoreKey: node.data.vrfStoreKey
134           }));
135
136
137           for (let networkKey in vrfInstance.networks) {
138             this._store.dispatch(updateGenericModalhelper(`selectedNetwork`, vrfInstance.networks[networkKey], modalSteps[1].uniqObjectField));
139           }
140
141           for (let networkKey in vrfInstance.vpns) {
142             this._store.dispatch(updateGenericModalhelper(`selectedVPN`, vrfInstance.vpns[networkKey], modalSteps[0].uniqObjectField));
143           }
144
145           this._iframeService.addFullScreen();
146
147           const serviceInstance = this._store.getState().service.serviceInstance[serviceModelId];
148           this._dialogService.addDialog(SearchElementsModalComponent, {
149               modalInformation: this._networkStepService.getNetworkStep(serviceInstance, serviceModelId, ...modalSteps)
150             }
151           )
152         },
153         visible: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node),
154         enable: (node) => this._sharedTreeService.shouldShowRemoveAndEdit(node),
155       },
156       delete: {
157         method: (node, serviceModelId) => {
158           this._store.dispatch(deleteActionVrfInstance(node.data.vrfStoreKey, serviceModelId));
159         },
160         visible: (node) => this._sharedTreeService.shouldShowDelete(node),
161         enable: (node) => this._sharedTreeService.shouldShowDelete(node)
162       },
163       undoDelete: {
164         method: (node, serviceModelId) => {
165           this._store.dispatch(undoDeleteActionVrfInstance(node.data.vrfStoreKey, serviceModelId));
166         },
167         visible: (node) => this._sharedTreeService.shouldShowUndoDelete(node),
168         enable: (node, serviceModelId) => this._sharedTreeService.shouldShowUndoDelete(node) && !this._sharedTreeService.isServiceOnDeleteMode(serviceModelId)
169       }
170     }
171   }
172
173   updatePosition(that, node, instanceId): void {
174     //TODO
175   }
176
177   getNodePosition(instance): number {
178     //TODO
179     return 0;
180   }
181
182   getInfo(model, instance): ModelInformationItem[] {
183     const modelInformation = !_.isEmpty(model) ? [
184       ModelInformationItem.createInstance("Min instances", "1"),
185       ModelInformationItem.createInstance("Max instances", "1"),
186       ModelInformationItem.createInstance("Association", "L3-Network - VPN")] : [];
187     return modelInformation;
188   }
189 }
190