*/
package org.oransc.portal.nonrtric.controlpanel.controller;
+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.oransc.portal.nonrtric.controlpanel.model.ProducerRegistrationInfo;
+import org.oransc.portal.nonrtric.controlpanel.model.ProducerRegistrationInfo.ProducerEiTypeRegistrationInfo;
+import org.oransc.portal.nonrtric.controlpanel.model.ProducerStatusInfo;
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;
// 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";
logger.debug("enrichment: configured with client type {}", eiProducerApi.getClass().getName());
}
- /*
- * The fields are defined in the Enrichment Control Typescript interface.
- */
- @ApiOperation(value = "Get the EI type identifiers")
- @GetMapping(EI_TYPES)
- @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD})
- public ResponseEntity<String> getAllEiTypeIds() {
- logger.debug("getAllEiTypeIds");
- return this.eiProducerApi.getAllEiTypeIds();
+ @ApiOperation(value = "Get the EI job definitions for one EI producer")
+ @GetMapping(EI_JOBS)
+ public ResponseEntity<List<JobInfo>> getEiJobs() {
+ logger.debug("getEiJobs");
+ ResponseEntity<String> response = this.eiProducerApi.getAllEiProducerIds();
+ JsonArray bodyJson = JsonParser.parseString(response.getBody()).getAsJsonArray();
+ List<JobInfo> allJobs = new ArrayList<>();
+ for (JsonElement producerId : bodyJson) {
+ allJobs.addAll(getJobs(producerId));
+ }
+ return new ResponseEntity<>(allJobs, HttpStatus.OK);
}
- @ApiOperation(value = "Get an individual EI type")
- @GetMapping(EI_TYPES + "/{" + EI_TYPE_ID + "}")
- @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD})
- public ResponseEntity<String> getEiType(@PathVariable(EI_TYPE_ID) String eiTypeId) {
- logger.debug("getEiType {}", eiTypeId);
- return this.eiProducerApi.getEiType(eiTypeId);
+ private List<JobInfo> getJobs(JsonElement producerId) {
+ ResponseEntity<List<JobInfo>> jobsResponse =
+ this.eiProducerApi.getEiJobsForOneEiProducer(producerId.getAsString());
+ return jobsResponse.getBody();
}
- @ApiOperation(value = "Get the EI producer identifiers")
+ @ApiOperation(value = "Get EI producers")
@GetMapping(EI_PRODUCERS)
- @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD})
- public ResponseEntity<String> getAllEiProducerIds() {
- logger.debug("getAllEiProducerIds");
- return this.eiProducerApi.getAllEiProducerIds();
- }
+ public ResponseEntity<List<ProducerInfo>> getEiProducers() {
+ logger.debug("getEiProducers");
+ ResponseEntity<String> response = this.eiProducerApi.getAllEiProducerIds();
+ JsonArray bodyJson = JsonParser.parseString(response.getBody()).getAsJsonArray();
+ List<ProducerInfo> producers = new ArrayList<>();
+ for (JsonElement producerId : bodyJson) {
+ ProducerInfo producerInfo = ProducerInfo.builder() //
+ .id(producerId.getAsString()) //
+ .types(getSupportedTypes(producerId)) //
+ .status(getProducerStatus(producerId)) //
+ .build();
+ producers.add(producerInfo);
+ }
- @ApiOperation(value = "Get an individual EI producer")
- @GetMapping(EI_PRODUCERS + "/{" + EI_PRODUCER_ID + "}")
- @Secured({ControlPanelConstants.ROLE_ADMIN, ControlPanelConstants.ROLE_STANDARD})
- public ResponseEntity<String> getEiProducer(@PathVariable(EI_PRODUCER_ID) String eiProducerId) {
- logger.debug("getEiProducer {}", eiProducerId);
- return this.eiProducerApi.getEiProducer(eiProducerId);
+ return new ResponseEntity<>(producers, HttpStatus.OK);
}
- @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<String> getEiJobsForOneEiProducer(@PathVariable(EI_PRODUCER_ID) String eiProducerId) {
- logger.debug("getEiJobsForOneEiProducer {}", eiProducerId);
- return this.eiProducerApi.getEiJobsForOneEiProducer(eiProducerId);
+ private String[] getSupportedTypes(JsonElement producerId) {
+ ResponseEntity<ProducerRegistrationInfo> producerResponse =
+ this.eiProducerApi.getEiProducer(producerId.getAsString());
+ List<String> supportedTypes = new ArrayList<>();
+ for (ProducerEiTypeRegistrationInfo type : producerResponse.getBody().types) {
+ supportedTypes.add(type.eiTypeId);
+ }
+ return supportedTypes.toArray(new String[0]);
}
- @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<String> getEiProducerStatus(@PathVariable(EI_PRODUCER_ID) String eiProducerId) {
- logger.debug("getEiProducerStatus {}", eiProducerId);
- return this.eiProducerApi.getEiProducerStatus(eiProducerId);
+ private String getProducerStatus(JsonElement producerId) {
+ ResponseEntity<ProducerStatusInfo> statusResponse =
+ this.eiProducerApi.getEiProducerStatus(producerId.getAsString());
+ return statusResponse.getBody().opState.toString();
}
}