1 import {Injectable} from "@angular/core";
2 import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
3 import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
8 } from "../../../../models/formControlModels/formControl.model";
9 import {NgRedux} from "@angular-redux/store";
10 import {AppState} from "../../../../store/reducers";
11 import {AaiService} from "../../../../services/aaiService/aai.service";
12 import {ControlGeneratorUtil, SDN_C_PRE_LOAD} from "../control.generator.util.service";
13 import * as _ from "lodash";
14 import {FormGroup} from "@angular/forms";
15 import {Constants} from "../../../../utils/constants";
16 import {CheckboxFormControl} from "../../../../models/formControlModels/checkboxFormControl.model";
17 import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
18 import {NodeModel} from "../../../../models/nodeModel";
19 import {LcpRegion} from "../../../../models/lcpRegion";
20 import {Tenant} from "../../../../models/tenant";
21 import {MultiselectFormControl} from "../../../../models/formControlModels/multiselectFormControl.model";
22 import {MultiSelectItem} from "../../../formControls/component/multiselect/multiselect.model";
25 export class SharedControllersService {
26 constructor(private _store : NgRedux<AppState>,
27 private _aaiService : AaiService,
28 private _basicControlGenerator : ControlGeneratorUtil){}
31 getLineOfBusinessControl = (instance?: any): DropdownFormControl => {
32 return this.getLineOfBusinessControlInternal(undefined, instance);
35 getMultiSelectLineOfBusinessControl = (instance: any, isMultiSelected: boolean): MultiselectFormControl => {
36 return this.getLobMultiselectControl(instance, isMultiSelected);
39 getLineOfBusinessByOwningEntityControl = (instance?: any, serviceId?: string, controls?: FormControlModel[]): DropdownFormControl => {
40 const service = this._store.getState().service.serviceInstance[serviceId];
41 const owningEntityName: string = service.owningEntityName;
43 const changeLcpRegionOptionsOnChange = (lineOfBusinessNameParam: string, form: FormGroup) => {
44 form.controls['lcpCloudRegionId'].enable();
45 form.controls['lcpCloudRegionId'].reset();
46 this._basicControlGenerator.getSubscribeInitResult(
47 this._aaiService.getLcpRegionsByOwningEntityAndLineOfBusiness.bind(this, owningEntityName, lineOfBusinessNameParam),
48 controls.find(item => item.controlName === 'lcpCloudRegionId') as DropdownFormControl, form
52 return this.getLineOfBusinessControlInternal(changeLcpRegionOptionsOnChange, instance);
55 private getLineOfBusinessControlInternal = (onChange: Function, instance?: any): DropdownFormControl => {
56 return new DropdownFormControl({
57 type: FormControlType.DROPDOWN,
58 controlName: 'lineOfBusiness',
59 displayName: 'Line of business',
60 dataTestId: 'lineOfBusiness',
61 placeHolder: 'Select Line Of Business',
63 name: "lineOfBusiness",
64 value: instance ? instance.lineOfBusiness : null,
65 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
66 onInitSelectedField: ['lineOfBusinessList'],
68 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
72 getTenantControl = (serviceId: string, instance?: any): DropdownFormControl => {
73 const service = this._store.getState().service.serviceInstance[serviceId];
74 const globalCustomerId: string = service.globalSubscriberId;
75 const serviceType: string = service.subscriptionServiceType;
77 const onInit = instance
78 ? this._basicControlGenerator.getSubscribeInitResult.bind(
80 this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType))
82 return this.getTenantControlInternal(onInit, instance);
85 getTenantByLcpRegionControl = (serviceId: string, instance?: any): DropdownFormControl => {
86 return this.getTenantControlInternal(() => {}, instance);
89 private getTenantControlInternal = (onInit: Function, instance?: any): DropdownFormControl => {
90 return new DropdownFormControl({
91 type: FormControlType.DROPDOWN,
92 controlName: 'tenantId',
93 displayName: 'Tenant',
95 placeHolder: 'Select Tenant',
97 isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId),
98 onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null,
99 value: instance ? instance.tenantId : null,
100 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
105 getRollbackOnFailureControl = (instance?: any): DropdownFormControl => {
106 return new DropdownFormControl({
107 type: FormControlType.DROPDOWN,
108 controlName: 'rollbackOnFailure',
109 displayName: 'Rollback on failure',
110 dataTestId: 'rollback',
111 placeHolder: 'Rollback on failure',
113 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
114 value: instance ? instance.rollbackOnFailure : 'true',
115 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._basicControlGenerator.getRollBackOnFailureOptions)
119 getLegacyRegion(instance: any): FormControlModel {
120 return new InputFormControl({
121 controlName: 'legacyRegion',
122 displayName: 'Legacy Region',
123 dataTestId: 'lcpRegionText',
124 placeHolder: 'Type Legacy Region',
126 isVisible: this._basicControlGenerator.isLegacyRegionShouldBeVisible(instance),
127 isDisabled : _.isNil(instance) ? true : Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId),
128 value: instance ? instance.legacyRegion : null
132 getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
133 const service = this._store.getState().service.serviceInstance[serviceId];
134 const globalCustomerId: string = service.globalSubscriberId;
135 const serviceType: string = service.subscriptionServiceType;
137 const onInit = this._basicControlGenerator.getSubscribeInitResult.bind(
139 this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)
142 const changeTenantsOptionsByServiceTypeOnChange = (
143 (globalCustomerId, serviceType, lcpCloudRegionIdParam) => {
144 if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
145 this._basicControlGenerator.getSubscribeResult.bind(this,
146 this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType)
147 .subscribe(res => this.setTenantsOptions(controls, res.lcpRegionsTenantsMap[lcpCloudRegionIdParam])));
151 ).bind(this, globalCustomerId, serviceType);
153 return this.getLcpRegionControlInternal(instance, controls,
154 false, onInit, ['lcpRegionList'], changeTenantsOptionsByServiceTypeOnChange)
157 getLcpRegionByLineOfBusinessControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
158 const service = this._store.getState().service.serviceInstance[serviceId];
159 const owningEntityName: string = service.owningEntityName;
161 const changeTenantsOptions = (controls: FormControlModel[], cloudRegionId, lcpRegionList: LcpRegion[]) => {
162 const lcpRegionOption = (_.isNil(lcpRegionList) || _.isNil(cloudRegionId))
163 ? null : lcpRegionList.find(({id}) => id === cloudRegionId);
165 if (!_.isNil(lcpRegionOption)) {
166 this._aaiService.getTenantsByCloudOwnerAndCloudRegionId(lcpRegionOption.cloudOwner, lcpRegionOption.id)
167 .subscribe(res => this.setTenantsOptions(controls, res));
171 const lcpRegionOptionsList = (controls: FormControlModel[]): LcpRegion[] => {
172 const lcpCloudRegionIdControl = _.isNil(controls)
173 ? null : controls.find(({controlName}) => controlName === 'lcpCloudRegionId');
175 return _.isNil(lcpCloudRegionIdControl) ? null : lcpCloudRegionIdControl['options$'];
178 const loadLcpRegionOptionsOnInit = (_.isNil(instance) || _.isNil(instance.lineOfBusiness))
180 : this._basicControlGenerator.getSubscribeInitResult.bind(
182 return this._aaiService.getLcpRegionsByOwningEntityAndLineOfBusiness(owningEntityName, instance.lineOfBusiness)
183 .do(res => changeTenantsOptions(controls, instance.lcpCloudRegionId, res));
187 const changeTenantsOptionsByCloudRegionIdOnChange = (
188 (controls, lcpCloudRegionIdParam) => changeTenantsOptions(controls, lcpCloudRegionIdParam, lcpRegionOptionsList(controls))
189 ).bind(this, controls);
191 return this.getLcpRegionControlInternal(instance, controls,
192 _.isNil(instance) || _.isNil(instance.lineOfBusiness),
193 loadLcpRegionOptionsOnInit, null, changeTenantsOptionsByCloudRegionIdOnChange
197 private getLcpRegionControlInternal = (instance: any, controls: FormControlModel[], isDisabled: boolean,
198 onInit: Function, onInitSelectedField: string[], changeTenantsOptionsOnChange: Function
199 ): DropdownFormControl => {
200 return new DropdownFormControl({
201 type: FormControlType.DROPDOWN,
202 controlName: 'lcpCloudRegionId',
203 displayName: 'LCP region',
204 dataTestId: 'lcpRegion',
205 placeHolder: 'Select LCP Region',
208 value: instance ? instance.lcpCloudRegionId : null,
209 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
213 onChange: (lcpCloudRegionIdParam: string, form: FormGroup) => {
214 form.controls['tenantId'].enable();
215 form.controls['tenantId'].reset();
217 changeTenantsOptionsOnChange(lcpCloudRegionIdParam);
219 if (Constants.LegacyRegion.MEGA_REGION.indexOf(lcpCloudRegionIdParam) !== -1) {
220 form.controls['legacyRegion'].enable();
221 controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
224 controls.find(item => item.controlName === 'legacyRegion').isVisible = false;
225 form.controls['legacyRegion'].setValue(null);
226 form.controls['legacyRegion'].reset();
227 form.controls['legacyRegion'].disable();
233 private setTenantsOptions = (controls: FormControlModel[], tenants: Tenant[]) => {
234 const tenantsControl = controls.find(item => item.controlName === 'tenantId');
235 tenantsControl['options$'] = tenants;
236 tenantsControl['hasEmptyOptions'] = tenants && tenants.length === 0;
239 getSDNCControl = (instance: any, extraContents? : object[]): FormControlModel => {
240 return new CheckboxFormControl({
241 controlName: SDN_C_PRE_LOAD,
242 displayName: 'SDN-C pre-load',
243 dataTestId: 'sdncPreLoad',
244 value: instance ? instance.sdncPreLoad : false,
245 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
250 getProductFamilyControl = (instance : any, controls : FormControlModel[], isMandatory?: boolean) : DropdownFormControl => {
251 return new DropdownFormControl({
252 type : FormControlType.DROPDOWN,
253 controlName : 'productFamilyId',
254 displayName : 'Product family',
255 dataTestId : 'productFamily',
256 placeHolder : 'Select Product Family',
258 name : "product-family-select",
259 value : instance ? instance.productFamilyId : null,
260 validations : _.isNil(isMandatory) || isMandatory === true ? [new ValidatorModel(ValidatorOptions.required, 'is required')]: [],
261 onInit : this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getProductFamilies),
265 getInstanceNameController(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, model: NodeModel): FormControlModel {
266 let validations: ValidatorModel[] = this._basicControlGenerator.createValidationsForInstanceName(instance, serviceId, isEcompGeneratedNaming);
267 return new InputFormControl({
268 controlName: 'instanceName',
269 displayName: 'Instance name',
270 dataTestId: 'instanceName',
271 placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided',
272 validations: validations,
274 value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName) && instance.instanceName !== ""))
275 ? this._basicControlGenerator.getDefaultInstanceName(instance, model) : null,
276 onKeypress : (event) => {
277 const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
279 if(!pattern.test(event['key'])){
280 event.preventDefault();
288 getInstanceName(instance : any, serviceId : string, isEcompGeneratedNaming: boolean): FormControlModel {
289 let formControlModel:FormControlModel = this.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, new NodeModel());
290 formControlModel.value = instance ? instance.instanceName : null;
291 return formControlModel;
294 getPlatformMultiselectControl = (instance: any, controls: FormControlModel[], isMultiSelected: boolean) : MultiselectFormControl => {
295 return this.getMultiSelectFormControl(
298 'multi-selectPlatform',
302 instance ? instance.platformName : null,
308 getLobMultiselectControl = (instance: any, isMultiSelected: boolean) : MultiselectFormControl => {
309 return this.getMultiSelectFormControl(
312 'multi-lineOfBusiness',
313 'Select Line Of Business',
316 instance ? instance.lineOfBusiness : null,
318 'lineOfBusinessList');
321 private getMultiSelectFormControl(controlName: string, displayName: string, dataTestId: string, placeholder: string,
322 name: string, instance: any, defaultValue, isMultiSelected: boolean, catagoryParamResponseFieldName: string) {
323 return new MultiselectFormControl({
324 type: FormControlType.MULTI_SELECT,
328 selectedFieldName: 'name',
330 placeHolder: placeholder,
333 value: instance ? defaultValue : '',
334 limitSelection: isMultiSelected ? 1000 : 1,
335 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
336 onInitSelectedField: [catagoryParamResponseFieldName],
337 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters),
338 onChange: (param: MultiSelectItem[], form: FormGroup) => {
339 form.controls[controlName].setValue(param.map((multiSelectItem: MultiSelectItem) => {
340 return multiSelectItem.itemName
343 convertOriginalDataToArray: (value?: string) => {
344 if (_.isNil(value)) return [];
345 return value.split(',');