aboutsummaryrefslogtreecommitdiffstats
path: root/vid-webpack-master/src
diff options
context:
space:
mode:
authorAmichai Hemli <amichai.hemli@intl.att.com>2020-02-23 19:28:09 +0000
committerGerrit Code Review <gerrit@onap.org>2020-02-23 19:28:09 +0000
commitb1fa496ef661ff3ed0a883f4979355a85f0c7906 (patch)
treeab10d566c38bceb51a0deef4342762977529e664 /vid-webpack-master/src
parent23716ef5c8d80455399fb9239449e09e34d609f3 (diff)
parente2a7abb45b953d405fc5aa1917f74e2da9f188c0 (diff)
Merge "VNF's LCP regions found by Line-of-business (and owning-entity)"
Diffstat (limited to 'vid-webpack-master/src')
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts135
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts10
-rw-r--r--vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts34
-rw-r--r--vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts48
-rw-r--r--vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts2
5 files changed, 200 insertions, 29 deletions
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts
index 83f722704..4b567328d 100644
--- a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/sharedControlles/shared.controllers.service.ts
@@ -16,6 +16,8 @@ import {Constants} from "../../../../utils/constants";
import {CheckboxFormControl} from "../../../../models/formControlModels/checkboxFormControl.model";
import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
import {NodeModel} from "../../../../models/nodeModel";
+import {LcpRegion} from "../../../../models/lcpRegion";
+import {Tenant} from "../../../../models/tenant";
@Injectable()
export class SharedControllersService {
@@ -25,6 +27,26 @@ export class SharedControllersService {
getLineOfBusinessControl = (instance?: any): DropdownFormControl => {
+ return this.getLineOfBusinessControlInternal(undefined, instance);
+ };
+
+ getLineOfBusinessByOwningEntityControl = (instance?: any, serviceId?: string, controls?: FormControlModel[]): DropdownFormControl => {
+ const service = this._store.getState().service.serviceInstance[serviceId];
+ const owningEntityName: string = service.owningEntityName;
+
+ const changeLcpRegionOptionsOnChange = (lineOfBusinessNameParam: string, form: FormGroup) => {
+ form.controls['lcpCloudRegionId'].enable();
+ form.controls['lcpCloudRegionId'].reset();
+ this._basicControlGenerator.getSubscribeInitResult(
+ this._aaiService.getLcpRegionsByOwningEntityAndLineOfBusiness.bind(this, owningEntityName, lineOfBusinessNameParam),
+ controls.find(item => item.controlName === 'lcpCloudRegionId') as DropdownFormControl, form
+ ).subscribe()
+ };
+
+ return this.getLineOfBusinessControlInternal(changeLcpRegionOptionsOnChange, instance);
+ };
+
+ private getLineOfBusinessControlInternal = (onChange: Function, instance?: any): DropdownFormControl => {
return new DropdownFormControl({
type: FormControlType.DROPDOWN,
controlName: 'lineOfBusiness',
@@ -36,6 +58,7 @@ export class SharedControllersService {
value: instance ? instance.lineOfBusiness : null,
validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
onInitSelectedField: ['lineOfBusinessList'],
+ onChange,
onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
})
};
@@ -44,6 +67,20 @@ export class SharedControllersService {
const service = this._store.getState().service.serviceInstance[serviceId];
const globalCustomerId: string = service.globalSubscriberId;
const serviceType: string = service.subscriptionServiceType;
+
+ const onInit = instance
+ ? this._basicControlGenerator.getSubscribeInitResult.bind(
+ this._aaiService,
+ this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType))
+ : () => {};
+ return this.getTenantControlInternal(onInit, instance);
+ };
+
+ getTenantByLcpRegionControl = (serviceId: string, instance?: any): DropdownFormControl => {
+ return this.getTenantControlInternal(() => {}, instance);
+ };
+
+ private getTenantControlInternal = (onInit: Function, instance?: any): DropdownFormControl => {
return new DropdownFormControl({
type: FormControlType.DROPDOWN,
controlName: 'tenantId',
@@ -55,10 +92,7 @@ export class SharedControllersService {
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)) : () => {
- }
+ onInit,
})
};
@@ -93,6 +127,70 @@ export class SharedControllersService {
const service = this._store.getState().service.serviceInstance[serviceId];
const globalCustomerId: string = service.globalSubscriberId;
const serviceType: string = service.subscriptionServiceType;
+
+ const onInit = this._basicControlGenerator.getSubscribeInitResult.bind(
+ this._aaiService,
+ this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)
+ );
+
+ const changeTenantsOptionsByServiceTypeOnChange = (
+ (globalCustomerId, serviceType, lcpCloudRegionIdParam) => {
+ if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
+ this._basicControlGenerator.getSubscribeResult.bind(this,
+ this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType)
+ .subscribe(res => this.setTenantsOptions(controls, res.lcpRegionsTenantsMap[lcpCloudRegionIdParam])));
+ }
+
+ }
+ ).bind(this, globalCustomerId, serviceType);
+
+ return this.getLcpRegionControlInternal(instance, controls,
+ false, onInit, ['lcpRegionList'], changeTenantsOptionsByServiceTypeOnChange)
+ };
+
+ getLcpRegionByLineOfBusinessControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
+ const service = this._store.getState().service.serviceInstance[serviceId];
+ const owningEntityName: string = service.owningEntityName;
+
+ const changeTenantsOptions = (controls: FormControlModel[], cloudRegionId, lcpRegionList: LcpRegion[]) => {
+ const lcpRegionOption = (_.isNil(lcpRegionList) || _.isNil(cloudRegionId))
+ ? null : lcpRegionList.find(({id}) => id === cloudRegionId);
+
+ if (!_.isNil(lcpRegionOption)) {
+ this._aaiService.getTenantsByCloudOwnerAndCloudRegionId(lcpRegionOption.cloudOwner, lcpRegionOption.id)
+ .subscribe(res => this.setTenantsOptions(controls, res));
+ }
+ };
+
+ const lcpRegionOptionsList = (controls: FormControlModel[]): LcpRegion[] => {
+ const lcpCloudRegionIdControl = _.isNil(controls)
+ ? null : controls.find(({controlName}) => controlName === 'lcpCloudRegionId');
+
+ return _.isNil(lcpCloudRegionIdControl) ? null : lcpCloudRegionIdControl['options$'];
+ };
+
+ const loadLcpRegionOptionsOnInit = (_.isNil(instance) || _.isNil(instance.lineOfBusiness))
+ ? () => {}
+ : this._basicControlGenerator.getSubscribeInitResult.bind(
+ this, () => {
+ return this._aaiService.getLcpRegionsByOwningEntityAndLineOfBusiness(owningEntityName, instance.lineOfBusiness)
+ .do(res => changeTenantsOptions(controls, instance.lcpCloudRegionId, res));
+ }
+ );
+
+ const changeTenantsOptionsByCloudRegionIdOnChange = (
+ (controls, lcpCloudRegionIdParam) => changeTenantsOptions(controls, lcpCloudRegionIdParam, lcpRegionOptionsList(controls))
+ ).bind(this, controls);
+
+ return this.getLcpRegionControlInternal(instance, controls,
+ _.isNil(instance) || _.isNil(instance.lineOfBusiness),
+ loadLcpRegionOptionsOnInit, null, changeTenantsOptionsByCloudRegionIdOnChange
+ )
+ };
+
+ private getLcpRegionControlInternal = (instance: any, controls: FormControlModel[], isDisabled: boolean,
+ onInit: Function, onInitSelectedField: string[], changeTenantsOptionsOnChange: Function
+ ): DropdownFormControl => {
return new DropdownFormControl({
type: FormControlType.DROPDOWN,
controlName: 'lcpCloudRegionId',
@@ -100,26 +198,19 @@ export class SharedControllersService {
dataTestId: 'lcpRegion',
placeHolder: 'Select LCP Region',
name: "lcpRegion",
- isDisabled: false,
+ isDisabled,
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) => {
+ onInitSelectedField,
+ onInit,
+
+ onChange: (lcpCloudRegionIdParam: string, form: FormGroup) => {
form.controls['tenantId'].enable();
form.controls['tenantId'].reset();
- if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
- this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => {
- controls.find(item => item.controlName === 'tenantId')['options$'] = res.lcpRegionsTenantsMap[param];
- if (res.lcpRegionsTenantsMap[param]) {
- controls.find(item => item.controlName === 'tenantId')['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0;
- }
- }));
- }
- if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) {
+ changeTenantsOptionsOnChange(lcpCloudRegionIdParam);
+
+ if (Constants.LegacyRegion.MEGA_REGION.indexOf(lcpCloudRegionIdParam) !== -1) {
form.controls['legacyRegion'].enable();
controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
@@ -133,6 +224,12 @@ export class SharedControllersService {
})
};
+ private setTenantsOptions = (controls: FormControlModel[], tenants: Tenant[]) => {
+ const tenantsControl = controls.find(item => item.controlName === 'tenantId');
+ tenantsControl['options$'] = tenants;
+ tenantsControl['hasEmptyOptions'] = tenants && tenants.length === 0;
+ };
+
getSDNCControl = (instance: any, extraContents? : object[]): FormControlModel => {
return new CheckboxFormControl({
controlName: SDN_C_PRE_LOAD,
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts
index 4572fa443..c7d623671 100644
--- a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts
@@ -6,7 +6,11 @@ import {ControlGeneratorUtil} from "../control.generator.util.service";
import {AaiService} from "../../../../services/aaiService/aai.service";
import {GenericFormService} from "../../generic-form.service";
import {FormBuilder} from "@angular/forms";
-import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../../../models/formControlModels/formControl.model";
+import {
+ FormControlModel,
+ ValidatorModel,
+ ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
import {LogService} from "../../../../utils/log/log.service";
import {VnfControlGenerator} from "./vnf.control.generator";
import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
@@ -904,7 +908,9 @@ class MockAppStore<T> {
}
}
-class MockFeatureFlagsService {}
+class MockFeatureFlagsService {
+ getFlagState = () => false;
+}
describe('VNF Control Generator', () => {
let injector;
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts
index 169780b29..ef58bc761 100644
--- a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts
@@ -4,7 +4,11 @@ import {AaiService} from "../../../../services/aaiService/aai.service";
import {NgRedux} from "@angular-redux/store";
import {HttpClient} from "@angular/common/http";
import {ControlGeneratorUtil} from "../control.generator.util.service";
-import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../../../models/formControlModels/formControl.model";
+import {
+ FormControlModel,
+ ValidatorModel,
+ ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
import {LogService} from "../../../../utils/log/log.service";
import {VNFModel} from "../../../../models/vnfModel";
import {AppState} from "../../../../store/reducers";
@@ -14,6 +18,7 @@ import * as _ from 'lodash';
import {MultiselectFormControl} from "../../../../models/formControlModels/multiselectFormControl.model";
import {MultiSelectItem} from "../../../formControls/component/multiselect/multiselect.model";
import {SharedControllersService} from "../sharedControlles/shared.controllers.service";
+import {FeatureFlagsService, Features} from "../../../../services/featureFlag/feature-flags.service";
@Injectable()
export class VnfControlGenerator {
@@ -21,6 +26,7 @@ export class VnfControlGenerator {
constructor(private genericFormService: GenericFormService,
private _basicControlGenerator: ControlGeneratorUtil,
private _sharedControllersService : SharedControllersService,
+ private _featureFlagsService: FeatureFlagsService,
private store: NgRedux<AppState>,
private http: HttpClient,
private _aaiService: AaiService,
@@ -72,14 +78,28 @@ export class VnfControlGenerator {
const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]);
if (!_.isNil(vnfModel)) {
- const flags = this.store.getState().global.flags;
+ const isMultiSelected =
+ this._featureFlagsService.getFlagState(Features.FLAG_2002_VNF_PLATFORM_MULTI_SELECT);
+ const lcpRegionsByLineOFBusiness =
+ this._featureFlagsService.getFlagState(Features.FLAG_2006_LCP_REGIONS_BY_LINE_OF_BUSINESS);
+
result.push(this.getInstanceName(vnfInstance, serviceId, vnfName, vnfModel.isEcompGeneratedNaming));
result.push(this._sharedControllersService.getProductFamilyControl(vnfInstance, result, true));
- result.push(this._sharedControllersService.getLcpRegionControl(serviceId, vnfInstance, result));
- result.push(this._sharedControllersService.getLegacyRegion(vnfInstance));
- result.push(this._sharedControllersService.getTenantControl(serviceId, vnfInstance));
- result.push(this.getPlatformMultiselectControl(vnfInstance, result, flags['FLAG_2002_VNF_PLATFORM_MULTI_SELECT']));
- result.push(this._sharedControllersService.getLineOfBusinessControl(vnfInstance));
+
+ if (lcpRegionsByLineOFBusiness) {
+ result.push(this._sharedControllersService.getLineOfBusinessByOwningEntityControl(vnfInstance, serviceId, result));
+ result.push(this._sharedControllersService.getLcpRegionByLineOfBusinessControl(serviceId, vnfInstance, result));
+ result.push(this._sharedControllersService.getLegacyRegion(vnfInstance));
+ result.push(this._sharedControllersService.getTenantByLcpRegionControl(serviceId, vnfInstance));
+ result.push(this.getPlatformMultiselectControl(vnfInstance, result, isMultiSelected));
+ } else {
+ result.push(this._sharedControllersService.getLcpRegionControl(serviceId, vnfInstance, result));
+ result.push(this._sharedControllersService.getLegacyRegion(vnfInstance));
+ result.push(this._sharedControllersService.getTenantControl(serviceId, vnfInstance));
+ result.push(this.getPlatformMultiselectControl(vnfInstance, result, isMultiSelected));
+ result.push(this._sharedControllersService.getLineOfBusinessControl(vnfInstance));
+ }
+
result.push(this._sharedControllersService.getRollbackOnFailureControl(vnfInstance));
}
return result;
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
index 9026a5648..603ba814d 100644
--- a/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
@@ -29,7 +29,14 @@ import {VnfInstance} from "../../models/vnfInstance";
import {VfModuleInstance} from "../../models/vfModuleInstance";
import {ServiceInstance} from "../../models/serviceInstance";
import {VfModuleMap} from "../../models/vfModulesMap";
-import {updateAicZones, updateCategoryParameters, updateLcpRegionsAndTenants, updateServiceTypes, updateSubscribers, updateUserId} from "../../storeUtil/utils/general/general.actions";
+import {
+ updateAicZones,
+ updateCategoryParameters,
+ updateLcpRegionsAndTenants,
+ updateServiceTypes,
+ updateSubscribers,
+ updateUserId
+} from "../../storeUtil/utils/general/general.actions";
import {createServiceInstance, updateModel,} from "../../storeUtil/utils/service/service.actions";
import {FeatureFlagsService, Features} from "../featureFlag/feature-flags.service";
import {VnfMember} from "../../models/VnfMember";
@@ -221,6 +228,45 @@ export class AaiService {
cloudRegionId+AaiService.formatCloudOwnerTrailer(cloudOwner) : cloudRegionId;
};
+
+
+
+
+ getLcpRegionsByOwningEntityAndLineOfBusiness = (owningEntityName, lineOfBusinessName): Observable<LcpRegion[]> => {
+ // let pathQuery: string = Constants.Path.AAI_GET_LCP_REGIONS_BY____
+ // + "?"
+ // + "owningEntityName=" + owningEntityName
+ // + "lineOfBusinessName=" + lineOfBusinessName;
+
+ return of([
+ new LcpRegion("foo-id", "foo-name", true, "foo-cloud-owner"),
+ new LcpRegion("foo2-id", "foo2-name", true, "foo2-cloud-owner"),
+ ]);
+ };
+
+
+ getTenantsByCloudOwnerAndCloudRegionId = (cloudOwner, cloudRegionId): Observable<Tenant[]> => {
+ // let pathQuery: string = Constants.Path.AAI_GET_TENANTS_BY____
+ // + "?"
+ // + "cloudOwner=" + cloudOwner
+ // + "&cloudRegionId=" + cloudRegionId;
+
+ return of([
+ new Tenant({
+ tenantID: "tenantID", tenantName: "tenantName",
+ cloudOwner: "cloudOwner", ['is-permitted']: true,
+ }),
+ new Tenant({
+ tenantID: "tenant2ID", tenantName: "tenant2Name",
+ cloudOwner: "cloudOwner", ['is-permitted']: true,
+ }),
+ ])
+ };
+
+
+
+
+
public static formatCloudOwnerTrailer(cloudOwner: string):string {
return " ("+ cloudOwner.trim().toLowerCase().replace(/^[^-]*-/, "").toUpperCase() + ")";
}
diff --git a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
index 5842662fb..2c30d9385 100644
--- a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
+++ b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
@@ -13,12 +13,14 @@ export enum Features {
FLAG_FLASH_REPLACE_VF_MODULE ='FLAG_FLASH_REPLACE_VF_MODULE',
FLAG_FLASH_MORE_ACTIONS_BUTTON_IN_OLD_VIEW_EDIT ='FLAG_FLASH_MORE_ACTIONS_BUTTON_IN_OLD_VIEW_EDIT',
FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS ='FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS',
+ FLAG_2002_VNF_PLATFORM_MULTI_SELECT= 'FLAG_2002_VNF_PLATFORM_MULTI_SELECT',
FLAG_2004_INSTANTIATION_STATUS_FILTER ='FLAG_2004_INSTANTIATION_STATUS_FILTER',
FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE = 'FLAG_2004_CREATE_ANOTHER_INSTANCE_FROM_TEMPLATE',
FLAG_2006_VFM_SDNC_PRELOAD_FILES = 'FLAG_2006_VFM_SDNC_PRELOAD_FILES',
FLAG_MORE_AUDIT_INFO_LINK_ON_AUDIT_INFO = 'FLAG_MORE_AUDIT_INFO_LINK_ON_AUDIT_INFO',
FLAG_2004_INSTANTIATION_TEMPLATES_POPUP = 'FLAG_2004_INSTANTIATION_TEMPLATES_POPUP',
FLAG_2006_USER_PERMISSIONS_BY_OWNING_ENTITY= 'FLAG_2006_USER_PERMISSIONS_BY_OWNING_ENTITY',
+ FLAG_2006_LCP_REGIONS_BY_LINE_OF_BUSINESS = 'FLAG_2006_LCP_REGIONS_BY_LINE_OF_BUSINESS',
FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF = 'FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF',
}