1 import {Injectable} from "@angular/core";
2 import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
3 import {ControlGeneratorUtil} from "../../../genericForm/formControlsServices/control.generator.util.service";
4 import {AppState} from "../../../../store/reducers";
5 import {NgRedux} from "@angular-redux/store";
6 import {ITreeNode} from "angular-tree-component/dist/defs/api";
7 import {ModelInformationItem} from "../../../model-information/model-information.component";
8 import {Constants} from "../../../../utils/constants";
9 import {AaiService} from "../../../../services/aaiService/aai.service";
10 import {ServiceModel} from "../../../../models/serviceModel";
11 import {FormGroup} from "@angular/forms";
12 import {ModelInfo} from "../../../../models/modelInfo";
13 import {IframeService} from "../../../../utils/iframe.service";
14 import {GenericPopupInterface} from "../generic-popup.interface";
15 import {Subject} from "rxjs/Subject";
16 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
17 import {BasicPopupService} from "../basic.popup.service";
18 import {VfModuleInstance} from "../../../../models/vfModuleInstance";
19 import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
20 import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
21 import * as _ from 'lodash';
22 import {createVFModuleInstance, updateVFModuleInstance} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
23 import {SharedControllersService} from "../../../genericForm/formControlsServices/sharedControlles/shared.controllers.service";
25 export abstract class VfModulePopupServiceBase {
29 serviceModel: ServiceModel;
30 modelInformations: ModelInformationItem[] = [];
32 closeDialogEvent: Subject<any> = new Subject<any>();
33 isUpdateMode: boolean;
34 storeVFModule = (that, formValues: any): void => {
35 formValues.modelInfo = new ModelInfo(that.model);
36 formValues.uuid = formValues.modelInfo.uuid;
37 formValues.isMissingData = false;
39 if (!that.uuidData.vFModuleStoreKey) {
40 this._store.dispatch(createVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, 0, that.uuidData.vnfStoreKey));
42 this._store.dispatch(updateVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vFModuleStoreKey, that.uuidData.vnfStoreKey));
46 protected constructor(
47 protected _basicControlGenerator: ControlGeneratorUtil,
48 protected _sharedControllersService : SharedControllersService,
49 protected _vfModuleControlGenerator: VfModuleControlGenerator,
50 protected _iframeService: IframeService,
51 protected _defaultDataGeneratorService: DefaultDataGeneratorService,
52 protected _aaiService: AaiService,
53 protected _basicPopupService: BasicPopupService,
54 protected _store: NgRedux<AppState>) {
57 getInstance(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string): any {
58 if (_.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) {
59 return new VfModuleInstance();
61 const vfModules = this._store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules;
62 return vfModules[this.uuidData['modelName']][vfModuleStoreKey];
65 getModelInformation(serviceId: string, modelName: string) {
66 this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
67 this.serviceModel = new ServiceModel(result);
69 this.model = this._basicPopupService.getModelFromResponse(result, 'vfModules', modelName);
70 const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
71 this.modelInformations = [
72 new ModelInformationItem("Subscriber Name", "subscriberName", [this._basicPopupService.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true),
73 new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
74 new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
75 new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
76 new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
77 new ModelInformationItem("Description", "description", [this.model.description]),
78 new ModelInformationItem("Category", "category", [this.model.category]),
79 new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
80 new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
81 new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
82 new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
83 new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
84 new ModelInformationItem("Minimum to instantiate", "min", this.model.min == undefined ? ['0'] : [this.model.min.toString()], "", true),
85 this._basicPopupService.createMaximumToInstantiateModelInformationItem(this.model),
86 new ModelInformationItem("Recommended to instantiate", "initial", [this.model.initial])
91 protected postSubmitIframeMessage(that) {
92 window.parent.postMessage({
93 eventId: 'submitIframe',
95 serviceModelId: that.serviceModel.uuid
100 onCancel(that, form) {
102 that._iframeService.removeClassCloseModal('content');
103 this.closeDialogEvent.next(that);
106 getSubLeftTitle(): string {
107 return this.model.name;
110 getSubRightTitle(): string {
111 return "Module (Heat stack) Instance Details";
114 abstract getTitle(isUpdateMode : boolean) : string;
115 abstract getControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, isUpdateMode: boolean);
116 abstract getDynamicInputs(UUIDData : Object) : FormControlModel[];
118 getGenericFormPopupDetails(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
120 this.uuidData = uuidData;
121 this.instance = this.getInstance(serviceId, vnfStoreKey, vfModuleStoreKey);
122 this.getModelInformation(serviceId, uuidData['modelName']);
124 return new FormPopupDetails(this,
127 this.getTitle(isUpdateMode),
128 this.getSubLeftTitle(),
129 this.getSubRightTitle(),
130 this.getControls(serviceId, vnfStoreKey, vfModuleStoreKey, isUpdateMode),
131 this.getDynamicInputs(uuidData),
132 this.modelInformations,
133 (that, form: FormGroup) => {
134 that.onSubmit(that, form);
136 (that: any, form: FormGroup) => {
137 that.onCancel(that, form);
142 updateFormValueWithSupplementaryFile(form: FormGroup, that) {
143 if (!_.isNil(form.controls['supplementaryFile_hidden_content']) && form.controls['supplementaryFile_hidden_content'].value) {
144 form.value['supplementaryFileContent'] = JSON.parse(form.controls['supplementaryFile_hidden_content'].value);
145 if (!_.isNil(form.controls['supplementaryFile_hidden'].value)) {
146 form.value['supplementaryFileName'] = form.controls['supplementaryFile_hidden'].value.name;
148 form.value['supplementaryFileName'] = that.instance.supplementaryFileName;
151 delete form.value['supplementaryFileContent'];
152 delete form.value['supplementaryFileName'];
158 export class VfModulePopupService extends VfModulePopupServiceBase implements GenericPopupInterface {
161 constructor(_basicControlGenerator: ControlGeneratorUtil,
162 _sharedControllersService : SharedControllersService,
163 _vfModuleControlGenerator: VfModuleControlGenerator,
164 _iframeService: IframeService,
165 _defaultDataGeneratorService: DefaultDataGeneratorService,
166 _aaiService: AaiService,
167 _basicPopupService : BasicPopupService,
168 _store: NgRedux<AppState>) {
169 super(_basicControlGenerator, _sharedControllersService, _vfModuleControlGenerator, _iframeService, _defaultDataGeneratorService, _aaiService, _basicPopupService, _store);
173 getDynamicInputs(UUIDData : Object) : FormControlModel[]{
174 let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[UUIDData['serviceId']].vfModules[UUIDData['modelName']].inputs);
175 return this.getVFModuleDynamicInputs(dynamic, UUIDData);
178 getVFModuleDynamicInputs(dynamicInputs : any, UUIDData : Object) : FormControlModel[] {
179 let result : FormControlModel[] = [];
181 let vfModuleInstance = null;
182 if (_.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs, UUIDData['vnfStoreKey']) &&
183 _.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules, UUIDData['modelName'])) {
184 vfModuleInstance = Object.assign({},this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules[UUIDData['modelName']][UUIDData['vfModuleStoreKey']]);
186 result = this._basicControlGenerator.getDynamicInputs(dynamicInputs, vfModuleInstance);
192 getControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, isUpdateMode: boolean) {
193 if (this._store.getState().service.serviceHierarchy[serviceId].service.vidNotions.instantiationType === 'Macro') {
194 return this._vfModuleControlGenerator.getMacroFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, this.uuidData, isUpdateMode);
196 return this._vfModuleControlGenerator.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, this.uuidData, isUpdateMode);
201 onSubmit(that, form: FormGroup) {
202 form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
203 this.updateFormValueWithSupplementaryFile(form, that);
204 that.storeVFModule(that, form.value);
205 this.postSubmitIframeMessage(that);
206 this.onCancel(that, form);
209 getTitle(isUpdateMode : boolean) : string {
210 return isUpdateMode ? 'Edit Module (Heat stack)' : 'Set new Module (Heat stack)';