aboutsummaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.ts
blob: a8154e856aac5cb468d669ba1a063cbd84a47484 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import {Action} from "redux";
import * as _ from "lodash";
import {NetworkInstance} from "../../../models/networkInstance";
import {
  CreateNetworkInstanceAction,
  NetworkActions,
  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";
import {deleteFirstLevel, updateServiceValidationCounter} from "../reducersHelper";
import {ActionOnFirstLevel} from "../firstLevel/firstLevel.actions";


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 : {
      return deleteFirstLevel(state, <ActionOnFirstLevel>action,true);

    }

    case NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE : {
      let newState = _.cloneDeep(state);
      let network = newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].networks[(<ActionOnFirstLevel>action).storeKey];
      let oldState = network.action;
      newState.serviceInstance[(<ActionOnFirstLevel>action).serviceId].networks[(<ActionOnFirstLevel>action).storeKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
      updateServiceValidationCounter(newState, network['isMissingData'], false , (<ActionOnFirstLevel>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()] = "";
  }
};