Add Semicolon at the end
[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,
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
61     case VNFActions.UNDO_DELETE_ACTION_VNF_INSTANCE : {
62       let newState = _.cloneDeep(state);
63       let vnf = newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].vnfs[(<ActionOnFirstLevel>action).storeKey];
64       let oldState = vnf.action;
65       newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].vnfs[(<ActionOnFirstLevel>action).storeKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
66       updateServiceValidationCounter(newState, vnf['isMissingData'], false,  (<ActionOnFirstLevel>action).serviceId);
67       return newState;
68     }
69
70     case VNFActions.REMOVE_VNF_INSTANCE : {
71       let newState = _.cloneDeep(state);
72       let vnfInstance = newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
73       updateServiceValidationCounter(newState, vnfInstance['isMissingData'], false,  (<RemoveVnfInstanceAction>action).serviceId);
74       delete newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
75       return newState;
76     }
77
78     case VNFActions.UPDATE_VNF_POSITION : {
79       let newState = _.cloneDeep(state);
80       newState.serviceInstance[(<UpdateVnfPosition>action).instanceId].vnfs[(<UpdateVnfPosition>action).vnfStoreKey].position = (<UpdateVnfPosition>action).node.position;
81       return newState;
82     }
83   }
84 }
85
86
87
88
89 const updateUniqueNames = (oldName: string, newName: string, serviceInstance: ServiceInstance): void => {
90   let existingNames = serviceInstance.existingNames;
91   if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
92     delete existingNames[oldName.toLowerCase()];
93   }
94   if (!_.isNil(newName)) {
95     existingNames[newName.toLowerCase()] = "";
96   }
97 };
98
99
100 export const calculateNextUniqueModelName = (vnfModelName: string, serviceId: string, state: any, levelName: string): string => {
101   let counter: number = null;
102   while (true) {
103     let pattern = !_.isNil(counter) ? ("_" + counter) : "";
104     if (!_.isNil(state.serviceInstance[serviceId][levelName][vnfModelName + pattern])) {
105       counter = counter ? (counter + 1) : 1;
106     } else {
107       return vnfModelName + pattern;
108     }
109   }
110 };
111
112
113
114
115