X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-backend%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fportal%2Fnonrtric%2Fcontrolpanel%2Fcontroller%2FEnrichmentController.java;h=0845fcd2570f667a2895586c59dbc9f2bf296232;hb=f11a883a0b7d0dff421e5a79bc9f2378b76d3318;hp=558923f2ad9ce7dd601a21aafa25b99b826d4598;hpb=60e8bb72f91d6cc3c72b4e50124955561f73caad;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/EnrichmentController.java b/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/EnrichmentController.java index 558923f..0845fcd 100644 --- a/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/EnrichmentController.java +++ b/webapp-backend/src/main/java/org/oransc/portal/nonrtric/controlpanel/controller/EnrichmentController.java @@ -19,21 +19,32 @@ */ package org.oransc.portal.nonrtric.controlpanel.controller; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; + +import io.swagger.annotations.ApiOperation; + import java.lang.invoke.MethodHandles; +import java.util.ArrayList; +import java.util.List; + import org.oransc.portal.nonrtric.controlpanel.ControlPanelConstants; import org.oransc.portal.nonrtric.controlpanel.eiproducerapi.EiProducerApi; +import org.oransc.portal.nonrtric.controlpanel.model.JobInfo; +import org.oransc.portal.nonrtric.controlpanel.model.ProducerInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.security.access.annotation.Secured; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import io.swagger.annotations.ApiOperation; /** * Proxies calls from the front end to the EI Producer API. @@ -49,10 +60,11 @@ public class EnrichmentController { private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + private static com.google.gson.Gson gson = new GsonBuilder().create(); + // Publish paths in constants so tests are easy to write public static final String CONTROLLER_PATH = ControlPanelConstants.ENDPOINT_PREFIX + "/enrichment"; // Endpoints - public static final String VERSION_METHOD = ControlPanelConstants.VERSION_METHOD; public static final String EI_TYPES = "eitypes"; public static final String EI_PRODUCERS = "eiproducers"; public static final String EI_JOBS = "eijobs"; @@ -75,7 +87,6 @@ public class EnrichmentController { */ @ApiOperation(value = "Get the EI type identifiers") @GetMapping(EI_TYPES) - @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) public ResponseEntity getAllEiTypeIds() { logger.debug("getAllEiTypeIds"); return this.eiProducerApi.getAllEiTypeIds(); @@ -83,23 +94,13 @@ public class EnrichmentController { @ApiOperation(value = "Get an individual EI type") @GetMapping(EI_TYPES + "/{" + EI_TYPE_ID + "}") - @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) public ResponseEntity getEiType(@PathVariable(EI_TYPE_ID) String eiTypeId) { logger.debug("getEiType {}", eiTypeId); return this.eiProducerApi.getEiType(eiTypeId); } - @ApiOperation(value = "Get the EI producer identifiers") - @GetMapping(EI_PRODUCERS) - @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) - public ResponseEntity getAllEiProducerIds() { - logger.debug("getAllEiProducerIds"); - return this.eiProducerApi.getAllEiProducerIds(); - } - @ApiOperation(value = "Get an individual EI producer") @GetMapping(EI_PRODUCERS + "/{" + EI_PRODUCER_ID + "}") - @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) public ResponseEntity getEiProducer(@PathVariable(EI_PRODUCER_ID) String eiProducerId) { logger.debug("getEiProducer {}", eiProducerId); return this.eiProducerApi.getEiProducer(eiProducerId); @@ -107,17 +108,75 @@ public class EnrichmentController { @ApiOperation(value = "Get the EI job definitions for one EI producer") @GetMapping(EI_PRODUCERS + "/{" + EI_PRODUCER_ID + "}/" + EI_JOBS) - @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) public ResponseEntity getEiJobsForOneEiProducer(@PathVariable(EI_PRODUCER_ID) String eiProducerId) { logger.debug("getEiJobsForOneEiProducer {}", eiProducerId); return this.eiProducerApi.getEiJobsForOneEiProducer(eiProducerId); } + @ApiOperation(value = "Get the EI job definitions for one EI producer") + @GetMapping(EI_JOBS) + public ResponseEntity> getEiJobs() { + logger.debug("getEiJobs"); + ResponseEntity response = this.eiProducerApi.getAllEiProducerIds(); + JsonArray bodyJson = JsonParser.parseString(response.getBody()).getAsJsonArray(); + List allJobs = new ArrayList<>(); + for (JsonElement producerId : bodyJson) { + allJobs.addAll(getJobs(producerId)); + } + return new ResponseEntity<>(allJobs, HttpStatus.OK); + } + + private List getJobs(JsonElement producerId) { + List jobs = new ArrayList<>(); + ResponseEntity jobsResponse = this.eiProducerApi.getEiJobsForOneEiProducer(producerId.getAsString()); + JsonArray jobsJson = JsonParser.parseString(jobsResponse.getBody()).getAsJsonArray(); + for (JsonElement jobJson : jobsJson) { + JobInfo jobInfo = gson.fromJson(jobJson, JobInfo.class); + jobs.add(jobInfo); + } + return jobs; + } + + @ApiOperation(value = "Get EI producers") + @GetMapping(EI_PRODUCERS) + public ResponseEntity> getEiProducers() { + logger.debug("getEiProducers"); + ResponseEntity response = this.eiProducerApi.getAllEiProducerIds(); + JsonArray bodyJson = JsonParser.parseString(response.getBody()).getAsJsonArray(); + List producers = new ArrayList<>(); + for (JsonElement producerId : bodyJson) { + ProducerInfo producerInfo = ProducerInfo.builder() // + .id(producerId.getAsString()) // + .types(getSupportedTypes(producerId)) // + .status(getProducerStatus(producerId)) // + .build(); + producers.add(producerInfo); + } + + return new ResponseEntity<>(producers, HttpStatus.OK); + } + + private String[] getSupportedTypes(JsonElement producerId) { + ResponseEntity producerResponse = this.eiProducerApi.getEiProducer(producerId.getAsString()); + JsonArray supportedTypesJson = JsonParser.parseString(producerResponse.getBody()).getAsJsonObject() + .get("supported_ei_types").getAsJsonArray(); + List supportedTypes = new ArrayList<>(); + for (JsonElement typeJson : supportedTypesJson) { + supportedTypes.add(typeJson.getAsJsonObject().get("ei_type_identity").getAsString()); + } + return supportedTypes.toArray(new String[0]); + } + + private String getProducerStatus(JsonElement producerId) { + ResponseEntity statusResponse = this.eiProducerApi.getEiProducerStatus(producerId.getAsString()); + return JsonParser.parseString(statusResponse.getBody()).getAsJsonObject().get("operational_state") + .getAsString(); + } + @ApiOperation(value = "Get the status of an EI producer") @GetMapping(EI_PRODUCERS + "/{" + EI_PRODUCER_ID + "}/" + STATUS) - @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD}) public ResponseEntity getEiProducerStatus(@PathVariable(EI_PRODUCER_ID) String eiProducerId) { logger.debug("getEiProducerStatus {}", eiProducerId); return this.eiProducerApi.getEiProducerStatus(eiProducerId); } -} \ No newline at end of file +}