7f32360f53456a150083b8e6f05b0f619fa9f965
[vid.git] / vid-webpack-master / src / app / shared / components / genericFormPopup / genericFormServices / network / network.popup.service.ts
1 import {Injectable} from "@angular/core";
2 import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
3 import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
4 import {NetworkInstance} from "../../../../models/networkInstance";
5 import {AppState} from "../../../../store/reducers";
6 import {NgRedux} from "@angular-redux/store";
7 import {ITreeNode} from "angular-tree-component/dist/defs/api";
8 import {NetworkControlGenerator} from "../../../genericForm/formControlsServices/networkGenerator/network.control.generator";
9 import {ModelInformationItem} from "../../../model-information/model-information.component";
10 import {Constants} from "../../../../utils/constants";
11 import {AaiService} from "../../../../services/aaiService/aai.service";
12 import {ServiceModel} from "../../../../models/serviceModel";
13 import {FormGroup} from "@angular/forms";
14 import {ModelInfo} from "../../../../models/modelInfo";
15 import {IframeService} from "../../../../utils/iframe.service";
16 import {GenericPopupInterface} from "../generic-popup.interface";
17 import {Subject} from "rxjs/Subject";
18 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
19 import * as _ from 'lodash';
20 import {BasicPopupService} from "../basic.popup.service";
21 import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions";
22 import {createNetworkInstance, updateNetworkInstance} from "../../../../storeUtil/utils/network/network.actions";
23
24 @Injectable()
25 export class NetworkPopupService implements GenericPopupInterface {
26   dynamicInputs: any;
27   instance: any;
28   model: any;
29   serviceModel: ServiceModel;
30   modelInformations: ModelInformationItem[] = [];
31   uuidData: Object;
32   closeDialogEvent: Subject<any> = new Subject<any>();
33   isUpdateMode: boolean;
34
35
36   constructor(private _basicControlGenerator: BasicControlGenerator,
37               private _networkControlGenerator: NetworkControlGenerator,
38               private _iframeService: IframeService,
39               private _defaultDataGeneratorService: DefaultDataGeneratorService,
40               private _aaiService: AaiService,
41               private _basicPopupService : BasicPopupService,
42               private _store: NgRedux<AppState>) {
43   }
44
45   getInstance(serviceId: string, networkName: string, networkStoreKey: string): any {
46     if (_.isNil(networkStoreKey)) {
47       return new NetworkInstance();
48     }
49     return this._store.getState().service.serviceInstance[serviceId].networks[networkStoreKey];
50   }
51
52   getGenericFormPopupDetails(serviceId: string, networkName: string, networkStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
53     this.uuidData = uuidData;
54     this.instance = this.getInstance(serviceId, networkName, networkStoreKey);
55
56
57     this.getModelInformation(serviceId, networkName);
58
59     return new FormPopupDetails(this,
60       PopupType.NETWORK_MACRO,
61       uuidData,
62       this.getTitle(isUpdateMode),
63       this.getSubLeftTitle(),
64       this.getSubRightTitle(),
65       this.getControls(serviceId, networkName, networkStoreKey, isUpdateMode),
66       this._basicPopupService.getDynamicInputs(serviceId,networkName, networkStoreKey, 'networks'),
67       this.modelInformations,
68       (that, form: FormGroup) => {that.onSubmit(that, form);},
69       (that: any, form: FormGroup) => {that.onCancel(that, form); }
70     );
71   }
72
73   getModelInformation(serviceId: string, networkName: string) {
74     this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
75       this.serviceModel = new ServiceModel(result);
76       this.model = this._basicPopupService.getModelFromResponse(result, 'networks', networkName);
77
78       const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
79       this.modelInformations = [
80         new ModelInformationItem("Subscriber Name", "subscriberName", [this._basicPopupService.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true),
81         new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
82         new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
83         new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
84         new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
85         new ModelInformationItem("Description", "description", [this.model.description]),
86         new ModelInformationItem("Category", "category", [this.model.category]),
87         new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
88         new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
89         new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
90         new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
91         new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
92         new ModelInformationItem("Network roles", "network-role", this.model.roles, "", false)
93       ];
94     });
95   }
96
97   getControls(serviceId: string, networkName: string, networkStoreKey: string, isUpdateMode: boolean) {
98     if (this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
99       return this._networkControlGenerator.getMacroFormControls(serviceId, networkStoreKey, networkName, isUpdateMode);
100     } else {
101       return this._networkControlGenerator.getAlaCarteFormControls(serviceId, networkStoreKey, networkName, isUpdateMode);
102     }
103   }
104
105
106   onSubmit(that, form: FormGroup) {
107     form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
108     that.storeNetwork(that, form.value);
109     window.parent.postMessage({
110       eventId: 'submitIframe',
111       data: {
112         serviceModelId: that.serviceModel.uuid
113       }
114     }, "*");
115     this.onCancel(that, form);
116   }
117
118
119   onCancel(that, form) {
120     form.reset();
121     that._iframeService.removeClassCloseModal('content');
122     this.closeDialogEvent.next(that);
123   }
124
125   storeNetwork = (that, formValues: any): void => {
126     formValues.modelInfo = new ModelInfo(that.model);
127     formValues.uuid = formValues.modelInfo.uuid;
128     formValues.isMissingData = false;
129
130     if (!that.uuidData.networkStoreKey) {
131       this._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelUniqueId , that.uuidData.serviceId, 1, <any>{data: {type: 'Network'}}));
132       this._store.dispatch(createNetworkInstance(formValues, that.uuidData.networkId, that.uuidData.serviceId, that.uuidData.networkId));
133     } else {
134       this._store.dispatch(updateNetworkInstance(formValues, that.uuidData.networkId, that.uuidData.serviceId, that.uuidData.networkStoreKey));
135     }
136   };
137
138
139   getTitle(isUpdateMode : boolean) : string {
140     return isUpdateMode ? 'Edit Network' : 'Set new Network';
141   }
142
143   getSubLeftTitle(): string {
144     return this.uuidData['networkId'];
145   }
146
147   getSubRightTitle(): string {
148     return "Network Instance Details";
149   }
150 }