1 import {Injectable} from "@angular/core";
2 import {GenericFormService} from "../../generic-form.service";
3 import {AaiService} from "../../../../services/aaiService/aai.service";
4 import {NgRedux} from "@angular-redux/store";
5 import {HttpClient} from "@angular/common/http";
6 import {ControlGeneratorUtil} from "../control.generator.util.service";
8 CustomValidatorOptions,
12 } from "../../../../models/formControlModels/formControl.model";
13 import {LogService} from "../../../../utils/log/log.service";
14 import {AppState} from "../../../../store/reducers";
15 import {FormGroup} from "@angular/forms";
16 import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
17 import {VfModuleInstance} from "../../../../models/vfModuleInstance";
18 import {VfModule} from "../../../../models/vfModule";
19 import {VNFModel} from "../../../../models/vnfModel";
20 import {VnfInstance} from "../../../../models/vnfInstance";
21 import * as _ from 'lodash';
22 import {SharedControllersService} from "../sharedControlles/shared.controllers.service";
24 export enum FormControlNames {
25 INSTANCE_NAME = 'instanceName',
26 VOLUME_GROUP_NAME = 'volumeGroupName',
27 LCPCLOUD_REGION_ID = 'lcpCloudRegionId',
28 LEGACY_REGION = 'legacyRegion',
29 TENANT_ID = 'tenantId',
30 ROLLBACK_ON_FAILURE = 'rollbackOnFailure',
35 export class VfModuleControlGenerator {
36 aaiService: AaiService;
37 vfModuleModel: VfModule;
38 isUpdateMode : boolean;
40 constructor(private genericFormService: GenericFormService,
41 private _basicControlGenerator: ControlGeneratorUtil,
42 private _sharedControllersService: SharedControllersService,
43 private store: NgRedux<AppState>,
44 private http: HttpClient,
45 private _aaiService: AaiService,
46 private _logService: LogService) {
47 this.aaiService = _aaiService;
50 getVfModuleInstance = (serviceId: string, vnfStoreKey: string, UUIDData: Object, isUpdateMode: boolean): VfModuleInstance => {
51 let vfModuleInstance: VfModuleInstance = null;
52 if (isUpdateMode && this.store.getState().service.serviceInstance[serviceId] &&
53 _.has(this.store.getState().service.serviceInstance[serviceId].vnfs, vnfStoreKey) &&
54 _.has(this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules, UUIDData['modelName'])) {
55 vfModuleInstance = Object.assign({},this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules[UUIDData['modelName']][UUIDData['vFModuleStoreKey']]);
57 return vfModuleInstance;
60 extractVfAccordingToVfModuleUuid(serviceId: string, UUIDData: Object): VfModule {
61 const vfModule = this.store.getState().service.serviceHierarchy[serviceId].vfModules[UUIDData['modelName']];
62 this.vfModuleModel = vfModule;
66 getMacroFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] {
67 this.isUpdateMode = isUpdateMode;
68 this.extractVfAccordingToVfModuleUuid(serviceId, uuidData);
69 if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) {
71 this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId);
76 const vfModuleInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode));
77 const vfModuleModel = this.vfModuleModel;
78 const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
79 const vnfModelName: string = vnf.originalName;
80 const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]);
82 let result: FormControlModel[] = [];
84 if (!_.isNil(vfModuleModel)) {
85 result = this.pushInstanceAndVGToForm(result, vfModuleInstance, serviceId, vnfModel, false);
87 if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
88 result = this._basicControlGenerator.concatSupplementaryFile(result, vfModuleInstance);
93 pushInstanceAndVGToForm(result: FormControlModel[], vfModuleElement: any, serviceId: string, vnfModel: any, isALaCarte: boolean) :FormControlModel[]{
94 result.push(this.getInstanceName(vfModuleElement, serviceId, vnfModel.isEcompGeneratedNaming));
95 if (this.vfModuleModel.volumeGroupAllowed) {
96 result.push(this.getVolumeGroupData(vfModuleElement, serviceId, vnfModel.isEcompGeneratedNaming, isALaCarte));
101 getAlaCarteFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] {
102 this.isUpdateMode = isUpdateMode;
103 this.extractVfAccordingToVfModuleUuid(serviceId, uuidData);
104 if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) {
106 this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId);
110 const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey] ;
111 const vnfModelName: string = vnf.originalName;
112 const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]);
114 const vfModuleInstance = this._basicControlGenerator.retrieveInstanceIfUpdateMode(this.store, this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode));
115 let result: FormControlModel[] = [];
116 this.pushInstanceAndVGToForm(result, vfModuleInstance, serviceId, vnfModel, true);
117 result.push(this._sharedControllersService.getLcpRegionControl(serviceId, vfModuleInstance, result));
118 result.push(this._sharedControllersService.getLegacyRegion(vfModuleInstance));
119 result.push(this._sharedControllersService.getTenantControl(serviceId, vfModuleInstance));
120 result.push(this._sharedControllersService.getRollbackOnFailureControl(vfModuleInstance));
121 result.push(this._sharedControllersService.getSDNCControl(vfModuleInstance));
122 if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
123 result = this._basicControlGenerator.concatSupplementaryFile(result, vfModuleInstance);
128 getInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): FormControlModel {
129 let formControlModel:FormControlModel = this._sharedControllersService.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, this.vfModuleModel);
130 formControlModel.onBlur = (event, form : FormGroup) => {
131 if(!_.isNil(form.controls['volumeGroupName'])&& event.target.value.length > 0){
132 form.controls['volumeGroupName'].setValue(event.target.value + "_vol");
136 return formControlModel;
139 getDefaultVolumeGroupName(instance: any, isEcompGeneratedNaming: boolean): string {
140 if ((!_.isNil(instance) && instance.volumeGroupName)) {
141 return instance.volumeGroupName;
143 if (isEcompGeneratedNaming) {
146 return this._basicControlGenerator.getDefaultInstanceName(instance, this.vfModuleModel) + "_vol";
149 getVolumeGroupData(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, isALaCarte: boolean): FormControlModel {
150 let validations: ValidatorModel[] = [
151 new ValidatorModel(ValidatorOptions.pattern, 'Instance name may include only alphanumeric characters and underscore.', ControlGeneratorUtil.INSTANCE_NAME_REG_EX),
152 new ValidatorModel(CustomValidatorOptions.uniqueInstanceNameValidator, 'Volume Group instance name is already in use, please pick another name', [this.store, serviceId, instance && instance.volumeGroupName])
155 return new InputFormControl({
156 controlName: 'volumeGroupName',
157 displayName: 'Volume Group Name',
158 dataTestId: 'volumeGroupName',
159 validations: validations,
160 tooltip : 'When filled, VID will create a Volume Group by this name and associate with this module.\n' +
161 'When empty, the module is created without a Volume Group.',
162 isVisible: this.shouldVGNameBeVisible(isEcompGeneratedNaming,isALaCarte),
163 value: this.getDefaultVolumeGroupName(instance, isEcompGeneratedNaming),
164 onKeypress: (event) => {
165 const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
167 if (!pattern.test(event['key'])) {
168 event.preventDefault();
176 private shouldVGNameBeVisible(isEcompGeneratedNaming: boolean, isALaCarte: boolean) {
177 if((!isALaCarte && !isEcompGeneratedNaming) || isALaCarte){