Extend Modern UI for pnf usecase
[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 {ServiceState} from "../main.reducer";
11 import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
12 import {deleteFirstLevel, updateServiceValidationCounter, calculateNextUniqueModelName, updateUniqueNames} from "../reducersHelper";
13 import {ActionOnFirstLevel} from "../firstLevel/firstLevel.actions";
14
15 export function vnfReducer(state: ServiceState, action: Action): ServiceState {
16   switch (action.type) {
17     case VNFActions.CREATE_VNF_INSTANCE: {
18       const updateVnfInstanceAction = <CreateVnfInstanceAction>action;
19       const serviceUuid = updateVnfInstanceAction.serviceUuid;
20       let vnfModelName = updateVnfInstanceAction.vnfModelName;
21       let newState = _.cloneDeep(state);
22
23       updateVnfInstanceAction.vnfInstance.originalName = vnfModelName;
24       updateVnfInstanceAction.vnfModelName = calculateNextUniqueModelName(vnfModelName, serviceUuid, newState, 'vnfs');
25
26       let vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfModelName];
27       vnfInstance = new VnfInstance();
28       updateVnfInstanceAction.vnfInstance.vnfStoreKey = updateVnfInstanceAction.vnfModelName;
29       updateVnfInstanceAction.vnfInstance.originalName = vnfModelName;
30       vnfInstance.originalName = updateVnfInstanceAction.vnfInstance.originalName;
31       vnfInstance.vnfStoreKey = updateVnfInstanceAction.vnfInstance.vnfStoreKey;
32       updateServiceValidationCounter(newState, vnfInstance['isMissingData'], updateVnfInstanceAction.vnfInstance['isMissingData'], serviceUuid);
33
34       newState.serviceInstance[serviceUuid].vnfs[updateVnfInstanceAction.vnfModelName] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
35       return newState;
36     }
37
38     case VNFActions.UPDATE_VNF_INSTANCE: {
39       const updateVnfInstanceAction = <UpdateVnfInstanceAction>action;
40       const serviceUuid = updateVnfInstanceAction.serviceUuid;
41       let vnfStoreKey = updateVnfInstanceAction.vnfStoreKey;
42
43
44       let newState = _.cloneDeep(state);
45       let vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey];
46       updateUniqueNames(vnfInstance ? vnfInstance.instanceName : null, updateVnfInstanceAction.vnfInstance.instanceName, newState.serviceInstance[serviceUuid]);
47
48       vnfInstance = vnfInstance || new VnfInstance();
49       updateServiceValidationCounter(newState, vnfInstance['isMissingData'], updateVnfInstanceAction.vnfInstance['isMissingData'], serviceUuid);
50
51       newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
52       return newState;
53     }
54
55     case VNFActions.DELETE_ACTION_VNF_INSTANCE : {
56       return deleteFirstLevel(state, <ActionOnFirstLevel>action,true);
57     }
58
59     case VNFActions.UNDO_DELETE_ACTION_VNF_INSTANCE : {
60       let newState = _.cloneDeep(state);
61       let vnf = newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].vnfs[(<ActionOnFirstLevel>action).storeKey];
62       let oldState = vnf.action;
63       newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].vnfs[(<ActionOnFirstLevel>action).storeKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
64       updateServiceValidationCounter(newState, vnf['isMissingData'], false,  (<ActionOnFirstLevel>action).serviceId);
65       return newState;
66     }
67
68     case VNFActions.REMOVE_VNF_INSTANCE : {
69       let newState = _.cloneDeep(state);
70       let vnfInstance = newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
71       updateServiceValidationCounter(newState, vnfInstance['isMissingData'], false,  (<RemoveVnfInstanceAction>action).serviceId);
72       delete newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
73       return newState;
74     }
75
76     case VNFActions.UPDATE_VNF_POSITION : {
77       let newState = _.cloneDeep(state);
78       newState.serviceInstance[(<UpdateVnfPosition>action).instanceId]
79         .vnfs[(<UpdateVnfPosition>action).vnfStoreKey]
80         .position = (<UpdateVnfPosition>action).node.position;
81       return newState;
82     }
83
84     case VNFActions.UPGRADE_VNF_ACTION: {
85       let clonedState = _.cloneDeep(state);
86       const castingAction = <UpgradeVnfAction>action;
87       let oldAction = clonedState
88         .serviceInstance[castingAction.serviceUuid]
89         .vnfs[castingAction.vnfStoreKey].action;
90       if(!oldAction.includes("Upgrade")) {
91         clonedState.serviceInstance[castingAction.serviceUuid]
92           .vnfs[castingAction.vnfStoreKey]
93           .action = (`${oldAction}_Upgrade`) as ServiceInstanceActions;
94       }
95
96       if(_.isNil(clonedState.serviceInstance[castingAction.serviceUuid]
97         .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter)) {
98         clonedState.serviceInstance[castingAction.serviceUuid]
99           .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter = 1;
100         return clonedState;
101       }
102       clonedState.serviceInstance[castingAction.serviceUuid]
103         .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter++;
104       return clonedState;
105     }
106
107     case VNFActions.UNDO_UPGRADE_VNF_ACTION: {
108       let clonedState = _.cloneDeep(state);
109       const castingAction = <UpgradeVnfAction>action;
110       if(clonedState.serviceInstance[castingAction.serviceUuid]
111         .vnfs[castingAction.vnfStoreKey]
112         .action.includes("Upgrade")) {
113         clonedState
114           .serviceInstance[castingAction.serviceUuid]
115           .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter--;
116         if(clonedState.serviceInstance[castingAction.serviceUuid].vnfs[castingAction.vnfStoreKey]
117           .upgradedVFMSonsCounter === 0){
118           clonedState.serviceInstance[castingAction.serviceUuid]
119             .vnfs[castingAction.vnfStoreKey]
120             .action = ServiceInstanceActions.None;
121         }
122       }
123       return clonedState;
124     }
125
126   }
127 }