diff options
Diffstat (limited to 'vid-webpack-master/src/app/shared/storeUtil/utils/network')
3 files changed, 310 insertions, 0 deletions
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.actions.ts new file mode 100644 index 000000000..c90d8eb3d --- /dev/null +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.actions.ts @@ -0,0 +1,94 @@ +import {Action, ActionCreator} from "redux"; +import {NetworkInstance} from "../../../models/networkInstance"; + +export enum NetworkActions { + UPDATE_NETWORK_INSTANCE = "UPDATE_NETWORK_INSTANCE", + UPDATE_NETWORK_FUNCTION = 'UPDATE_NETWORK_FUNCTION', + CREATE_NETWORK_INSTANCE = 'CREATE_NETWORK_INSTANCE', + DELETE_ACTION_NETWORK_INSTANCE = "DELETE_ACTION_NETWORK_INSTANCE", + UNDO_DELETE_ACTION_NETWORK_INSTANCE = "UNDO_DELETE_ACTION_NETWORK_INSTANCE", + UPDATE_NETWORK_POSITION = "UPDATE_NETWORK_POSITION" + +} + + +export interface UpdateNetworkPosition extends Action { + node: any, + instanceId : string, + networkStoreKey?: string; +} + +export interface UpdateNetworkInstanceAction extends Action { + networkInstance?: NetworkInstance; + networkModelName?: string; + serviceUuid?: string; + networkStoreKey?:string; +} + +export interface UpdateNetworkCollectionFunction extends Action { + networksAccordingToNetworkCollection: any; + network_function: any; +} + +export interface CreateNetworkInstanceAction extends Action { + networkInstance?: NetworkInstance; + networkModelName?: string; + serviceUuid?: string; + networkStoreKey?:string; +} + +export interface DeleteActionNetworkInstanceAction extends Action { + networkStoreKey: string; + serviceId?: string; +} + +export interface UndoDeleteActionNetworkInstanceAction extends Action { + networkStoreKey: string; + serviceId?: string; +} + +export const updateNetworkInstance: ActionCreator<UpdateNetworkInstanceAction> = (networkInstance, networkfModelName, serviceUuid, networkStoreKey) => ({ + type: NetworkActions.UPDATE_NETWORK_INSTANCE, + networkInstance: networkInstance, + networkModelName: networkfModelName, + serviceUuid: serviceUuid, + networkStoreKey : networkStoreKey +}); + + +export const updateNetworkCollectionFunction: ActionCreator<UpdateNetworkCollectionFunction> = (ncf, networksAccordingToNetworkCollection) => ({ + type: NetworkActions.UPDATE_NETWORK_FUNCTION, + networksAccordingToNetworkCollection: networksAccordingToNetworkCollection["results"], + network_function: ncf +}); + +export const createNetworkInstance: ActionCreator<CreateNetworkInstanceAction> = (networkInstance, networkModelName, serviceUuid, networkStoreKey) => ({ + type: NetworkActions.CREATE_NETWORK_INSTANCE, + networkInstance: networkInstance, + networkModelName: networkModelName, + serviceUuid: serviceUuid, + networkStoreKey : networkStoreKey +}); + + +export const deleteActionNetworkInstance: ActionCreator<DeleteActionNetworkInstanceAction> = (networkStoreKey, serviceId) => ({ + type: NetworkActions.DELETE_ACTION_NETWORK_INSTANCE, + networkStoreKey: networkStoreKey, + serviceId: serviceId +}); + +export const undoDeleteActionNetworkInstance: ActionCreator<UndoDeleteActionNetworkInstanceAction> = (networkStoreKey, serviceId) => ({ + type: NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE, + networkStoreKey: networkStoreKey, + serviceId: serviceId +}); + + +export const updateNetworkPosition: ActionCreator<UpdateNetworkPosition> = (node, instanceId, networkStoreKey) => ({ + type: NetworkActions.UPDATE_NETWORK_POSITION, + node: node, + instanceId: instanceId, + networkStoreKey : networkStoreKey +}); + + diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.spec.ts new file mode 100644 index 000000000..ba41ad6e6 --- /dev/null +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.spec.ts @@ -0,0 +1,114 @@ +import {networkReducer} from "./network.reducers"; +import { + CreateNetworkInstanceAction, DeleteActionNetworkInstanceAction, + NetworkActions, UndoDeleteActionNetworkInstanceAction, + UpdateNetworkCollectionFunction, + UpdateNetworkInstanceAction +} from "./network.actions"; +import {NetworkInstance} from "../../../models/networkInstance"; +import {ServiceInstanceActions} from "../../../models/serviceInstanceActions"; + + +describe('networkReducer', () => { + test('#CREATE_SERVICE_INSTANCE', () => { + let networkInstance: NetworkInstance = new NetworkInstance(); + networkInstance.isMissingData = false; + networkInstance.instanceName = 'instanceName'; + let networkState = networkReducer(<any>{serviceInstance : { + 'serviceModelId' : { + networks : { + 'networkStoreKey' : { + isMissingData : true + } + } + } + }}, + <UpdateNetworkInstanceAction>{ + type: NetworkActions.UPDATE_NETWORK_INSTANCE, + networkInstance : new NetworkInstance(), + networkStoreKey : 'networkStoreKey', + networkModelName : 'networkModelName', + serviceUuid : 'serviceModelId' + }).serviceInstance['serviceModelId'].networks['networkStoreKey']; + + expect(networkState).toBeDefined(); + expect(networkState.isMissingData).toBeFalsy(); + }); + + test('#CREATE_NETWORK_INSTANCE', () => { + let networkInstance: NetworkInstance = new NetworkInstance(); + networkInstance.isMissingData = false; + networkInstance.instanceName = 'instanceName'; + let networkState = networkReducer(<any>{serviceInstance : { + 'serviceModelId' : { + networks : {} + } + }}, + <CreateNetworkInstanceAction>{ + type: NetworkActions.CREATE_NETWORK_INSTANCE, + networkInstance : new NetworkInstance(), + networkStoreKey : null, + networkModelName : 'networkModelName', + serviceUuid : 'serviceModelId' + }).serviceInstance['serviceModelId'].networks['networkModelName']; + + expect(networkState).toBeDefined(); + expect(networkState.isMissingData).toBeFalsy(); + }); + + test('#UPDATE_NETWORK_FUNCTION', () => { + let state = networkReducer(<any>{serviceInstance : {}}, + <UpdateNetworkCollectionFunction>{ + type: NetworkActions.UPDATE_NETWORK_FUNCTION, + networksAccordingToNetworkCollection: 'networksAccordingToNetworkCollection', + network_function: 'network_function' + }); + + expect(state).toBeDefined(); + }); + + test('#DELETE_ACTION_NETWORK_INSTANCE', () => { + let networkState = networkReducer(<any>{serviceInstance : { + 'serviceModelId' : { + networks : { + 'networkStoreKey' : { + isMissingData : true, + action : 'None' + } + } + } + }}, + <DeleteActionNetworkInstanceAction>{ + type: NetworkActions.DELETE_ACTION_NETWORK_INSTANCE, + networkStoreKey: 'networkStoreKey', + serviceId: 'serviceModelId' + }).serviceInstance['serviceModelId'].networks['networkStoreKey']; + + expect(networkState).toBeDefined(); + expect(networkState.action).toEqual(ServiceInstanceActions.None_Delete); + }); + + test('#UNDO_DELETE_ACTION_NETWORK_INSTANCE', () => { + let networkState = networkReducer(<any>{serviceInstance : { + 'serviceModelId' : { + networks : { + 'networkStoreKey' : { + isMissingData : true, + action : 'Update_Delete' + } + } + } + }}, + <UndoDeleteActionNetworkInstanceAction>{ + type: NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE, + networkStoreKey: 'networkStoreKey', + serviceId: 'serviceModelId' + }).serviceInstance['serviceModelId'].networks['networkStoreKey']; + + expect(networkState).toBeDefined(); + expect(networkState.action).toEqual(ServiceInstanceActions.Update); + }); +}); + + + diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.ts new file mode 100644 index 000000000..bcbbea57d --- /dev/null +++ b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.ts @@ -0,0 +1,102 @@ +import {Action} from "redux"; +import * as _ from "lodash"; +import {NetworkInstance} from "../../../models/networkInstance"; +import { + CreateNetworkInstanceAction, DeleteActionNetworkInstanceAction, + NetworkActions, UndoDeleteActionNetworkInstanceAction, + UpdateNetworkCollectionFunction, + UpdateNetworkInstanceAction +} from "./network.actions"; +import {ServiceInstance} from "../../../models/serviceInstance"; +import {calculateNextUniqueModelName} from "../vnf/vnf.reducers"; +import {ServiceState} from "../main.reducer"; +import {ServiceInstanceActions} from "../../../models/serviceInstanceActions"; + + +export function networkReducer(state: ServiceState , action: Action) : ServiceState { + switch (action.type) { + case NetworkActions.CREATE_NETWORK_INSTANCE: { + const updateNetworkInstanceAction = <CreateNetworkInstanceAction>action; + const serviceUuid = updateNetworkInstanceAction.serviceUuid; + let networkModelName = updateNetworkInstanceAction.networkModelName; + + + let newState = _.cloneDeep(state); + + updateNetworkInstanceAction.networkInstance.originalName = networkModelName; + updateNetworkInstanceAction.networkModelName = calculateNextUniqueModelName(networkModelName, serviceUuid, newState, 'networks'); + + let networkInstance: NetworkInstance = newState.serviceInstance[serviceUuid].networks[networkModelName]; + networkInstance = new NetworkInstance(); + updateNetworkInstanceAction.networkInstance.networkStoreKey = updateNetworkInstanceAction.networkModelName; + updateNetworkInstanceAction.networkInstance.originalName = networkModelName; + networkInstance.originalName = updateNetworkInstanceAction.networkInstance.originalName; + networkInstance.networkStoreKey = updateNetworkInstanceAction.networkInstance.networkStoreKey; + updateServiceValidationCounter(newState, networkInstance['isMissingData'], updateNetworkInstanceAction.networkInstance['isMissingData'], serviceUuid); + + newState.serviceInstance[serviceUuid].networks[updateNetworkInstanceAction.networkModelName] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance); + return newState; + } + case NetworkActions.UPDATE_NETWORK_INSTANCE: { + const updateNetworkInstanceAction = <UpdateNetworkInstanceAction>action; + const serviceUuid = updateNetworkInstanceAction.serviceUuid; + let networkStoreKey = updateNetworkInstanceAction.networkStoreKey; + + let newState = _.cloneDeep(state); + let networkInstance: NetworkInstance = newState.serviceInstance[serviceUuid].networks[networkStoreKey]; + updateUniqueNames(networkInstance? networkInstance.instanceName : null, updateNetworkInstanceAction.networkInstance.instanceName, newState.serviceInstance[serviceUuid]); + + networkInstance = networkInstance || new NetworkInstance(); + updateServiceValidationCounter(newState, networkInstance['isMissingData'], updateNetworkInstanceAction.networkInstance['isMissingData'], serviceUuid); + + newState.serviceInstance[serviceUuid].networks[networkStoreKey] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance); + return newState; + } + case NetworkActions.UPDATE_NETWORK_FUNCTION: { + let networkFunctionReduxObj = state['networkFunctions'] == undefined ? {} : state['networkFunctions']; + networkFunctionReduxObj[(<UpdateNetworkCollectionFunction>action).network_function] = (<UpdateNetworkCollectionFunction>action).networksAccordingToNetworkCollection; + Object.assign(state, {'networkFunctions': networkFunctionReduxObj}); + return Object.assign({}, state); + } + case NetworkActions.DELETE_ACTION_NETWORK_INSTANCE : { + let newState = _.cloneDeep(state); + let network = newState.serviceInstance[(<DeleteActionNetworkInstanceAction>action).serviceId].networks[(<DeleteActionNetworkInstanceAction>action).networkStoreKey]; + let oldAction = network.action; + if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState; + newState.serviceInstance[(<DeleteActionNetworkInstanceAction>action).serviceId].networks[(<DeleteActionNetworkInstanceAction>action).networkStoreKey].action = (oldAction + '_Delete') as ServiceInstanceActions; + updateServiceValidationCounter(newState, network['isMissingData'], false , (<DeleteActionNetworkInstanceAction>action).serviceId); + + return newState; + } + + case NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE : { + let newState = _.cloneDeep(state); + let network = newState.serviceInstance[(<UndoDeleteActionNetworkInstanceAction>action).serviceId].networks[(<UndoDeleteActionNetworkInstanceAction>action).networkStoreKey]; + let oldState = network.action; + newState.serviceInstance[(<UndoDeleteActionNetworkInstanceAction>action).serviceId].networks[(<UndoDeleteActionNetworkInstanceAction>action).networkStoreKey].action = (oldState.split('_')[0]) as ServiceInstanceActions; + updateServiceValidationCounter(newState, network['isMissingData'], false , (<DeleteActionNetworkInstanceAction>action).serviceId); + return newState; + } + } +} + +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++; + } +}; + + |