import { MatMenuTrigger } from '@angular/material/menu';
import { JsonPointer } from 'angular6-json-schema-form';
import * as uuid from 'uuid';
-import { PolicyInstance, PolicyType } from '../interfaces/policy.types';
+import { CreatePolicyInstance, PolicyInstance, PolicyTypeSchema } 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 { HttpErrorResponse } from '@angular/common/http';
+import { FormGroup, FormControl, Validators } from '@angular/forms';
+import { ChangeDetectorRef } from '@angular/core';
+import { Ric } from '../interfaces/ric';
@Component({
- selector: 'rd-policy-instance-dialog',
+ selector: 'nrcp-policy-instance-dialog',
templateUrl: './policy-instance-dialog.component.html',
styleUrls: ['./policy-instance-dialog.component.scss'],
animations: [
],
})
export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit {
+ instanceForm: FormGroup;
+
formActive = false;
isVisible = {
policyTypeName: string;
darkMode: boolean;
ric: string;
- allRics: string[];
+ allRics: Ric[];
private fetchRics() {
console.log('fetchRics ' + this.policyTypeName);
const self: PolicyInstanceDialogComponent = this;
this.dataService.getRics(this.policyTypeName).subscribe(
{
- next(value) {
+ next(value: Ric[]) {
self.allRics = value;
console.log(value);
},
- error(error) {
+ error(error: HttpErrorResponse) {
self.errorService.displayError('Fetching of rics failed: ' + error.message);
},
complete() { }
}
constructor(
+ private cdr: ChangeDetectorRef,
private dataService: PolicyService,
private errorService: ErrorDialogService,
private notificationService: NotificationService,
this.policyInstanceId = data.instanceId;
this.policyTypeName = data.name;
this.jsonSchemaObject = data.createSchema;
- this.jsonObject = this.parseJson(data.instanceJson);
+ this.jsonObject = data.instanceJson;
this.ric = data.ric;
}
this.ui.darkModeState.subscribe((isDark) => {
this.darkMode = isDark;
});
+ this.instanceForm = new FormGroup({
+ 'ricSelector': new FormControl(this.ric, [
+ Validators.required
+ ])
+ });
if (!this.policyInstanceId) {
this.fetchRics();
}
}
ngAfterViewInit() {
+ this.cdr.detectChanges();
}
+ get ricSelector() { return this.instanceForm.get('ricSelector'); }
+
onSubmit() {
if (this.policyInstanceId == null) {
this.policyInstanceId = uuid.v4();
}
const policyJson: string = this.prettyLiveFormData;
const self: PolicyInstanceDialogComponent = this;
- this.dataService.putPolicy(this.policyTypeName, this.policyInstanceId, policyJson, this.ric).subscribe(
+ let createPolicyInstance = this.createPolicyInstance(policyJson);
+ this.dataService.putPolicy(createPolicyInstance).subscribe(
{
- next(value) {
- self.notificationService.success('Policy ' + self.policyTypeName + ':' + self.policyInstanceId + ' submitted');
+ next(_) {
+ self.notificationService.success('Policy ' + self.policyTypeName + ':' + self.policyInstanceId +
+ ' submitted');
},
- error(error) {
- self.errorService.displayError('updatePolicy failed: ' + error.message);
+ error(error: HttpErrorResponse) {
+ self.errorService.displayError('Submit failed: ' + error.error);
},
complete() { }
});
}
+ private createPolicyInstance(policyJson: string) {
+ let createPolicyInstance = {} as CreatePolicyInstance;
+ createPolicyInstance.policy_data = JSON.parse(policyJson);
+ createPolicyInstance.policy_id = this.policyInstanceId;
+ createPolicyInstance.policytype_id = this.policyTypeName;
+ createPolicyInstance.ric_id = (!this.ricSelector.value.ric_id) ? this.ric : this.ricSelector.value.ric_id;
+ createPolicyInstance.service_id = 'controlpanel';
+ return createPolicyInstance;
+ }
+
onClose() {
this.dialogRef.close();
}
this.liveFormData = formData;
}
- get prettyLiveFormData() {
+ get prettyLiveFormData(): string {
return JSON.stringify(this.liveFormData, null, 2);
}
- get schemaAsString() {
+ get schemaAsString(): string {
return JSON.stringify(this.jsonSchemaObject, null, 2);
}
- get jsonAsString() {
+ get jsonAsString(): string {
return JSON.stringify(this.jsonObject, null, 2);
}
}
}
-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;
+export function getPolicyDialogProperties(policyTypeSchema: PolicyTypeSchema, instance: PolicyInstance, darkMode: boolean): MatDialogConfig {
+ const createSchema = policyTypeSchema.schemaObject;
+ const instanceId = instance ? instance.policy_id : null;
+ const instanceJson = instance ? instance.policy_data : null;
+ const name = policyTypeSchema.name;
+ const ric = instance ? instance.ric_id : null;
return {
maxWidth: '1200px',
maxHeight: '900px',