Fix Bug 2292: Invalid Member VNF index in Manual Scaling after NS Update remove operation
[osm/NG-UI.git] / src / app / utilities / scaling / ScalingComponent.ts
index ff5ec06..be15660 100644 (file)
@@ -27,11 +27,10 @@ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { TranslateService } from '@ngx-translate/core';
 import { APIURLHEADER, ERRORDATA, MODALCLOSERESPONSEDATA, URLPARAMS } from 'CommonModel';
 import { environment } from 'environment';
-import { DF as NSDF, VNFPROFILE } from 'NSDModel';
 import { RestService } from 'RestService';
 import { SharedService } from 'SharedService';
 import { DF, SCALING, VNFD } from 'VNFDModel';
-
+import { InstanceData, VNFInstanceDetails } from 'VNFInstanceModel';
 /**
  * Creating component
  * @Component takes ScalingComponent.html as template url
@@ -53,7 +52,9 @@ export class ScalingComponent implements OnInit {
     /** Contains the scaling group descriptor names @public */
     public scalingGroup: {}[];
     /** Member index of the NS @public */
-    public memberVNFIndex: {}[];
+    public memberVNFIndex: {}[] = [];
+    /** Items for the memberVNFIndex @public */
+    public memberTypes: {}[];
     /** handles the selected VNFID @public */
     public selectedVNFID: string = '';
     /** Items for the Scale Types @public */
@@ -62,6 +63,8 @@ export class ScalingComponent implements OnInit {
     public scalingForm: FormGroup;
     /** Form valid on submit trigger @public */
     public submitted: boolean = false;
+    /** Array holds VNFR Data filtered with nsr ID @private */
+    private nsIdFilteredData: {}[] = [];
     /** FormBuilder instance added to the formBuilder @private */
     private formBuilder: FormBuilder;
     /** Instance of the rest service @private */
@@ -118,19 +121,45 @@ export class ScalingComponent implements OnInit {
 
     /** Get the member-vnf-index from NS Package -> vnf-profile @public */
     public getmemberIndex(): void {
-        if (this.params.nsd.df.length > 0) {
-            const getconstituentVNFD: {}[] = [];
-            this.params.nsd.df.forEach((data: NSDF): void => {
-                data['vnf-profile'].forEach((vnfProfile: VNFPROFILE): void => {
-                    const assignMemberIndex: {} = {
-                        id: vnfProfile.id,
-                        name: vnfProfile['vnfd-id']
-                    };
-                    getconstituentVNFD.push(assignMemberIndex);
-                });
+        this.isLoadingResults = true;
+        const vnfInstanceData: {}[] = [];
+        this.restService.getResource(environment.VNFINSTANCES_URL).subscribe((vnfInstancesData: VNFInstanceDetails[]): void => {
+            vnfInstancesData.forEach((vnfData: VNFInstanceDetails): void => {
+                const vnfdRef: string = 'vnfd-ref';
+                const memberIndex: string = 'member-vnf-index-ref';
+                const nsrId: string = 'nsr-id-ref';
+                const vnfId: string = 'vnfd-id';
+                const vnfDataObj: {} =
+                {
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFD: vnfData[vnfdRef],
+                    VNFInstanceId: vnfData._id,
+                    // eslint-disable-next-line security/detect-object-injection
+                    MemberIndex: vnfData[memberIndex],
+                    // eslint-disable-next-line security/detect-object-injection
+                    NS: vnfData[nsrId],
+                    // eslint-disable-next-line security/detect-object-injection
+                    VNFID: vnfData[vnfId]
+                };
+                vnfInstanceData.push(vnfDataObj);
             });
-            this.memberVNFIndex = getconstituentVNFD;
-        }
+            const nsId: string = 'NS';
+            // eslint-disable-next-line security/detect-object-injection
+            this.nsIdFilteredData = vnfInstanceData.filter((vnfdData: {}[]): boolean => vnfdData[nsId] === this.params.id);
+            this.nsIdFilteredData.forEach((resVNF: InstanceData): void => {
+                const assignMemberIndex: {} = {
+                    id: resVNF.MemberIndex,
+                    vnfinstanceId: resVNF.VNFInstanceId,
+                    vnfdRef: resVNF.VNFD
+                };
+                this.memberVNFIndex.push(assignMemberIndex);
+            });
+            this.memberTypes = this.memberVNFIndex;
+            this.isLoadingResults = false;
+        }, (error: ERRORDATA): void => {
+            this.restService.handleError(error, 'get');
+            this.isLoadingResults = false;
+        });
     }
 
     /** Get the scaling-group-descriptor name @public */