1 import {Injectable} from "@angular/core";
2 import {GenericPopupInterface} from "../generic-popup.interface";
3 import {ServiceModel} from "../../../../models/serviceModel";
4 import {ModelInformationItem} from "../../../model-information/model-information.component";
5 import {Subject} from "rxjs";
6 import {ITreeNode} from "angular-tree-component/dist/defs/api";
7 import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
8 import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
9 import {IframeService} from "../../../../utils/iframe.service";
10 import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
11 import {AaiService} from "../../../../services/aaiService/aai.service";
12 import {BasicPopupService} from "../basic.popup.service";
13 import {NgRedux} from "@angular-redux/store";
14 import {AppState} from "../../../../store/reducers";
15 import {ServiceControlGenerator} from "../../../genericForm/formControlsServices/service.control.generator";
16 import {FormGroup} from "@angular/forms";
17 import {Constants} from "../../../../utils/constants";
18 import {ServiceInstance} from "../../../../models/serviceInstance";
19 import {ModelInfo} from "../../../../models/modelInfo";
20 import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
23 createServiceInstance,
25 } from "../../../../storeUtil/utils/service/service.actions";
26 import {ServiceInstanceActions} from "../../../../models/serviceInstanceActions";
27 import * as _ from 'lodash';
29 export class ServicePopupService implements GenericPopupInterface {
33 serviceModel: ServiceModel;
34 modelInformations: ModelInformationItem[] = [];
36 closeDialogEvent: Subject<any> = new Subject<any>();
37 isUpdateMode: boolean;
41 constructor(private _basicControlGenerator: BasicControlGenerator,
42 private _serviceControlGenerator: ServiceControlGenerator,
43 private _iframeService: IframeService,
44 private _defaultDataGeneratorService: DefaultDataGeneratorService,
45 private _aaiService: AaiService,
46 private _basicPopupService : BasicPopupService,
47 private _store: NgRedux<AppState>) {
51 getGenericFormPopupDetails(serviceId: string, modelName: string, storeKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
52 this.uuidData = uuidData;
53 this.instance = this.getInstance(serviceId);
54 this.getModelInformation(serviceId);
55 return new FormPopupDetails(this,
58 this.getTitle(isUpdateMode),
59 this.getSubLeftTitle(),
60 this.getSubRightTitle(),
61 this.getControls(serviceId),
62 this.getDynamicInputs(serviceId),
63 this.modelInformations,
64 (that, form: FormGroup) => {that.onSubmit(that, form);},
65 (that: any, form: FormGroup) => {that.onCancel(that, form); }
69 getDynamicInputs(serviceId) : FormControlModel[]{
70 let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[serviceId].service.inputs);
71 return this._basicControlGenerator.getServiceDynamicInputs(dynamic, serviceId);
75 getControls(serviceId: string) {
76 if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
77 return this._serviceControlGenerator.getMacroFormControls(serviceId, this.dynamicInputs);
79 return this._serviceControlGenerator.getAlaCartControls(serviceId, this.dynamicInputs);
83 getInstance(serviceId): ServiceInstance {
84 let result: ServiceInstance = null;
85 if(!_.isNil(this._store.getState().service.serviceInstance[serviceId])){
86 result = this._store.getState().service.serviceInstance[serviceId];
91 getModelInformation(serviceId: string): void {
92 this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
93 this.serviceModel = new ServiceModel(result);
95 this.model = this._store.getState().service.serviceHierarchy[serviceId];
96 this.modelInformations = [
97 new ModelInformationItem("Model version", "modelVersion", [this.serviceModel.version], "", true),
98 new ModelInformationItem("Description", "description", [this.serviceModel.description]),
99 new ModelInformationItem("Category", "category", [this.serviceModel.category]),
100 new ModelInformationItem("UUID", "uuid", [this.serviceModel.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
101 new ModelInformationItem("Invariant UUID", "invariantUuid", [this.serviceModel.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
102 new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
103 new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole])
108 getSubLeftTitle(): string {
109 return this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].service.name;
112 getSubRightTitle(): string {
113 return "Service Instance Details";
116 getTitle(isUpdateMode: boolean): string {
117 return isUpdateMode ? "Edit service instance" : "Set a new service instance";
120 onCancel(that, form): void {
122 that._iframeService.removeClassCloseModal('content');
123 this.closeDialogEvent.next(that);
126 onSubmit(that, form: FormGroup, ...args): void {
127 form = that.updateExtraValues(that, form);
128 that.storeServiceInstance(form.value, args[0], [], new ModelInfo(that.serviceModel), that.serviceModel);
129 window.parent.postMessage( {
130 eventId: 'submitIframe',
132 serviceModelId: that.serviceModel.uuid
135 this.onCancel(that, form);
138 updateExtraValues = (that, form) : any => {
139 const service = that._store.getState().service;
140 form.value['bulkSize'] = that.uuidData['bulkSize'];
141 form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
142 form.value['aicZoneName'] = !_.isNil(form.value['aicZoneId']) ?this.getNameFromListById(service.aicZones, form.value['aicZoneId']) : null;
143 form.value['owningEntityName'] = !_.isNil(form.value['owningEntityId']) ?this.getNameFromListById(service.categoryParameters.owningEntityList, form.value['owningEntityId']) : null;
144 form.value['testApi'] = sessionStorage.getItem("msoRequestParametersTestApiValue");
145 form.value['tenantName'] = this.getNameFromListById(service.lcpRegionsAndTenants.lcpRegionsTenantsMap[form.value['lcpCloudRegionId']], form.value['tenantId']);
149 getNameFromListById(list, id) {
151 return list.find(item => item.id === id).name;
156 storeServiceInstance = (formValues:any, servicesQty:number, dynamicInputs:any, serviceModel:ModelInfo, serviceDetails: any ) => {
157 formValues.bulkSize = this.uuidData['bulkSize'];
158 formValues.modelInfo = serviceModel;
159 let instantiationType = this._store.getState().service.serviceHierarchy[serviceModel.modelVersionId].service.instantiationType;
160 this.setIsALaCarte(formValues, instantiationType);
161 this.setTestApi(formValues);
162 Object.assign(formValues, serviceDetails);
163 let isCreateMode: boolean = this._store.getState().service.serviceInstance[serviceModel.modelVersionId] == null;
165 this._store.dispatch(createServiceInstance(formValues, serviceModel.modelVersionId));
167 this._store.dispatch(updateServiceInstance(formValues, serviceModel.modelVersionId));
170 if (this._store.getState().global.flags['FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD'] && isCreateMode) {
171 this._defaultDataGeneratorService.updateReduxOnFirstSet(serviceModel.modelVersionId, formValues);
175 setIsALaCarte = (formValues: any, instantiationType) => {
176 formValues.isALaCarte = instantiationType === 'A-La-Carte';
179 setTestApi = (formValues: any) =>{
180 if (this._store.getState().global.flags['FLAG_ADD_MSO_TESTAPI_FIELD'] && formValues.isAlaCarte) {
181 formValues.testApi = sessionStorage.getItem("msoRequestParametersTestApiValue");