1 import {Injectable} from '@angular/core';
2 import {GenericPopupInterface} from "../generic-popup.interface";
3 import {ITreeNode} from "angular-tree-component/dist/defs/api";
4 import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
5 import {FormGroup} from "@angular/forms";
6 import {ModelInformationItem} from "../../../model-information/model-information.component";
7 import {ServiceModel} from "../../../../models/serviceModel";
8 import {Subject} from "rxjs/Subject";
9 import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
10 import {VnfControlGenerator} from "../../../genericForm/formControlsServices/vnfGenerator/vnf.control.generator";
11 import {IframeService} from "../../../../utils/iframe.service";
12 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
13 import {AaiService} from "../../../../services/aaiService/aai.service";
14 import {BasicPopupService} from "../basic.popup.service";
15 import {NgRedux} from "@angular-redux/store";
16 import {AppState} from "../../../../store/reducers";
17 import {Subscriber} from "../../../../models/subscriber";
18 import {Constants} from "../../../../utils/constants";
19 import {VnfInstance} from "../../../../models/vnfInstance";
20 import {ModelInfo} from "../../../../models/modelInfo";
21 import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions";
22 import {createVNFInstance, updateVNFInstance} from "../../../../storeUtil/utils/vnf/vnf.actions";
23 import * as _ from 'lodash';
26 export class VnfPopupService implements GenericPopupInterface{
30 serviceModel:ServiceModel;
31 modelInformations: ModelInformationItem[] = [];
33 closeDialogEvent: Subject<any> = new Subject<any>();
34 isUpdateMode: boolean;
37 private _basicControlGenerator: BasicControlGenerator,
38 private _vnfControlGenerator: VnfControlGenerator,
39 private _iframeService: IframeService,
40 private _defaultDataGeneratorService: DefaultDataGeneratorService,
41 private _aaiService: AaiService,
42 private _basicPopupService: BasicPopupService,
43 private _store: NgRedux<AppState>) {
46 getGenericFormPopupDetails(serviceId: string, modelName: string, vnfStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
47 this.uuidData = uuidData;
48 this.isUpdateMode = isUpdateMode;
49 this.instance = this.getInstance(serviceId, modelName, vnfStoreKey);
50 this.getModelInformation(serviceId, modelName);
52 return new FormPopupDetails(this,
55 this.getTitle(isUpdateMode),
56 this.getSubLeftTitle(),
57 this.getSubRightTitle(),
58 this.getControls(serviceId, modelName, vnfStoreKey),
59 this._basicPopupService.getDynamicInputs(serviceId, modelName, vnfStoreKey, 'vnfs'),
60 this.modelInformations,
61 (that, form: FormGroup) => {that.onSubmit(that, form);},
62 (that: any, form: FormGroup) => {that.onCancel(that, form); }
66 getControls(serviceId: string, modelName: string, vnfStoreKey: string){
67 if(this._store.getState().service.serviceHierarchy[serviceId].service.vidNotions.instantiationType === 'Macro') {
68 return this._vnfControlGenerator.getMacroFormControls(serviceId, vnfStoreKey, modelName);
70 return this._vnfControlGenerator.getAlaCarteFormControls(serviceId, vnfStoreKey, modelName);
74 getInstance(serviceId: string, modelName: string, vnfStoreKey: string): any {
75 if(_.isNil(vnfStoreKey)){
76 return new VnfInstance();
78 return this._store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
81 getModelInformation(serviceId: string, modelName: string): void {
82 this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
83 this.serviceModel = new ServiceModel(result);
84 this.model = this._basicPopupService.getModelFromResponse(result, 'vnfs', modelName);
85 const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
86 this.modelInformations = [
87 new ModelInformationItem("Subscriber Name", "subscriberName", [this.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId, this._store)], "", true),
88 new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
89 new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
90 new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
91 new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
92 new ModelInformationItem("Description", "description", [this.model.description]),
93 new ModelInformationItem("Category", "category", [this.model.category]),
94 new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
95 new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
96 new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
97 new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
98 new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
99 new ModelInformationItem("Minimum to instantiate", "vnf-min", [!_.isNil(this.model.min) ? this.model.min.toString() : '0'], "", false),
100 new ModelInformationItem("Maximum to instantiate", "vnf-max", [!_.isNil(this.model.max) ? this.model.max.toString() : '1'], "", false)
105 getSubLeftTitle(): string {
106 return "VNF MODEL: " + this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].vnfs[this.uuidData['modelName']].name;
109 getSubRightTitle(): string {
110 return "VNF Instance Details";
113 storeVNF = (that, formValues: any): void => {
114 formValues.modelInfo = new ModelInfo(that.model);
115 formValues.uuid = formValues.modelInfo.uuid;
116 formValues.isMissingData = false;
117 if(!that.isUpdateMode){
118 that._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelUniqueId, that.uuidData.serviceId, 1 , <any> {data: {type: 'VF'}}));
119 this._store.dispatch(createVNFInstance(formValues, that.uuidData['modelName'], that.uuidData['serviceId'], that.uuidData['modelName']));
121 that._store.dispatch(updateVNFInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vnfStoreKey))
125 getTitle(isUpdateMode: boolean): string {
126 return isUpdateMode ? "Edit VNF instance": "Set a new VNF" ;
129 onCancel(that, form): void {
131 that._iframeService.removeClassCloseModal('content');
132 this.closeDialogEvent.next(that);
135 onSubmit(that, form: FormGroup, ...args): void {
136 form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
137 that.storeVNF(that, form.value);
138 window.parent.postMessage( {
139 eventId: 'submitIframe',
141 serviceModelId: that.uuidData.serviceId
144 that.onCancel(that, form);
147 extractSubscriberNameBySubscriberId(subscriberId: string, store: NgRedux<AppState>) {
148 let result: string = null;
149 let filteredArray: any = _.filter(store.getState().service.subscribers, function (o: Subscriber) {
150 return o.id === subscriberId
152 if (filteredArray.length > 0) {
153 result = filteredArray[0].name;