Renamed things to fit with namechange of RicSynchronizationTask
[nonrtric.git] / dashboard / webapp-frontend / src / app / policy-control / policy-instance-dialog.component.ts
index 0f483d4..b4ad194 100644 (file)
  * limitations under the License.
  * ========================LICENSE_END===================================
  */
-import { Component, OnInit, ViewChild, Inject, AfterViewInit, Self } from '@angular/core';
+import { animate, state, style, transition, trigger } from '@angular/animations';
+import { AfterViewInit, Component, Inject, OnInit, ViewChild } from '@angular/core';
+import { MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
 import { MatMenuTrigger } from '@angular/material/menu';
-import { MatDialog, MatDialogConfig } from '@angular/material/dialog';
-import { trigger, state, style, animate, transition } from '@angular/animations';
-import * as uuid from 'uuid';
-
 import { JsonPointer } from 'angular6-json-schema-form';
+import * as uuid from 'uuid';
+import { PolicyInstance, PolicyType } from '../interfaces/policy.types';
 import { PolicyService } from '../services/policy/policy.service';
 import { ErrorDialogService } from '../services/ui/error-dialog.service';
 import { NotificationService } from './../services/ui/notification.service';
+import { UiService } from '../services/ui/ui.service';
 
-import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
-import { PolicyType } from '../interfaces/policy.types';
-import { PolicyInstance } from '../interfaces/policy.types';
 
 @Component({
     selector: 'rd-policy-instance-dialog',
@@ -76,29 +74,54 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit {
     formValidationErrors: any;
     formIsValid = false;
 
-
     @ViewChild(MatMenuTrigger, { static: true }) menuTrigger: MatMenuTrigger;
 
-    public policyInstanceId: string;
-    public policyTypeName: string;
-    private policyTypeId: number;
+    policyInstanceId: string; // null if not yet created
+    policyTypeName: string;
+    darkMode: boolean;
+    ric: string;
+    allRics: string[];
+
+    private fetchRics() {
+        console.log('fetchRics ' + this.policyTypeName);
+        const self: PolicyInstanceDialogComponent = this;
+        this.dataService.getRics(this.policyTypeName).subscribe(
+            {
+                next(value) {
+                    self.allRics = value;
+                    console.log(value);
+                },
+                error(error) {
+                    self.errorService.displayError('Fetching of rics failed: ' + error.message);
+                },
+                complete() { }
+            });
+    }
 
     constructor(
         private dataService: PolicyService,
         private errorService: ErrorDialogService,
         private notificationService: NotificationService,
         @Inject(MAT_DIALOG_DATA) private data,
-        private dialogRef: MatDialogRef<PolicyInstanceDialogComponent>) {
+        private dialogRef: MatDialogRef<PolicyInstanceDialogComponent>,
+        private ui: UiService) {
         this.formActive = false;
-        this.policyInstanceId = this.data.instanceId;
-        this.policyTypeName = this.data.name;
-        this.policyTypeId = this.data.policyTypeId;
-        this.parseJson(data.createSchema, data.instanceJson);
+        this.policyInstanceId = data.instanceId;
+        this.policyTypeName = data.name;
+        this.jsonSchemaObject = data.createSchema;
+        this.jsonObject = this.parseJson(data.instanceJson);
+        this.ric = data.ric;
     }
 
     ngOnInit() {
         this.jsonFormStatusMessage = 'Init';
         this.formActive = true;
+        this.ui.darkModeState.subscribe((isDark) => {
+            this.darkMode = isDark;
+        });
+        if (!this.policyInstanceId) {
+            this.fetchRics();
+        }
     }
 
     ngAfterViewInit() {
@@ -110,7 +133,7 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit {
         }
         const policyJson: string = this.prettyLiveFormData;
         const self: PolicyInstanceDialogComponent = this;
-        this.dataService.putPolicy(this.policyTypeId, this.policyInstanceId, policyJson).subscribe(
+        this.dataService.putPolicy(this.policyTypeName, this.policyInstanceId, policyJson, this.ric).subscribe(
             {
                 next(value) {
                     self.notificationService.success('Policy ' + self.policyTypeName + ':' + self.policyInstanceId + ' submitted');
@@ -126,8 +149,8 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit {
         this.dialogRef.close();
     }
 
-    public onChanges(data: any) {
-        this.liveFormData = data;
+    public onChanges(formData: any) {
+        this.liveFormData = formData;
     }
 
     get prettyLiveFormData() {
@@ -146,8 +169,8 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit {
         this.formIsValid = isValid;
     }
 
-    validationErrors(data: any): void {
-        this.formValidationErrors = data;
+    validationErrors(validationErrors: any): void {
+        this.formValidationErrors = validationErrors;
     }
 
     get prettyValidationErrors() {
@@ -170,18 +193,17 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit {
         return errorArray.join('<br>');
     }
 
-    private parseJson(createSchema: string, instanceJson: string): void {
+    private parseJson(str: string): string {
         try {
-            this.jsonSchemaObject = JSON.parse(createSchema);
-            if (this.data.instanceJson != null) {
-                this.jsonObject = JSON.parse(instanceJson);
+            if (str != null) {
+                return JSON.parse(str);
             }
         } catch (jsonError) {
             this.jsonFormStatusMessage =
                 'Invalid JSON\n' +
                 'parser returned:\n\n' + jsonError;
-            return;
         }
+        return null;
     }
 
     public toggleVisible(item: string) {
@@ -189,25 +211,25 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit {
     }
 }
 
-export function getPolicyDialogProperties(policyType: PolicyType, instance: PolicyInstance): MatDialogConfig {
-    const policyTypeId = policyType.policy_type_id;
-    const createSchema = policyType.create_schema;
-    const instanceId = instance ? instance.instanceId : null;
-    const instanceJson = instance ? instance.instance : null;
+export function getPolicyDialogProperties(policyType: PolicyType, instance: PolicyInstance, darkMode: boolean): MatDialogConfig {
+    const createSchema = policyType.schemaObject;
+    const instanceId = instance ? instance.id : null;
+    const instanceJson = instance ? instance.json : null;
     const name = policyType.name;
-
+    const ric = instance ? instance.ric : null;
     return {
         maxWidth: '1200px',
-        height: '1200px',
+        maxHeight: '900px',
         width: '900px',
         role: 'dialog',
         disableClose: false,
+        panelClass: darkMode ? 'dark-theme' : '',
         data: {
-            policyTypeId,
             createSchema,
             instanceId,
             instanceJson,
-            name
+            name,
+            ric
         }
     };
 }