From 6f900cc45d7dd7f97430812b86b5c1d1693c8ae3 Mon Sep 17 00:00:00 2001 From: Ittay Stern Date: Wed, 29 Aug 2018 17:01:32 +0300 Subject: merge from ecomp a88f0072 - Modern UI Issue-ID: VID-378 Change-Id: Ibcb23dd27f550cf32ce2fe0239f0f496ae014ff6 Signed-off-by: Ittay Stern --- .../storeUtil/utils/vfModule/vfModule.reducers.ts | 165 +++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts (limited to 'vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts') diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts new file mode 100644 index 000000000..f3636ff41 --- /dev/null +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts @@ -0,0 +1,165 @@ +import {Action} from "redux"; +import * as _ from "lodash"; +import { + CreateVFModuleInstanceAction, DeleteActionVfModuleInstanceAction, + DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition, + UpdateVFModuleInstanceAction, + VfModuleActions +} from "./vfModule.actions"; +import {ServiceInstance} from "../../../models/serviceInstance"; +import {VfModuleMap} from "../../../models/vfModulesMap"; +import {ServiceState} from "../main.reducer"; +import {ServiceInstanceActions} from "../../../models/serviceInstanceActions"; + + +export function vfModuleReducer(state: ServiceState , action: Action) : ServiceState{ + switch (action.type) { + case VfModuleActions.CREATE_VF_MODULE: { + const updateVFModuleInstanceAction = action; + const vfInstance = updateVFModuleInstanceAction.vfInstance; + const serviceUuid = updateVFModuleInstanceAction.serviceUuid; + const vfModuleId = updateVFModuleInstanceAction.vfId; + const vnfStoreKey = updateVFModuleInstanceAction.vnfStoreKey; + + let newState = Object.assign({}, state); + + let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] || new VfModuleMap(); + let randomId = generateId(); + vfModulesMap[vfModuleId + randomId] = vfInstance; + updateUniqueNames(null, vfInstance.instanceName, newState.serviceInstance[serviceUuid]); + updateUniqueNames(null, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]); + updateServiceValidationCounter(newState, false, vfInstance['isMissingData'], serviceUuid); + + newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] = vfModulesMap; + return newState; + } + case VfModuleActions.UPDATE_VF_MODULE: { + const updateVFModuleInstanceAction = action; + const vfInstance = updateVFModuleInstanceAction.vfInstance; + const serviceUuid = updateVFModuleInstanceAction.serviceUuid; + const vfModuleId = updateVFModuleInstanceAction.vfId; + const newState = _.cloneDeep(state); + const vnfs = newState.serviceHierarchy[serviceUuid].vnfs; + let vnfId = getVfModuleParentVnfId(vnfs, vfModuleId); + const vnfStoreKey = updateVFModuleInstanceAction.vnfStoreKey; + if (!_.isNil(vnfStoreKey)) { + vnfId = vnfStoreKey; + } + let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] || new VfModuleMap(); + updateServiceValidationCounter(newState, vfModulesMap[updateVFModuleInstanceAction.dynamicModelName]['isMissingData'], vfInstance.isMissingData, serviceUuid); + updateUniqueNames(vfModulesMap[updateVFModuleInstanceAction.dynamicModelName].instanceName, vfInstance.instanceName, newState.serviceInstance[serviceUuid]); + updateUniqueNames(vfModulesMap[updateVFModuleInstanceAction.dynamicModelName].volumeGroupName, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]); + vfModulesMap[updateVFModuleInstanceAction.dynamicModelName] = vfInstance; + newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap; + return newState; + } + case VfModuleActions.REMOVE_VNF_MODULE_INSTANCE: { + const actionData = (action); + if (state.serviceInstance[actionData.serviceModelId]) { + let vfModulesMap = state.serviceInstance[actionData.serviceModelId].vnfs[actionData.vnfStoreKey].vfModules; + updateIsMissingDataOnDeleteVFModule(state, actionData.serviceModelId, actionData.vnfStoreKey, actionData.modelName); + updateUniqueNames(vfModulesMap[actionData.modelName][actionData.dynamicModelName].instanceName, null, state.serviceInstance[actionData.serviceModelId] ); + updateUniqueNames(vfModulesMap[actionData.modelName][actionData.dynamicModelName].volumeGroupName, null, state.serviceInstance[actionData.serviceModelId] ); + delete vfModulesMap[actionData.modelName][actionData.dynamicModelName]; + if(_.isEmpty(vfModulesMap[actionData.modelName])){ + delete vfModulesMap[actionData.modelName]; + } + } + return Object.assign({}, state); + } + case VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE : { + let newState = _.cloneDeep(state); + let vfModules = newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules; + + for(let key in vfModules){ + let firstKey = Object.keys(vfModules[key])[0]; + if(firstKey === (action).dynamicModelName){ + let oldAction = newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules[key][firstKey].action; + if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState; + newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules[key][firstKey].action = (oldAction + '_Delete') as ServiceInstanceActions; + updateIsMissingDataOnDeleteVFModule(newState, (action).serviceId, (action).vnfStoreKey, key); + return newState; + } + } + return newState; + } + case VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE : { + let newState = _.cloneDeep(state); + let vfModules = newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules; + + for(let key in vfModules){ + let firstKey = Object.keys(vfModules[key])[0]; + if(firstKey === (action).dynamicModelName){ + let oldAction = newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules[key][firstKey].action; + newState.serviceInstance[(action).serviceId].vnfs[(action).vnfStoreKey].vfModules[key][firstKey].action = (oldAction.split('_')[0]) as ServiceInstanceActions; + updateIsMissingDataOnDeleteVFModule(newState, (action).serviceId, (action).vnfStoreKey, key); + return newState; + } + } + return newState; + } + + case VfModuleActions.UPDATE_VFMODULE_POSITION : { + const updateVFModluePosition = action; + const serviceUuid = updateVFModluePosition.instanceId; + const dynamicModelName = updateVFModluePosition.node.dynamicModelName; + const modelName = updateVFModluePosition.node.modelName; + const newState = _.cloneDeep(state); + + newState.serviceInstance[serviceUuid].vnfs[updateVFModluePosition.vnfStoreKey].vfModules[modelName][dynamicModelName].position = updateVFModluePosition.node.position; + return newState; + } + } +} + +const updateIsMissingDataOnDeleteVFModule = (state: any, serviceModelId: string, vnfStoreKey: string, vfModuleName): void => { + const vfModules = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[vfModuleName]; + + _.forOwn(vfModules, (vfModuleInstance) => { + let isMissingData: boolean = vfModuleInstance.isMissingData; + updateServiceValidationCounter(state, isMissingData, false, serviceModelId); + }); +}; + + +const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => { + let existingNames = serviceInstance.existingNames; + if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) { + delete existingNames[oldName.toLowerCase()]; + } + if(!_.isNil(newName)) { + existingNames[newName.toLowerCase()] = ""; + } +}; + +const updateServiceValidationCounter = (newState: any, oldValidationState: boolean, newValidationState: boolean, serviceUuid: string) => { + if (oldValidationState && !newValidationState) { + newState.serviceInstance[serviceUuid].validationCounter--; + } else if (!oldValidationState && newValidationState) { + newState.serviceInstance[serviceUuid].validationCounter++; + } +}; + +const generateId = () => { + return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5); +}; +const getVfModuleParentVnfId = (vnfs: object, vfModuleId: string) => { + let vnfId = undefined; + _.forOwn(vnfs, (value, key) => { + if (vnfs[key].vfModules && vnfs[key].vfModules[vfModuleId]) { + vnfId = vnfs[key].modelCustomizationName; + return false; + } + }); + return vnfId; +}; + + + + + + + + + + -- cgit 1.2.3-korg