294536de65160dab9a19e3034699707d79c314e8
[vid.git] / vid-webpack-master / src / app / shared / storeUtil / utils / vfModule / vfModule.reducers.ts
1 import {Action} from "redux";
2 import * as _ from "lodash";
3 import {
4   CreateVFModuleInstanceAction,
5   DeleteActionVfModuleInstanceAction,
6   DeleteVFModuleField,
7   DeleteVfModuleInstanceAction,
8   PauseVFModuleInstanciationAction,
9   UndoDeleteActionVfModuleInstanceAction,
10   UpdateVFModluePosition,
11   UpdateVFModuleField,
12   UpdateVFModuleInstanceAction,
13   UpgradeVfModuleInstanceAction,
14   VfModuleActions,
15 } from "./vfModule.actions";
16 import {ServiceInstance} from "../../../models/serviceInstance";
17 import {VfModuleMap} from "../../../models/vfModulesMap";
18 import {ServiceState} from "../main.reducer";
19 import {PauseStatus, ServiceInstanceActions} from "../../../models/serviceInstanceActions";
20 import {updateServiceValidationCounter} from "../reducersHelper";
21
22
23 export function vfModuleReducer(state: ServiceState , action: Action) : ServiceState{
24   switch (action.type) {
25     case VfModuleActions.CREATE_VF_MODULE: {
26       const updateVFModuleInstanceAction = <CreateVFModuleInstanceAction>action;
27       const vfInstance = updateVFModuleInstanceAction.vfInstance;
28       const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
29       const vfModuleId = updateVFModuleInstanceAction.vfId;
30       const vnfStoreKey = updateVFModuleInstanceAction.vnfStoreKey;
31
32       let newState = Object.assign({}, state);
33
34       let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] || new VfModuleMap();
35       let randomId = generateId();
36       vfInstance.action = ServiceInstanceActions.Create;
37       vfModulesMap[vfModuleId + randomId] = vfInstance;
38       updateUniqueNames(null, vfInstance.instanceName, newState.serviceInstance[serviceUuid]);
39       updateUniqueNames(null, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]);
40       updateServiceValidationCounter(newState, false, vfInstance['isMissingData'], serviceUuid);
41
42       newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] = vfModulesMap;
43       return newState;
44     }
45     case VfModuleActions.UPDATE_VF_MODULE: {
46       const updateVFModuleInstanceAction = <UpdateVFModuleInstanceAction>action;
47       const vfInstance = updateVFModuleInstanceAction.vfInstance;
48       const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
49       const vfModuleId = updateVFModuleInstanceAction.vfId;
50       const newState = _.cloneDeep(state);
51       const vnfs = newState.serviceHierarchy[serviceUuid].vnfs;
52       let vnfId = getVfModuleParentVnfId(vnfs, vfModuleId);
53       const vnfStoreKey = updateVFModuleInstanceAction.vnfStoreKey;
54       if (!_.isNil(vnfStoreKey)) {
55         vnfId = vnfStoreKey;
56       }
57       let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] || new VfModuleMap();
58       updateServiceValidationCounter(newState, vfModulesMap[updateVFModuleInstanceAction.dynamicModelName]['isMissingData'], vfInstance.isMissingData, serviceUuid);
59       updateUniqueNames(vfModulesMap[updateVFModuleInstanceAction.dynamicModelName].instanceName, vfInstance.instanceName, newState.serviceInstance[serviceUuid]);
60       updateUniqueNames(vfModulesMap[updateVFModuleInstanceAction.dynamicModelName].volumeGroupName, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]);
61       vfModulesMap[updateVFModuleInstanceAction.dynamicModelName] = vfInstance;
62       newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap;
63       return newState;
64     }
65     case VfModuleActions.REMOVE_VNF_MODULE_INSTANCE: {
66       const actionData = (<DeleteVfModuleInstanceAction>action);
67       if (state.serviceInstance[actionData.serviceModelId]) {
68         let vfModulesMap = state.serviceInstance[actionData.serviceModelId].vnfs[actionData.vnfStoreKey].vfModules;
69         updateIsMissingDataOnDeleteVFModule(state, actionData.serviceModelId, actionData.vnfStoreKey, actionData.modelName);
70         updateUniqueNames(vfModulesMap[actionData.modelName][actionData.dynamicModelName].instanceName, null, state.serviceInstance[actionData.serviceModelId] );
71         updateUniqueNames(vfModulesMap[actionData.modelName][actionData.dynamicModelName].volumeGroupName, null, state.serviceInstance[actionData.serviceModelId] );
72         delete vfModulesMap[actionData.modelName][actionData.dynamicModelName];
73         if(_.isEmpty(vfModulesMap[actionData.modelName])){
74           delete vfModulesMap[actionData.modelName];
75         }
76       }
77       return Object.assign({}, state);
78     }
79     case VfModuleActions.PAUSE_ACTION_VFMODULE_INSTANCE : {
80       const pauseVfModuleAction = (<PauseVFModuleInstanciationAction>action);
81       let newState = _.cloneDeep(state);
82
83       newState.serviceInstance[pauseVfModuleAction.serviceId].vnfs[pauseVfModuleAction.vnfStoreKey]
84       .vfModules[pauseVfModuleAction.vfModuleModelName][pauseVfModuleAction.dynamicModelName]
85         .pauseInstantiation = PauseStatus.AFTER_COMPLETION;
86       return newState;
87     }
88
89     case VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE : {
90       const deleteAction = (<DeleteActionVfModuleInstanceAction>action);
91       let newState = _.cloneDeep(state);
92       let vfModule = newState.serviceInstance[deleteAction.serviceId].vnfs[deleteAction.vnfStoreKey]
93         .vfModules[deleteAction.vfModuleModelName][deleteAction.dynamicModelName];
94       let oldAction = vfModule.action;
95       if (oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
96       newState.serviceInstance[deleteAction.serviceId].vnfs[deleteAction.vnfStoreKey]
97         .vfModules[deleteAction.vfModuleModelName][deleteAction.dynamicModelName].action = (oldAction + '_Delete') as ServiceInstanceActions;
98       setLcpCloudRegionIdAndTenantIdFromVnf(newState, deleteAction.serviceId, deleteAction.vnfStoreKey, deleteAction.vfModuleModelName, deleteAction.dynamicModelName);
99       updateIsMissingDataOnDeleteVFModule(newState, deleteAction.serviceId, deleteAction.vnfStoreKey, deleteAction.vfModuleModelName);
100
101       return newState;
102     }
103     case VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE : {
104       const undoDeleteAction = (<UndoDeleteActionVfModuleInstanceAction>action);
105       let newState = _.cloneDeep(state);
106       let vfModule = newState.serviceInstance[undoDeleteAction.serviceId].vnfs[undoDeleteAction.vnfStoreKey]
107         .vfModules[undoDeleteAction.vfModuleModelName][undoDeleteAction.dynamicModelName];
108
109           let oldAction = vfModule.action;
110           newState.serviceInstance[undoDeleteAction.serviceId].vnfs[undoDeleteAction.vnfStoreKey]
111             .vfModules[undoDeleteAction.vfModuleModelName][undoDeleteAction.dynamicModelName].action = (oldAction.split('_')[0]) as ServiceInstanceActions;
112           updateIsMissingDataOnDeleteVFModule(newState, undoDeleteAction.serviceId, undoDeleteAction.vnfStoreKey, undoDeleteAction.vfModuleModelName);
113       return newState;
114     }
115
116     case VfModuleActions.UPDATE_VFMODULE_POSITION : {
117       const updateVFModluePosition = <UpdateVFModluePosition>action;
118       const serviceUuid = updateVFModluePosition.instanceId;
119       const dynamicModelName = updateVFModluePosition.node.dynamicModelName;
120       const modelName = updateVFModluePosition.node.modelName;
121       const newState = _.cloneDeep(state);
122
123       newState.serviceInstance[serviceUuid].vnfs[updateVFModluePosition.vnfStoreKey].vfModules[modelName][dynamicModelName].position = updateVFModluePosition.node.position;
124       return newState;
125     }
126
127     case VfModuleActions.UPGRADE_VFMODULE : {
128       let clonedState = _.cloneDeep(state);
129       const upgradeAction = (<UpgradeVfModuleInstanceAction>action);
130       let oldAction = clonedState
131         .serviceInstance[upgradeAction.serviceId]
132         .vnfs[upgradeAction.vnfStoreKey]
133         .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
134         .action;
135       if(!_.isNil(oldAction) && oldAction.includes("Upgrade")) {
136         return clonedState;
137       }
138       clonedState.serviceInstance[upgradeAction.serviceId]
139         .vnfs[upgradeAction.vnfStoreKey]
140         .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
141         .action = (`${oldAction}_Upgrade`) as ServiceInstanceActions;
142       return clonedState;
143     }
144     case VfModuleActions.UNDO_UPGRADE_VFMODULE_ACTION : {
145       let clonedState = _.cloneDeep(state);
146       const upgradeAction = (<UpgradeVfModuleInstanceAction>action);
147       let oldAction = clonedState
148         .serviceInstance[upgradeAction.serviceId]
149         .vnfs[upgradeAction.vnfStoreKey]
150         .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
151         .action;
152       if(!_.isNil(oldAction) && oldAction.includes("Upgrade")) {
153         clonedState.serviceInstance[upgradeAction.serviceId]
154           .vnfs[upgradeAction.vnfStoreKey]
155           .vfModules[upgradeAction.modelName][upgradeAction.dynamicModelName]
156           .action = ServiceInstanceActions.None;
157       }
158       return clonedState;
159     }
160     case VfModuleActions.UPDATE_VFMODULE_FEILD : {
161       let clonedState = _.cloneDeep(state);
162       let updateFieldAction =  <UpdateVFModuleField> action;
163
164         clonedState.serviceInstance[updateFieldAction.serviceId]
165           .vnfs[updateFieldAction.vnfStoreKey]
166           .vfModules[updateFieldAction.modelName][updateFieldAction.dynamicModelName][updateFieldAction.fieldName] =  updateFieldAction.fieldValue;
167
168       return clonedState;
169     }
170     case VfModuleActions.DELETE_VFMODULE_FIELD : {
171       let clonedState = _.cloneDeep(state);
172       let deleteAction =  <DeleteVFModuleField> action;
173
174       delete clonedState.serviceInstance[deleteAction.serviceId]
175         .vnfs[deleteAction.vnfStoreKey]
176         .vfModules[deleteAction.modelName][deleteAction.dynamicModelName][deleteAction.deleteFieldName];
177
178       return clonedState;
179     }
180   }
181 }
182
183 const updateIsMissingDataOnDeleteVFModule = (state: any, serviceModelId: string, vnfStoreKey: string, vfModuleName): void => {
184   const vfModules = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[vfModuleName];
185
186   _.forOwn(vfModules, (vfModuleInstance) => {
187     let isMissingData: boolean = vfModuleInstance.isMissingData;
188     updateServiceValidationCounter(state, isMissingData, false, serviceModelId);
189   });
190 };
191
192 const  setLcpCloudRegionIdAndTenantIdFromVnf = (state: any, serviceModelId: string, vnfStoreKey: string, key: string, firstKey: string) :void => {
193   let tenantId = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].tenantId;
194   let lcpCloudRegion = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].lcpCloudRegionId;
195
196   state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[key][firstKey].tenantId = tenantId;
197   state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[key][firstKey].lcpCloudRegionId = lcpCloudRegion;
198 }
199
200 const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => {
201   let existingNames = serviceInstance.existingNames;
202   if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
203     delete existingNames[oldName.toLowerCase()];
204   }
205   if(!_.isNil(newName)) {
206     existingNames[newName.toLowerCase()] = "";
207   }
208 };
209
210
211 const generateId = () => {
212   return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
213 };
214 const getVfModuleParentVnfId = (vnfs: object, vfModuleId: string) => {
215   let vnfId = undefined;
216   _.forOwn(vnfs, (value, key) => {
217     if (vnfs[key].vfModules && vnfs[key].vfModules[vfModuleId]) {
218       vnfId = vnfs[key].modelCustomizationName;
219       return false;
220     }
221   });
222   return vnfId;
223 };
224
225
226
227
228
229
230
231
232
233