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;
240 getSDNCControl = (instance: any, checkedByDefault: boolean, extraContents? : object[]): FormControlModel => {
241 return new CheckboxFormControl({
242 controlName: SDN_C_PRE_LOAD,
243 displayName: 'SDN-C pre-load',
244 dataTestId: 'sdncPreLoad',
245 value: instance ? instance.sdncPreLoad : checkedByDefault,
246 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
251 getProductFamilyControl = (instance : any, controls : FormControlModel[], isMandatory?: boolean) : DropdownFormControl => {
252 return new DropdownFormControl({
253 type : FormControlType.DROPDOWN,
254 controlName : 'productFamilyId',
255 displayName : 'Product family',
256 dataTestId : 'productFamily',
257 placeHolder : 'Select Product Family',
259 name : "product-family-select",
260 value : instance ? instance.productFamilyId : null,
261 validations : _.isNil(isMandatory) || isMandatory === true ? [new ValidatorModel(ValidatorOptions.required, 'is required')]: [],
262 onInit : this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getProductFamilies),
266 getInstanceNameController(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, model: NodeModel): FormControlModel {
267 let validations: ValidatorModel[] = this._basicControlGenerator.createValidationsForInstanceName(instance, serviceId, isEcompGeneratedNaming);
268 return new InputFormControl({
269 controlName: 'instanceName',
270 displayName: 'Instance name',
271 dataTestId: 'instanceName',
272 placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided',
273 validations: validations,
275 value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName) && instance.instanceName !== ""))
276 ? this._basicControlGenerator.getDefaultInstanceName(instance, model) : null,
277 onKeypress : (event) => {
278 const pattern:RegExp = ControlGeneratorUtil.INSTANCE_NAME_REG_EX;
280 if(!pattern.test(event['key'])){
281 event.preventDefault();
289 getInstanceName(instance : any, serviceId : string, isEcompGeneratedNaming: boolean): FormControlModel {
290 let formControlModel:FormControlModel = this.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, new NodeModel());
291 formControlModel.value = instance ? instance.instanceName : null;
292 return formControlModel;
295 getPlatformMultiselectControl = (instance: any, controls: FormControlModel[], isMultiSelected: boolean) : MultiselectFormControl => {
296 return this.getMultiSelectFormControl(
299 'multi-selectPlatform',
303 instance ? instance.platformName : null,
309 getLobMultiselectControl = (instance: any, isMultiSelected: boolean) : MultiselectFormControl => {
310 return this.getMultiSelectFormControl(
313 'multi-lineOfBusiness',
314 'Select Line Of Business',
317 instance ? instance.lineOfBusiness : null,
319 'lineOfBusinessList');
322 private getMultiSelectFormControl(controlName: string, displayName: string, dataTestId: string, placeholder: string,
323 name: string, instance: any, defaultValue, isMultiSelected: boolean, catagoryParamResponseFieldName: string) {
324 return new MultiselectFormControl({
325 type: FormControlType.MULTI_SELECT,
329 selectedFieldName: 'name',
331 placeHolder: placeholder,
334 value: instance ? defaultValue : '',
335 limitSelection: isMultiSelected ? 1000 : 1,
336 validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
337 onInitSelectedField: [catagoryParamResponseFieldName],
338 onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters),
339 onChange: (param: MultiSelectItem[], form: FormGroup) => {
340 form.controls[controlName].setValue(param.map((multiSelectItem: MultiSelectItem) => {
341 return multiSelectItem.itemName
344 convertOriginalDataToArray: (value?: string) => {
345 if (_.isNil(value)) return [];
346 return value.split(',');