removing retain assignments checkbox from upgade vfModule screen
[vid.git] / vid-webpack-master / src / app / shared / storeUtil / utils / vnf / vnf.reducers.ts
1 import {Action} from "redux";
2 import {VnfInstance} from "../../../models/vnfInstance";
3 import {
4   CreateVnfInstanceAction,
5   RemoveVnfInstanceAction,
6   UpdateVnfInstanceAction, UpdateVnfPosition, UpgradeVnfAction,
7   VNFActions
8 } from "./vnf.actions";
9 import * as _ from "lodash";
10 import {ServiceInstance} from "../../../models/serviceInstance";
11 import {ServiceState} from "../main.reducer";
12 import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
13 import {deleteFirstLevel, updateServiceValidationCounter} from "../reducersHelper";
14 import {ActionOnFirstLevel} from "../firstLevel/firstLevel.actions";
15
16 export function vnfReducer(state: ServiceState, action: Action): ServiceState {
17   switch (action.type) {
18     case VNFActions.CREATE_VNF_INSTANCE: {
19       const updateVnfInstanceAction = <CreateVnfInstanceAction>action;
20       const serviceUuid = updateVnfInstanceAction.serviceUuid;
21       let vnfModelName = updateVnfInstanceAction.vnfModelName;
22       let newState = _.cloneDeep(state);
23
24       updateVnfInstanceAction.vnfInstance.originalName = vnfModelName;
25       updateVnfInstanceAction.vnfModelName = calculateNextUniqueModelName(vnfModelName, serviceUuid, newState, 'vnfs');
26
27       let vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfModelName];
28       vnfInstance = new VnfInstance();
29       updateVnfInstanceAction.vnfInstance.vnfStoreKey = updateVnfInstanceAction.vnfModelName;
30       updateVnfInstanceAction.vnfInstance.originalName = vnfModelName;
31       vnfInstance.originalName = updateVnfInstanceAction.vnfInstance.originalName;
32       vnfInstance.vnfStoreKey = updateVnfInstanceAction.vnfInstance.vnfStoreKey;
33       updateServiceValidationCounter(newState, vnfInstance['isMissingData'], updateVnfInstanceAction.vnfInstance['isMissingData'], serviceUuid);
34
35       newState.serviceInstance[serviceUuid].vnfs[updateVnfInstanceAction.vnfModelName] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
36       return newState;
37     }
38
39     case VNFActions.UPDATE_VNF_INSTANCE: {
40       const updateVnfInstanceAction = <UpdateVnfInstanceAction>action;
41       const serviceUuid = updateVnfInstanceAction.serviceUuid;
42       let vnfStoreKey = updateVnfInstanceAction.vnfStoreKey;
43
44
45       let newState = _.cloneDeep(state);
46       let vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey];
47       updateUniqueNames(vnfInstance ? vnfInstance.instanceName : null, updateVnfInstanceAction.vnfInstance.instanceName, newState.serviceInstance[serviceUuid]);
48
49       vnfInstance = vnfInstance || new VnfInstance();
50       updateServiceValidationCounter(newState, vnfInstance['isMissingData'], updateVnfInstanceAction.vnfInstance['isMissingData'], serviceUuid);
51
52       newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
53       return newState;
54     }
55
56     case VNFActions.DELETE_ACTION_VNF_INSTANCE : {
57       return deleteFirstLevel(state, <ActionOnFirstLevel>action,true);
58     }
59
60     case VNFActions.UNDO_DELETE_ACTION_VNF_INSTANCE : {
61       let newState = _.cloneDeep(state);
62       let vnf = newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].vnfs[(<ActionOnFirstLevel>action).storeKey];
63       let oldState = vnf.action;
64       newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].vnfs[(<ActionOnFirstLevel>action).storeKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
65       updateServiceValidationCounter(newState, vnf['isMissingData'], false,  (<ActionOnFirstLevel>action).serviceId);
66       return newState;
67     }
68
69     case VNFActions.REMOVE_VNF_INSTANCE : {
70       let newState = _.cloneDeep(state);
71       let vnfInstance = newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
72       updateServiceValidationCounter(newState, vnfInstance['isMissingData'], false,  (<RemoveVnfInstanceAction>action).serviceId);
73       delete newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
74       return newState;
75     }
76
77     case VNFActions.UPDATE_VNF_POSITION : {
78       let newState = _.cloneDeep(state);
79       newState.serviceInstance[(<UpdateVnfPosition>action).instanceId]
80         .vnfs[(<UpdateVnfPosition>action).vnfStoreKey]
81         .position = (<UpdateVnfPosition>action).node.position;
82       return newState;
83     }
84
85     case VNFActions.UPGRADE_VNF_ACTION: {
86       let clonedState = _.cloneDeep(state);
87       const castingAction = <UpgradeVnfAction>action;
88       let oldAction = clonedState
89         .serviceInstance[castingAction.serviceUuid]
90         .vnfs[castingAction.vnfStoreKey].action;
91       if(!oldAction.includes("Upgrade")) {
92         clonedState.serviceInstance[castingAction.serviceUuid]
93           .vnfs[castingAction.vnfStoreKey]
94           .action = (`${oldAction}_Upgrade`) as ServiceInstanceActions;
95       }
96
97       if(_.isNil(clonedState.serviceInstance[castingAction.serviceUuid]
98         .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter)) {
99         clonedState.serviceInstance[castingAction.serviceUuid]
100           .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter = 1;
101         return clonedState;
102       }
103       clonedState.serviceInstance[castingAction.serviceUuid]
104         .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter++;
105       return clonedState;
106     }
107
108     case VNFActions.UNDO_UPGRADE_VNF_ACTION: {
109       let clonedState = _.cloneDeep(state);
110       const castingAction = <UpgradeVnfAction>action;
111       if(clonedState.serviceInstance[castingAction.serviceUuid]
112         .vnfs[castingAction.vnfStoreKey]
113         .action.includes("Upgrade")) {
114         clonedState
115           .serviceInstance[castingAction.serviceUuid]
116           .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter--;
117         if(clonedState.serviceInstance[castingAction.serviceUuid].vnfs[castingAction.vnfStoreKey]
118           .upgradedVFMSonsCounter === 0){
119           clonedState.serviceInstance[castingAction.serviceUuid]
120             .vnfs[castingAction.vnfStoreKey]
121             .action = ServiceInstanceActions.None;
122         }
123       }
124       return clonedState;
125     }
126
127   }
128 }
129
130
131 const updateUniqueNames = (oldName: string, newName: string, serviceInstance: ServiceInstance): void => {
132   let existingNames = serviceInstance.existingNames;
133   if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
134     delete existingNames[oldName.toLowerCase()];
135   }
136   if (!_.isNil(newName)) {
137     existingNames[newName.toLowerCase()] = "";
138   }
139 };
140
141
142 export const calculateNextUniqueModelName = (vnfModelName: string, serviceId: string, state: any, levelName: string): string => {
143   let counter: number = null;
144   while (true) {
145     let pattern = !_.isNil(counter) ? ("_" + counter) : "";
146     if (!_.isNil(state.serviceInstance[serviceId][levelName][vnfModelName + pattern])) {
147       counter = counter ? (counter + 1) : 1;
148     } else {
149       return vnfModelName + pattern;
150     }
151   }
152 };