From 5372422520d7cfb5760a536cce0da7b15f012eda Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Tue, 5 May 2020 08:55:21 +0200 Subject: [PATCH] Added support for showing typeless Policies Policy types that has no json schema will be possible to view and to delete. But not posible to create or to modify. Change-Id: I0250dce8357b765f8c9c27963eddd3e9c466c1ef Issue-ID: NONRTRIC-210 Signed-off-by: PatrikBuhr --- .../controlpanel/controller/PolicyController.java | 30 ++++++++++++---------- .../policyagentapi/PolicyAgentApiImpl.java | 14 +++++----- .../policy-control/policy-control.component.html | 5 ++-- .../app/policy-control/policy-control.component.ts | 12 ++++++--- .../policy-instance-dialog.component.html | 2 +- .../policy-instance-dialog.component.ts | 18 ++++++++++--- .../src/app/services/policy/policy.service.ts | 8 +++--- 7 files changed, 54 insertions(+), 35 deletions(-) diff --git a/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/PolicyController.java b/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/PolicyController.java index 538030c..03d9d83 100644 --- a/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/PolicyController.java +++ b/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/PolicyController.java @@ -63,7 +63,7 @@ public class PolicyController { // Endpoints public static final String VERSION_METHOD = ControlPanelConstants.VERSION_METHOD; public static final String POLICY_TYPES_METHOD = "policytypes"; - public static final String POLICY_TYPE_ID_NAME = "policy_type_id"; + public static final String POLICY_TYPE_PARAM = "type"; public static final String POLICIES_NAME = "policies"; public static final String POLICY_INSTANCE_ID_NAME = "policy_instance_id"; @@ -89,40 +89,42 @@ public class PolicyController { } @ApiOperation(value = "Returns the policy instances for the given policy type.") - @GetMapping(POLICY_TYPES_METHOD + "/{" + POLICY_TYPE_ID_NAME + "}/" + POLICIES_NAME) + @GetMapping(POLICIES_NAME) @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) - public ResponseEntity getPolicyInstances(@PathVariable(POLICY_TYPE_ID_NAME) String policyTypeIdString) { + public ResponseEntity getPolicyInstances( + @RequestParam(name = "type", required = true) String policyTypeIdString) { logger.debug("getPolicyInstances {}", policyTypeIdString); return this.policyAgentApi.getPolicyInstancesForType(policyTypeIdString); } @ApiOperation(value = "Returns a policy instance of a type") - @GetMapping(POLICY_TYPES_METHOD + "/{" + POLICY_TYPE_ID_NAME + "}/" + POLICIES_NAME + "/{" + POLICY_INSTANCE_ID_NAME - + "}") + @GetMapping(POLICIES_NAME + "/{" + POLICY_INSTANCE_ID_NAME + "}") @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) - public ResponseEntity getPolicyInstance(@PathVariable(POLICY_TYPE_ID_NAME) String policyTypeIdString, + public ResponseEntity getPolicyInstance( + @RequestParam(name = "type", required = true) String policyTypeIdString, @PathVariable(POLICY_INSTANCE_ID_NAME) String policyInstanceId) { logger.debug("getPolicyInstance {}:{}", policyTypeIdString, policyInstanceId); return this.policyAgentApi.getPolicyInstance(policyInstanceId); } @ApiOperation(value = "Creates the policy instances for the given policy type.") - @PutMapping(POLICY_TYPES_METHOD + "/{" + POLICY_TYPE_ID_NAME + "}/" + POLICIES_NAME + "/{" + POLICY_INSTANCE_ID_NAME - + "}") + @PutMapping(POLICIES_NAME + "/{" + POLICY_INSTANCE_ID_NAME + "}") @Secured({ControlPanelConstants.ROLE_ADMIN}) - public ResponseEntity putPolicyInstance(@PathVariable(POLICY_TYPE_ID_NAME) String policyTypeIdString, - @RequestParam(name = "ric", required = true) String ric, - @PathVariable(POLICY_INSTANCE_ID_NAME) String policyInstanceId, @RequestBody String instance) { + public ResponseEntity putPolicyInstance( // + @RequestParam(POLICY_TYPE_PARAM) String policyTypeIdString, // + @RequestParam(name = "ric", required = true) String ric, // + @PathVariable(POLICY_INSTANCE_ID_NAME) String policyInstanceId, // + @RequestBody String instance) { logger.debug("putPolicyInstance ric: {}, typeId: {}, instanceId: {}, instance: {}", ric, policyTypeIdString, policyInstanceId, instance); return this.policyAgentApi.putPolicy(policyTypeIdString, policyInstanceId, instance, ric); } @ApiOperation(value = "Deletes the policy instances for the given policy type.") - @DeleteMapping(POLICY_TYPES_METHOD + "/{" + POLICY_TYPE_ID_NAME + "}/" + POLICIES_NAME + "/{" - + POLICY_INSTANCE_ID_NAME + "}") + @DeleteMapping(POLICIES_NAME + "/{" + POLICY_INSTANCE_ID_NAME + "}") @Secured({ControlPanelConstants.ROLE_ADMIN}) - public ResponseEntity deletePolicyInstance(@PathVariable(POLICY_TYPE_ID_NAME) String policyTypeIdString, + public ResponseEntity deletePolicyInstance( // + @RequestParam(POLICY_TYPE_PARAM) String policyTypeIdString, @PathVariable(POLICY_INSTANCE_ID_NAME) String policyInstanceId) { logger.debug("deletePolicyInstance typeId: {}, instanceId: {}", policyTypeIdString, policyInstanceId); return this.policyAgentApi.deletePolicy(policyInstanceId); diff --git a/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/policyagentapi/PolicyAgentApiImpl.java b/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/policyagentapi/PolicyAgentApiImpl.java index 20e72bb..613c801 100644 --- a/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/policyagentapi/PolicyAgentApiImpl.java +++ b/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/policyagentapi/PolicyAgentApiImpl.java @@ -75,6 +75,7 @@ public class PolicyAgentApiImpl implements PolicyAgentApi { @Override public ResponseEntity getAllPolicyTypes() { + final String TITLE = "title"; try { final String url = "/policy_schemas"; ResponseEntity rsp = webClient.getForEntity(url).block(); @@ -83,18 +84,15 @@ public class PolicyAgentApiImpl implements PolicyAgentApi { } PolicyTypes result = new PolicyTypes(); - JsonArray schemas = JsonParser.parseString(rsp.getBody()).getAsJsonArray(); for (JsonElement schema : schemas) { JsonObject schemaObj = schema.getAsJsonObject(); - if (schemaObj.get("title") != null) { - String title = schemaObj.get("title").getAsString(); - String schemaAsStr = schemaObj.toString(); - PolicyType pt = new PolicyType(title, schemaAsStr); - result.add(pt); - } else { - logger.warn("Ignoring schema: {}", schemaObj); + String title = ""; + if (schemaObj.get(TITLE) != null) { + title = schemaObj.get(TITLE).getAsString(); } + PolicyType pt = new PolicyType(title, schemaObj.toString()); + result.add(pt); } return new ResponseEntity<>(gson.toJson(result), rsp.getStatusCode()); } catch (Exception e) { diff --git a/webapp-frontend/src/app/policy-control/policy-control.component.html b/webapp-frontend/src/app/policy-control/policy-control.component.html index f185207..997defd 100644 --- a/webapp-frontend/src/app/policy-control/policy-control.component.html +++ b/webapp-frontend/src/app/policy-control/policy-control.component.html @@ -28,7 +28,7 @@ {{isInstancesShown(policyType) ? 'expand_less' : 'expand_more'}} - {{this.getName(policyType)}} + {{this.getDisplayName(policyType)}} @@ -41,7 +41,8 @@ Action - diff --git a/webapp-frontend/src/app/policy-control/policy-control.component.ts b/webapp-frontend/src/app/policy-control/policy-control.component.ts index cd8d948..4b9d85a 100644 --- a/webapp-frontend/src/app/policy-control/policy-control.component.ts +++ b/webapp-frontend/src/app/policy-control/policy-control.component.ts @@ -88,6 +88,10 @@ export class PolicyControlComponent implements OnInit { info.isExpanded.next(!info.isExpanded.getValue()); } + private isSchemaEmpty(policyType: PolicyType): boolean { + return Object.keys(policyType.schemaObject).length === 0; + } + getPolicyTypeInfo(policyType: PolicyType): PolicyTypeInfo { let info: PolicyTypeInfo = this.policyTypeInfo.get(policyType.name); if (!info) { @@ -97,9 +101,11 @@ export class PolicyControlComponent implements OnInit { return info; } - getName(policyType: PolicyType): string { - if (policyType.schemaObject.title) { return policyType.schemaObject.title; } - return policyType.name; + getDisplayName(policyType: PolicyType): string { + if (policyType.schemaObject.title) { + return policyType.schemaObject.title; + } + return '< No type >'; } isInstancesShown(policyType: PolicyType): boolean { diff --git a/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.html b/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.html index d447c70..f052cca 100644 --- a/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.html +++ b/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.html @@ -78,7 +78,7 @@ [class.text-danger]="!formIsValid"> {{formIsValid ? 'Json' : 'Not valid'}} - Invalid form + Not submittable — errors:
diff --git a/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts b/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts index aea3453..60ffbd3 100644 --- a/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts +++ b/webapp-frontend/src/app/policy-control/policy-instance-dialog.component.ts @@ -123,11 +123,20 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { if (!this.policyInstanceId) { this.fetchRics(); } + if (this.isSchemaEmpty()) { + // Empty schema, hide form, show json instead + this.isVisible.form = false; + this.isVisible.json = true; + } } ngAfterViewInit() { } + private isSchemaEmpty(): boolean { + return Object.keys(this.jsonSchemaObject).length === 0; + } + onSubmit() { if (this.policyInstanceId == null) { this.policyInstanceId = uuid.v4(); @@ -154,15 +163,18 @@ export class PolicyInstanceDialogComponent implements OnInit, AfterViewInit { this.liveFormData = formData; } - get prettyLiveFormData() { + get prettyLiveFormData(): string { + if (this.isSchemaEmpty()) { + return this.jsonAsString; + } 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); } diff --git a/webapp-frontend/src/app/services/policy/policy.service.ts b/webapp-frontend/src/app/services/policy/policy.service.ts index b92e8f1..93f08e7 100644 --- a/webapp-frontend/src/app/services/policy/policy.service.ts +++ b/webapp-frontend/src/app/services/policy/policy.service.ts @@ -67,7 +67,7 @@ export class PolicyService { } getPolicyInstances(policyTypeId: string): Observable { - const url = this.buildPath(this.policyTypePath, policyTypeId, this.policyPath); + const url = this.buildPath(this.policyPath) + '?type=' + policyTypeId; return this.httpClient.get(url); } @@ -76,7 +76,7 @@ export class PolicyService { * @returns Observable that should yield a policy instance */ getPolicy(policyTypeId: string, policyInstanceId: string): Observable { - const url = this.buildPath(this.policyTypePath, policyTypeId, this.policyPath, policyInstanceId); + const url = this.buildPath(this.policyPath, policyInstanceId) + '?type=' + policyTypeId; return this.httpClient.get(url); } @@ -88,7 +88,7 @@ export class PolicyService { * @returns Observable that should yield a response code, no data */ putPolicy(policyTypeId: string, policyInstanceId: string, policyJson: string, ric: string): Observable { - const url = this.buildPath(this.policyTypePath, policyTypeId, this.policyPath, policyInstanceId) + '?ric=' + ric; + const url = this.buildPath(this.policyPath, policyInstanceId) + '?ric=' + ric + '&type=' + policyTypeId; return this.httpClient.put(url, policyJson, { observe: 'response' }); } @@ -99,7 +99,7 @@ export class PolicyService { * @returns Observable that should yield a response code, no data */ deletePolicy(policyTypeId: string, policyInstanceId: string): Observable { - const url = this.buildPath(this.policyTypePath, policyTypeId, this.policyPath, policyInstanceId); + const url = this.buildPath(this.policyPath, policyInstanceId) + '?type=' + policyTypeId; return this.httpClient.delete(url, { observe: 'response' }); } -- 2.16.6