diff options
Diffstat (limited to 'vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts')
-rw-r--r-- | vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts new file mode 100644 index 000000000..3012c139c --- /dev/null +++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts @@ -0,0 +1,349 @@ +import {Injectable} from "@angular/core"; +import {GenericFormService} from "../../generic-form.service"; +import {AaiService} from "../../../../services/aaiService/aai.service"; +import {NgRedux} from "@angular-redux/store"; +import {HttpClient} from "@angular/common/http"; +import {BasicControlGenerator} from "../basic.control.generator"; +import * as _ from 'lodash'; +import {Observable, of} from "rxjs"; + +import { + CustomValidatorOptions, + FormControlModel, + ValidatorModel, + ValidatorOptions +} from "../../../../models/formControlModels/formControl.model"; +import {LogService} from "../../../../utils/log/log.service"; +import {AppState} from "../../../../store/reducers"; +import {FormGroup} from "@angular/forms"; +import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model"; +import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum"; +import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model"; +import {SelectOption} from "../../../../models/selectOption"; +import {VfModuleInstance} from "../../../../models/vfModuleInstance"; +import {VfModule} from "../../../../models/vfModule"; +import {VNFModel} from "../../../../models/vnfModel"; +import {VnfInstance} from "../../../../models/vnfInstance"; +import {FileFormControl} from "../../../../models/formControlModels/fileFormControl.model"; +import {CheckboxFormControl} from "../../../../models/formControlModels/checkboxFormControl.model"; +import {FileUnit} from "../../../formControls/component/file/fileUnit.enum"; +import {Constants} from "../../../../utils/constants"; + + +export enum FormControlNames { + INSTANCE_NAME = 'instanceName', + VOLUME_GROUP_NAME = 'volumeGroupName', + LCPCLOUD_REGION_ID = 'lcpCloudRegionId', + LEGACY_REGION = 'legacyRegion', + TENANT_ID = 'tenantId', + ROLLBACK_ON_FAILURE = 'rollbackOnFailure', + SDN_C_PRE_LOAD = 'sdncPreLoad', + SUPPLEMENTARY_FILE = 'supplementaryFile' +} + + +@Injectable() +export class VfModuleControlGenerator { + aaiService: AaiService; + vfModuleModel: VfModule; + vfModuleName : string; + isUpdateMode : boolean; + + constructor(private genericFormService: GenericFormService, + private _basicControlGenerator: BasicControlGenerator, + private store: NgRedux<AppState>, + private http: HttpClient, + private _aaiService: AaiService, + private _logService: LogService) { + this.aaiService = _aaiService; + } + + setVFModuleStoreKey = (serviceId: string, vfModuleUuid: string) => { + const vfModules = this.store.getState().service.serviceHierarchy[serviceId].vfModules; + const vfModulesKeys = Object.keys(vfModules); + for(let key of vfModulesKeys){ + if(vfModules[key].uuid === vfModuleUuid){ + this.vfModuleName = key; + return; + } + } + }; + + + getVfModuleInstance = (serviceId: string, vnfStoreKey: string, UUIDData: Object, isUpdateMode: boolean): VfModuleInstance => { + let vfModuleInstance: VfModuleInstance = null; + if (isUpdateMode && this.store.getState().service.serviceInstance[serviceId] && + _.has(this.store.getState().service.serviceInstance[serviceId].vnfs, vnfStoreKey) && + _.has(this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules, UUIDData['modelName'])) { + vfModuleInstance = Object.assign({},this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules[UUIDData['modelName']][UUIDData['vFModuleStoreKey']]); + } + return vfModuleInstance; + }; + + extractVfAccordingToVfModuleUuid(serviceId: string, UUIDData: Object): VfModule { + const vfModule = this.store.getState().service.serviceHierarchy[serviceId].vfModules[UUIDData['modelName']]; + this.vfModuleModel = vfModule; + return vfModule; + } + + getMacroFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] { + this.isUpdateMode = isUpdateMode; + this.extractVfAccordingToVfModuleUuid(serviceId, uuidData); + if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) { + if(isUpdateMode){ + this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId); + return []; + } + } + + const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode); + const vfModuleModel = this.vfModuleModel; + const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey]; + const vnfModelName: string = vnf.originalName; + const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]); + + let result: FormControlModel[] = []; + + if (!_.isNil(vfModuleModel)) { + result.push(this.getInstanceName(vfModuleInstance, serviceId, vnfModel.isEcompGeneratedNaming)); + if (this.vfModuleModel.volumeGroupAllowed) { + result.push(this.getVolumeGroupName(vfModuleInstance, serviceId, vnfStoreKey, vfModuleInstance && vfModuleInstance.volumeGroupName, vnfModel.isEcompGeneratedNaming)); + } + } + if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) { + let suppFileInput:FileFormControl = <FileFormControl>(this.getSupplementaryFile(vfModuleInstance)); + result.push(suppFileInput); + result = result.concat(suppFileInput.hiddenFile); + } + return result; + } + + getAlaCarteFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] { + this.isUpdateMode = isUpdateMode; + this.extractVfAccordingToVfModuleUuid(serviceId, uuidData); + if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) { + if(isUpdateMode){ + this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId); + return []; + } + } + const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey]; + const vnfModelName: string = vnf.originalName; + const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]); + + const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode); + let result: FormControlModel[] = []; + result.push(this.getInstanceName(vfModuleInstance, serviceId, vnfModel.isEcompGeneratedNaming)); + + if (this.vfModuleModel.volumeGroupAllowed) { + result.push(this.getVolumeGroupName(vfModuleInstance, serviceId, vnfStoreKey, this.vfModuleName, vnfModel.isEcompGeneratedNaming)); + } + result.push(this.getLcpRegionControl(serviceId, vfModuleInstance, result)); + result.push(this._basicControlGenerator.getLegacyRegion(vfModuleInstance)); + result.push(this.getTenantControl(serviceId, vfModuleInstance, result)); + result.push(this.getRollbackOnFailureControl(vfModuleInstance, result)); + result.push(this.getSDNCControl(vfModuleInstance, result)); + if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) { + let suppFileInput:FileFormControl = <FileFormControl>(this.getSupplementaryFile(vfModuleInstance)); + result.push(suppFileInput); + result = result.concat(suppFileInput.hiddenFile); + } + return result; + + } + + getInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): FormControlModel { + let formControlModel:FormControlModel = this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, this.vfModuleModel); + formControlModel.onBlur = (event, form : FormGroup) => { + if(!_.isNil(form.controls['volumeGroupName'])&& event.target.value.length > 0){ + form.controls['volumeGroupName'].setValue(event.target.value + "_vol"); + } + }; + + return formControlModel; + } + + getDefaultVolumeGroupName(instance: any, vfModuleName: string, isEcompGeneratedNaming: boolean): string { + if ((!_.isNil(instance) && instance.volumeGroupName)) { + return instance.volumeGroupName; + } + if (isEcompGeneratedNaming) { + return null; + } + return this._basicControlGenerator.getDefaultInstanceName(instance, this.vfModuleModel) + "_vol"; + } + + getVolumeGroupName(instance: any, serviceId: string, vnfStoreKey: string, vfModuleName: string, isEcompGeneratedNaming: boolean): FormControlModel { + let validations: ValidatorModel[] = [ + new ValidatorModel(ValidatorOptions.pattern, 'Instance name may include only alphanumeric characters and underscore.', BasicControlGenerator.INSTANCE_NAME_REG_EX), + new ValidatorModel(CustomValidatorOptions.uniqueInstanceNameValidator, 'Volume Group instance name is already in use, please pick another name', [this.store, serviceId, instance && instance.volumeGroupName]) + ]; + // comment out because if not provided vid won't create VG + // if (!isEcompGeneratedNaming) { + // validations.push(new ValidatorModel(ValidatorOptions.required, 'is required')); + // } + return new InputFormControl({ + controlName: 'volumeGroupName', + displayName: 'Volume Group Name', + dataTestId: 'volumeGroupName', + // placeHolder: (!isEcompGeneratedNaming) ? 'Volume Group Name' : 'Automatically generated when not provided', + validations: validations, + tooltip : 'When filled, VID will create a Volume Group by this name and associate with this module.\n' + + 'When empty, the module is created without a Volume Group.', + isVisible: true, + value: this.getDefaultVolumeGroupName(instance, vfModuleName, isEcompGeneratedNaming), + onKeypress: (event) => { + const pattern:RegExp = BasicControlGenerator.INSTANCE_NAME_REG_EX; + if (pattern) { + if (!pattern.test(event['key'])) { + event.preventDefault(); + } + } + return event; + } + }); + } + + getSupplementaryFile(instance: any): FormControlModel { + return new FileFormControl({ + controlName: FormControlNames.SUPPLEMENTARY_FILE, + displayName: 'Supplementary Data File (JSON format)', + dataTestId: 'SupplementaryFile', + placeHolder: 'Choose file', + selectedFile: !_.isNil(instance) ? instance.supplementaryFileName: null, + isVisible: true, + acceptedExtentions: "application/json", + hiddenFile : [new InputFormControl({ + controlName: FormControlNames.SUPPLEMENTARY_FILE + "_hidden", + isVisible: false, + validations: [new ValidatorModel(CustomValidatorOptions.isFileTooBig, "File size exceeds 5MB.", [FileUnit.MB, 5])] + }), + new InputFormControl({ + controlName: FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content", + isVisible: false, + validations: [new ValidatorModel(CustomValidatorOptions.isValidJson, + "File is invalid, please make sure a legal JSON file is uploaded using name:value pairs.",[]), + new ValidatorModel(CustomValidatorOptions.isStringContainTags, + "File is invalid, please remove tags <>.",[])], + value: !_.isNil(instance) ? (instance.supplementaryFile_hidden_content): null, + }) + ], + onDelete : (form : FormGroup) => { + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(null); + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(null); + }, + onChange : (files: FileList, form : FormGroup) => { + if (files.length > 0) { + const file = files.item(0); + let reader = new FileReader(); + reader.onload = function(event) { + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(reader.result); + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(file); + }; + reader.readAsText(file); + } + else { + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(null); + form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(null); + } + } + }) + }; + + getTenantControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.TENANT_ID, + displayName: 'Tenant', + dataTestId: 'tenant', + placeHolder: 'Select Tenant', + name: "tenant", + isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId), + onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null, + value: instance ? instance.tenantId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInit: instance ? this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this.aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : () => { + }, + }) + }; + + getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => { + const service = this.store.getState().service.serviceInstance[serviceId]; + const globalCustomerId: string = service.globalSubscriberId; + const serviceType: string = service.subscriptionServiceType; + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: 'lcpCloudRegionId', + displayName: 'LCP region', + dataTestId: 'lcpRegion', + placeHolder: 'Select LCP Region', + name: "lcpRegion", + isDisabled: false, + value: instance ? instance.lcpCloudRegionId : null, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + onInitSelectedField: ['lcpRegionList'], + onInit: this._basicControlGenerator.getSubscribeInitResult.bind( + this._aaiService, + this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)), + onChange: (param: string, form: FormGroup) => { + form.controls[FormControlNames.TENANT_ID].enable(); + form.controls[FormControlNames.TENANT_ID].reset(); + if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) { + this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => { + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param]; + if (res.lcpRegionsTenantsMap[param]) { + controls.find(item => item.controlName === FormControlNames.TENANT_ID)['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0; + } + })); + } + + if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) { + form.controls['legacyRegion'].enable(); + controls.find(item => item.controlName === 'legacyRegion').isVisible = true; + + } else { + controls.find(item => item.controlName === 'legacyRegion').isVisible = false; + form.controls['legacyRegion'].setValue(null); + form.controls['legacyRegion'].reset(); + form.controls['legacyRegion'].disable(); + } + } + }) + }; + + getSDNCControl = (instance: any, controls: FormControlModel[]): CheckboxFormControl => { + return new CheckboxFormControl({ + type: FormControlType.CHECKBOX, + controlName: 'sdncPreLoad', + displayName: 'SDN-C pre-load', + dataTestId: 'sdncPreLoad', + value: instance ? instance.sdncPreLoad : false, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')] + }) + }; + + getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => { + return new DropdownFormControl({ + type: FormControlType.DROPDOWN, + controlName: FormControlNames.ROLLBACK_ON_FAILURE, + displayName: 'Rollback on failure', + dataTestId: 'rollback', + isDisabled: false, + validations: [new ValidatorModel(ValidatorOptions.required, 'is required')], + value: instance ? instance.rollbackOnFailure : 'true', + onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions) + }) + }; + + getRollBackOnFailureOptions = (): Observable<SelectOption[]> => { + return of([ + new SelectOption({id: 'true', name: 'Rollback'}), + new SelectOption({id: 'false', name: 'Don\'t Rollback'}) + ]); + }; +} |