X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-backend%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fric%2Fportal%2Fdashboard%2Fcontroller%2FA1MediatorController.java;h=30f4092d70330f3c17ffbd9ed242011555f93f32;hb=9cf5b95a5bc9810d739d14d324dd7d80cbdb4a7d;hp=6fc806912331243dd902af661fe13fc2bf97ee02;hpb=44203c43bb16a87eb54cc97431a026e111842c97;p=portal%2Fric-dashboard.git diff --git a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/A1MediatorController.java b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/A1MediatorController.java index 6fc80691..30f4092d 100644 --- a/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/A1MediatorController.java +++ b/webapp-backend/src/main/java/org/oransc/ric/portal/dashboard/controller/A1MediatorController.java @@ -20,12 +20,15 @@ package org.oransc.ric.portal.dashboard.controller; import java.lang.invoke.MethodHandles; +import java.util.List; import javax.servlet.http.HttpServletResponse; import org.oransc.ric.a1med.client.api.A1MediatorApi; +import org.oransc.ric.a1med.client.model.PolicyTypeSchema; import org.oransc.ric.portal.dashboard.DashboardApplication; import org.oransc.ric.portal.dashboard.DashboardConstants; +import org.oransc.ric.portal.dashboard.config.A1MediatorApiBuilder; import org.oransc.ric.portal.dashboard.model.SuccessTransport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +48,7 @@ import io.swagger.annotations.ApiParam; /** * Proxies calls from the front end to the A1 Mediator API to get and put - * policies. The first application managed via this path is Admission Control. + * policies. All methods are deliberately kept ignorant of the data format. * * If a method throws RestClientResponseException, it is handled by * {@link CustomResponseEntityExceptionHandler#handleProxyMethodException(Exception, org.springframework.web.context.request.WebRequest)} @@ -60,52 +63,77 @@ public class A1MediatorController { // Publish paths in constants so tests are easy to write public static final String CONTROLLER_PATH = DashboardConstants.ENDPOINT_PREFIX + "/a1-p"; - // Endpoints - public static final String VERSION_METHOD = DashboardConstants.VERSION_METHOD; - // Path parameters - public static final String PP_POLICIES = "policies"; + public static final String PP_TYPE_ID = "poltype"; + public static final String PP_INST_ID = "polinst"; + // The get- and put-instance methods use the same path + private static final String POLICY_INSTANCE_METHOD_PATH = /* controller path + */ DashboardConstants.RIC_INSTANCE_KEY + + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/" + PP_TYPE_ID + "/{" + PP_TYPE_ID + "}/" + PP_INST_ID + + "/{" + PP_INST_ID + "}"; // Populated by the autowired constructor - private final A1MediatorApi a1MediatorApi; + private final A1MediatorApiBuilder a1MediatorClientBuilder; @Autowired - public A1MediatorController(final A1MediatorApi a1MediatorApi) { - Assert.notNull(a1MediatorApi, "API must not be null"); - this.a1MediatorApi = a1MediatorApi; + public A1MediatorController(final A1MediatorApiBuilder a1MediatorApiBuilder) { + Assert.notNull(a1MediatorApiBuilder, "builder must not be null"); + this.a1MediatorClientBuilder = a1MediatorApiBuilder; if (logger.isDebugEnabled()) - logger.debug("ctor: configured with client type {}", a1MediatorApi.getClass().getName()); + logger.debug("ctor: configured with builder type {}", a1MediatorApiBuilder.getClass().getName()); } @ApiOperation(value = "Gets the A1 client library MANIFEST.MF property Implementation-Version.", response = SuccessTransport.class) - @GetMapping(VERSION_METHOD) + @GetMapping(DashboardConstants.VERSION_METHOD) // No role required public SuccessTransport getA1MediatorClientVersion() { return new SuccessTransport(200, DashboardApplication.getImplementationVersion(A1MediatorApi.class)); } - /* - * This method is deliberately kept ignorant of the data passing thru. - */ - @ApiOperation(value = "Gets the specified policy from the A1 Mediator") - @GetMapping(PP_POLICIES + "/{" + PP_POLICIES + "}") + @ApiOperation(value = "Gets the registered policy type IDs from the A1 Mediator", response = Integer.class, responseContainer = "List") + @GetMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/" + PP_TYPE_ID) @Secured({ DashboardConstants.ROLE_ADMIN, DashboardConstants.ROLE_STANDARD }) - public Object getPolicy(@PathVariable(PP_POLICIES) String policyName) { - logger.debug("getPolicy {}", policyName); - return a1MediatorApi.a1ControllerGetHandler(policyName); + public List getAllPolicyTypes(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey) { + logger.debug("getAllPolicyTypes: instance {}", instanceKey); + Object result = a1MediatorClientBuilder.getA1MediatorApi(instanceKey).a1ControllerGetAllPolicyTypes(); + @SuppressWarnings("unchecked") + List result2 = (List) result; + return result2; } - /* - * This method is deliberately kept ignorant of the data passing thru. - */ - @ApiOperation(value = "Puts the specified policy to the A1 Mediator") - @PutMapping(PP_POLICIES + "/{" + PP_POLICIES + "}") + @ApiOperation(value = "Gets the specified policy type from the A1 Mediator", response = PolicyTypeSchema.class) + @GetMapping(DashboardConstants.RIC_INSTANCE_KEY + "/{" + DashboardConstants.RIC_INSTANCE_KEY + "}/" + PP_TYPE_ID + + "/{" + PP_TYPE_ID + "}") + @Secured({ DashboardConstants.ROLE_ADMIN, DashboardConstants.ROLE_STANDARD }) + public PolicyTypeSchema getPolicyType(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey, + @PathVariable(PP_TYPE_ID) Integer policyTypeId) { + logger.debug("getPolicyType: instance {} typeId {}", instanceKey, policyTypeId); + return a1MediatorClientBuilder.getA1MediatorApi(instanceKey).a1ControllerGetPolicyType(policyTypeId); + } + + @ApiOperation(value = "Gets the specified policy instance from the A1 Mediator") + @GetMapping(POLICY_INSTANCE_METHOD_PATH) + @Secured({ DashboardConstants.ROLE_ADMIN, DashboardConstants.ROLE_STANDARD }) + public Object getPolicyInstance(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey, + @PathVariable(PP_TYPE_ID) Integer policyTypeId, // + @PathVariable(PP_INST_ID) String policyInstanceId) { + logger.debug("getPolicyInstance: instance {} typeId {} instanceId {}", instanceKey, policyTypeId, + policyInstanceId); + return a1MediatorClientBuilder.getA1MediatorApi(instanceKey).a1ControllerGetPolicyInstance(policyTypeId, + policyInstanceId); + } + + @ApiOperation(value = "Creates or replaces the specified policy instance at the A1 Mediator") + @PutMapping(POLICY_INSTANCE_METHOD_PATH) @Secured({ DashboardConstants.ROLE_ADMIN }) - public void putPolicy(@PathVariable(PP_POLICIES) String policyName, - @ApiParam(value = "Policy body") @RequestBody String policy, // + public void createPolicyInstance(@PathVariable(DashboardConstants.RIC_INSTANCE_KEY) String instanceKey, + @PathVariable(PP_TYPE_ID) Integer policyTypeId, // + @PathVariable(PP_INST_ID) String policyInstanceId, + @ApiParam(value = "Policy body") @RequestBody String policyBody, // HttpServletResponse response) { - logger.debug("putPolicy name {} value {}", policyName, policy); - a1MediatorApi.a1ControllerPutHandler(policyName, policy); - response.setStatus(a1MediatorApi.getApiClient().getStatusCode().value()); + logger.debug("createPolicyInstance: instance {} typeId {} instanceId {}", instanceKey, policyTypeId, + policyInstanceId); + A1MediatorApi api = a1MediatorClientBuilder.getA1MediatorApi(instanceKey); + api.a1ControllerCreateOrReplacePolicyInstance(policyTypeId, policyInstanceId, policyBody); + response.setStatus(api.getApiClient().getStatusCode().value()); } }