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";
25 export class NetworkPopupService implements GenericPopupInterface {
29 serviceModel: ServiceModel;
30 modelInformations: ModelInformationItem[] = [];
32 closeDialogEvent: Subject<any> = new Subject<any>();
33 isUpdateMode: boolean;
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>) {
45 getInstance(serviceId: string, networkName: string, networkStoreKey: string): any {
46 if (_.isNil(networkStoreKey)) {
47 return new NetworkInstance();
49 return this._store.getState().service.serviceInstance[serviceId].networks[networkStoreKey];
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);
57 this.getModelInformation(serviceId, networkName);
59 return new FormPopupDetails(this,
60 PopupType.NETWORK_MACRO,
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); }
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);
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)
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);
101 return this._networkControlGenerator.getAlaCarteFormControls(serviceId, networkStoreKey, networkName, isUpdateMode);
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',
112 serviceModelId: that.serviceModel.uuid
115 this.onCancel(that, form);
119 onCancel(that, form) {
121 that._iframeService.removeClassCloseModal('content');
122 this.closeDialogEvent.next(that);
125 storeNetwork = (that, formValues: any): void => {
126 formValues.modelInfo = new ModelInfo(that.model);
127 formValues.uuid = formValues.modelInfo.uuid;
128 formValues.isMissingData = false;
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));
134 this._store.dispatch(updateNetworkInstance(formValues, that.uuidData.networkId, that.uuidData.serviceId, that.uuidData.networkStoreKey));
139 getTitle(isUpdateMode : boolean) : string {
140 return isUpdateMode ? 'Edit Network' : 'Set new Network';
143 getSubLeftTitle(): string {
144 return this.uuidData['networkId'];
147 getSubRightTitle(): string {
148 return "Network Instance Details";