1 import {Action} from "redux";
2 import {VnfInstance} from "../../../models/vnfInstance";
4 CreateVnfInstanceAction,
5 RemoveVnfInstanceAction,
6 UpdateVnfInstanceAction, UpdateVnfPosition, UpgradeVnfAction,
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";
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);
23 updateVnfInstanceAction.vnfInstance.originalName = vnfModelName;
24 updateVnfInstanceAction.vnfModelName = calculateNextUniqueModelName(vnfModelName, serviceUuid, newState, 'vnfs');
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);
34 newState.serviceInstance[serviceUuid].vnfs[updateVnfInstanceAction.vnfModelName] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
38 case VNFActions.UPDATE_VNF_INSTANCE: {
39 const updateVnfInstanceAction = <UpdateVnfInstanceAction>action;
40 const serviceUuid = updateVnfInstanceAction.serviceUuid;
41 let vnfStoreKey = updateVnfInstanceAction.vnfStoreKey;
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]);
48 vnfInstance = vnfInstance || new VnfInstance();
49 updateServiceValidationCounter(newState, vnfInstance['isMissingData'], updateVnfInstanceAction.vnfInstance['isMissingData'], serviceUuid);
51 newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
55 case VNFActions.DELETE_ACTION_VNF_INSTANCE : {
56 return deleteFirstLevel(state, <ActionOnFirstLevel>action,true);
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);
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];
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;
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;
96 if(_.isNil(clonedState.serviceInstance[castingAction.serviceUuid]
97 .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter)) {
98 clonedState.serviceInstance[castingAction.serviceUuid]
99 .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter = 1;
102 clonedState.serviceInstance[castingAction.serviceUuid]
103 .vnfs[castingAction.vnfStoreKey].upgradedVFMSonsCounter++;
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")) {
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;