Add A1 Policy Instance logic from backend
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / policy-control / policy-instance.datasource.ts
index 9cf1d72..5002522 100644 (file)
@@ -26,13 +26,14 @@ import { BehaviorSubject } from 'rxjs/BehaviorSubject';
 import { merge } from 'rxjs';
 import { of } from 'rxjs/observable/of';
 import { catchError, finalize, map } from 'rxjs/operators';
-import { PolicyInstance } from '../interfaces/policy.types';
+import { PolicyInstance, PolicyTypeSchema } from '../interfaces/policy.types';
 import { PolicyService } from '../services/policy/policy.service';
 import { NotificationService } from '../services/ui/notification.service';
-import { PolicyType } from '../interfaces/policy.types';
 
 export class PolicyInstanceDataSource extends DataSource<PolicyInstance> {
 
+    policyInstances: PolicyInstance[] = [];
+
     private policyInstanceSubject = new BehaviorSubject<PolicyInstance[]>([]);
 
     private loadingSubject = new BehaviorSubject<boolean>(false);
@@ -45,24 +46,26 @@ export class PolicyInstanceDataSource extends DataSource<PolicyInstance> {
         private policySvc: PolicyService,
         public sort: MatSort,
         private notificationService: NotificationService,
-        private policyType: PolicyType) {
+        private policyTypeSchema: PolicyTypeSchema) {
         super();
     }
 
-    loadTable() {
-        this.loadingSubject.next(true);
-        this.policySvc.getPolicyInstances(this.policyType.name)
-            .pipe(
-                catchError((her: HttpErrorResponse) => {
-                    this.notificationService.error('Failed to get policy instances: ' + her.error);
-                    return of([]);
-                }),
-                finalize(() => this.loadingSubject.next(false))
-            )
-            .subscribe((instances: PolicyInstance[]) => {
-                this.rowCount = instances.length;
-                this.policyInstanceSubject.next(instances);
-            });
+    public getPolicyInstances() {
+        this.policyInstances = [] as PolicyInstance[];
+        this.policySvc.getPolicyInstancesByType(this.policyTypeSchema.id).subscribe(policies => {
+            if (policies.policy_ids.length != 0) {
+                policies.policy_ids.forEach(policyId => {
+                    var policyInstance = {} as PolicyInstance
+                    this.policySvc.getPolicyInstance(policyId).subscribe(policyInstance => {
+                        this.policySvc.getPolicyStatus(policyId).subscribe(policyStatus => {
+                            policyInstance.lastModified = policyStatus.last_modified;
+                        })
+                        this.policyInstances.push(policyInstance);
+                    })
+                    this.policyInstanceSubject.next(this.policyInstances);
+                })
+            }
+        })
     }
 
     connect(): Observable<PolicyInstance[]> {
@@ -88,9 +91,9 @@ export class PolicyInstanceDataSource extends DataSource<PolicyInstance> {
         return data.sort((a, b) => {
             const isAsc = this.sort.direction === 'asc';
             switch (this.sort.active) {
-                case 'instanceId': return compare(a.id, b.id, isAsc);
-                case 'ric': return compare(a.ric, b.ric, isAsc);
-                case 'service': return compare(a.service, b.service, isAsc);
+                case 'instanceId': return compare(a.policy_id, b.policy_id, isAsc);
+                case 'ric': return compare(a.ric_id, b.ric_id, isAsc);
+                case 'service': return compare(a.service_id, b.service_id, isAsc);
                 case 'lastModified': return compare(a.lastModified, b.lastModified, isAsc);
                 default: return 0;
             }