748edd2cb1628218bcfae78e1bed55ce4234af83
[vid.git] / vid-webpack-master / src / app / shared / components / genericFormPopup / genericFormServices / vnfGroup / vnfGroup.popup.service.ts
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 {IframeService} from "../../../../utils/iframe.service";
11 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
12 import {AaiService} from "../../../../services/aaiService/aai.service";
13 import {BasicPopupService} from "../basic.popup.service";
14 import {NgRedux} from "@angular-redux/store";
15 import {AppState} from "../../../../store/reducers";
16 import {Subscriber} from "../../../../models/subscriber";
17 import {Constants} from "../../../../utils/constants";
18 import {ModelInfo} from "../../../../models/modelInfo";
19 import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions";
20 import * as _ from 'lodash';
21 import {VnfGroupControlGenerator} from "../../../genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator";
22 import {VnfGroupInstance} from "../../../../models/vnfGroupInstance";
23 import {createVnfGroupInstance, updateVnfGroupInstance} from "../../../../storeUtil/utils/vnfGroup/vnfGroup.actions";
24
25 @Injectable()
26 export class VnfGroupPopupService implements GenericPopupInterface{
27   dynamicInputs: any;
28   instance: any;
29   model:any;
30   serviceModel:ServiceModel;
31   modelInformations: ModelInformationItem[] = [];
32   uuidData: Object;
33   closeDialogEvent: Subject<any> = new Subject<any>();
34   isUpdateMode: boolean;
35
36   constructor(
37     private _basicControlGenerator: BasicControlGenerator,
38     private _vnfGroupControlGenerator: VnfGroupControlGenerator,
39     private _iframeService: IframeService,
40     private _defaultDataGeneratorService: DefaultDataGeneratorService,
41     private _aaiService: AaiService,
42     private _basicPopupService: BasicPopupService,
43     private _store: NgRedux<AppState>) {
44   }
45
46   getGenericFormPopupDetails(serviceId: string, modelName: string, vnfGroupStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
47     this.uuidData = uuidData;
48     this.isUpdateMode = isUpdateMode;
49     this.instance = this.getInstance(serviceId, modelName, vnfGroupStoreKey);
50     this.getModelInformation(serviceId, modelName);
51
52     return new FormPopupDetails(this,
53       PopupType.VNF_GROUP,
54       uuidData,
55       this.getTitle(isUpdateMode),
56       this.getSubLeftTitle(),
57       this.getSubRightTitle(),
58       this.getControls(serviceId, modelName, vnfGroupStoreKey),
59       this._basicPopupService.getDynamicInputs(serviceId, modelName, vnfGroupStoreKey, 'vnfGroups'),
60       this.modelInformations,
61       (that, form: FormGroup) => {that.onSubmit(that, form);},
62       (that: any, form: FormGroup) => {that.onCancel(that, form); }
63       )
64   }
65
66   getControls(serviceId: string, modelName: string, vnfGroupStoreKey: string){
67     if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
68       return this._vnfGroupControlGenerator.getMacroFormControls(serviceId, vnfGroupStoreKey, modelName);
69     } else {
70       return this._vnfGroupControlGenerator.getAlaCarteFormControls(serviceId, vnfGroupStoreKey, modelName);
71     }
72   }
73
74   getInstance(serviceId: string, modelName: string, vnfGroupStoreKey: string): any {
75     if(_.isNil(vnfGroupStoreKey)){
76       return new VnfGroupInstance();
77     }
78     return this._store.getState().service.serviceInstance[serviceId].vnfGroups[vnfGroupStoreKey];
79   }
80
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, 'vnfGroups', modelName);
85       const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
86       this.modelInformations = [
87         new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
88         new ModelInformationItem("Description", "description", [this.model.description]),
89         new ModelInformationItem("Category", "category", [this.model.category]),
90         new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
91         new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
92         new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
93         new ModelInformationItem("Type", "type", [this.model.properties.type], "", true),
94         new ModelInformationItem("Role", "role", [this.model.properties.role]),
95         new ModelInformationItem("Function", "function", [this.model.properties.function]),
96         new ModelInformationItem("Member resource type", "contained_resource_type", ["VNF"], "", true),
97         new ModelInformationItem("Members service Invariant UUID", "Members service Invariant UUID", _.toArray(_.mapValues(this.model.members, 'sourceModelInvariant'))),
98         new ModelInformationItem("Members service model name", "sourceModelName", _.toArray(_.mapValues(this.model.members, 'sourceModelName'))),
99         new ModelInformationItem("Minimum to instantiate", "vnfGroup-min", ['0'], "", false),
100         new ModelInformationItem("Maximum to instantiate", "vnfGroup-max", ['Unlimited'], "", false)
101         ];
102     })
103   }
104
105   getSubLeftTitle(): string {
106     return "VNF Group : " + this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].vnfGroups[this.uuidData['modelName']].name;
107   }
108
109   getSubRightTitle(): string {
110     return "VNF Group Instance Details";
111   }
112
113   storeVnfGroup = (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.modelCustomizationId || formValues.uuid, that.uuidData.serviceId, 1 , <any> {data: {type: 'VnfGroup'}}));
119       this._store.dispatch(createVnfGroupInstance(formValues, that.uuidData['modelName'], that.uuidData['serviceId'], that.uuidData['modelName']));
120     }else {
121       that._store.dispatch(updateVnfGroupInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vnfGroupStoreKey))
122     }
123   };
124
125   getTitle(isUpdateMode: boolean): string {
126     return isUpdateMode  ? "Edit VNF Group instance": "Set a new VNF Group" ;
127   }
128
129   onCancel(that, form): void {
130     form.reset();
131     that._iframeService.removeClassCloseModal('content');
132     this.closeDialogEvent.next(that);
133   }
134
135   onSubmit(that, form: FormGroup, ...args): void {
136     form.value['instanceParams'] = [{}];
137     that.storeVnfGroup(that, form.value);
138     window.parent.postMessage( {
139       eventId: 'submitIframe',
140       data: {
141         serviceModelId: that.uuidData.serviceId
142       }
143     }, "*");
144     that.onCancel(that, form);
145   }
146
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
151     });
152     if (filteredArray.length > 0) {
153       result = filteredArray[0].name;
154     }
155     return result;
156   }
157
158 }