X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=enrichment-coordinator-service%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fenrichment%2Fcontrollers%2Fconsumer%2FConsumerController.java;h=4316915142e6c80fe3a678f16df95e38a03a4339;hb=3ac4de0524650cea3d17f9ad5ff7e9cf5dffbe83;hp=f4c69f0982428a1b794020cd196f65317bac7e23;hpb=b5aa1b04fe2cf730c434e3d5d103b3ab357f2292;p=nonrtric.git diff --git a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/consumer/ConsumerController.java b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/consumer/ConsumerController.java index f4c69f09..43169151 100644 --- a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/consumer/ConsumerController.java +++ b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/consumer/ConsumerController.java @@ -31,21 +31,23 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Vector; import org.everit.json.schema.Schema; import org.everit.json.schema.loader.SchemaLoader; import org.json.JSONObject; -import org.oransc.enrichment.clients.ProducerCallbacks; import org.oransc.enrichment.configuration.ApplicationConfig; import org.oransc.enrichment.controllers.ErrorResponse; import org.oransc.enrichment.controllers.VoidResponse; +import org.oransc.enrichment.controllers.producer.ProducerCallbacks; import org.oransc.enrichment.exceptions.ServiceException; import org.oransc.enrichment.repository.EiJob; import org.oransc.enrichment.repository.EiJobs; +import org.oransc.enrichment.repository.EiProducer; import org.oransc.enrichment.repository.EiType; import org.oransc.enrichment.repository.EiTypes; -import org.oransc.enrichment.repository.ImmutableEiJob; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -55,12 +57,15 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; @SuppressWarnings("java:S3457") // No need to call "toString()" method as formatting and string .. @RestController("ConsumerController") @Api(tags = {ConsumerConsts.CONSUMER_API_NAME}) +@RequestMapping(path = ConsumerConsts.API_ROOT, produces = MediaType.APPLICATION_JSON_VALUE) public class ConsumerController { @Autowired @@ -75,11 +80,9 @@ public class ConsumerController { @Autowired ProducerCallbacks producerCallbacks; - private static Gson gson = new GsonBuilder() // - .serializeNulls() // - .create(); // + private static Gson gson = new GsonBuilder().create(); - @GetMapping(path = ConsumerConsts.API_ROOT + "/eitypes", produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(path = "/eitypes", produces = MediaType.APPLICATION_JSON_VALUE) @ApiOperation(value = "EI type identifiers", notes = "") @ApiResponses( value = { // @@ -99,7 +102,7 @@ public class ConsumerController { return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK); } - @GetMapping(path = ConsumerConsts.API_ROOT + "/eitypes/{eiTypeId}", produces = MediaType.APPLICATION_JSON_VALUE) + @GetMapping(path = "/eitypes/{eiTypeId}", produces = MediaType.APPLICATION_JSON_VALUE) @ApiOperation(value = "Individual EI type", notes = "") @ApiResponses( value = { // @@ -111,18 +114,16 @@ public class ConsumerController { public ResponseEntity getEiType( // @PathVariable("eiTypeId") String eiTypeId) { try { - EiType t = this.eiTypes.getType(eiTypeId); - ConsumerEiTypeInfo info = toEiTypeInfo(t); + this.eiTypes.getType(eiTypeId); // Make sure that the type exists + ConsumerEiTypeInfo info = toEiTypeInfo(); return new ResponseEntity<>(gson.toJson(info), HttpStatus.OK); } catch (Exception e) { return ErrorResponse.create(e, HttpStatus.NOT_FOUND); } } - @GetMapping( - path = ConsumerConsts.API_ROOT + "/eitypes/{eiTypeId}/eijobs", - produces = MediaType.APPLICATION_JSON_VALUE) - @ApiOperation(value = "EI job identifiers", notes = "") + @GetMapping(path = "/eijobs", produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "EI job identifiers", notes = "query for EI job identifiers") @ApiResponses( value = { // @ApiResponse( @@ -135,40 +136,49 @@ public class ConsumerController { message = "Enrichment Information type is not found", response = ErrorResponse.ErrorInfo.class)}) public ResponseEntity getEiJobIds( // - @PathVariable("eiTypeId") String eiTypeId, // + @ApiParam( + name = ConsumerConsts.EI_TYPE_ID_PARAM, + required = false, // + value = ConsumerConsts.EI_TYPE_ID_PARAM_DESCRIPTION) // + @RequestParam(name = ConsumerConsts.EI_TYPE_ID_PARAM, required = false) String eiTypeId, @ApiParam( name = ConsumerConsts.OWNER_PARAM, required = false, // value = ConsumerConsts.OWNER_PARAM_DESCRIPTION) // - String owner) { + @RequestParam(name = ConsumerConsts.OWNER_PARAM, required = false) String owner) { try { - this.eiTypes.getType(eiTypeId); // Just to check that the type exists List result = new ArrayList<>(); - for (EiJob job : this.eiJobs.getJobsForType(eiTypeId)) { - result.add(job.id()); + if (owner != null) { + for (EiJob job : this.eiJobs.getJobsForOwner(owner)) { + if (eiTypeId == null || job.getTypeId().equals(eiTypeId)) { + result.add(job.getId()); + } + } + } else if (eiTypeId != null) { + this.eiJobs.getJobsForType(eiTypeId).forEach(job -> result.add(job.getId())); + } else { + this.eiJobs.getJobs().forEach(job -> result.add(job.getId())); } return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK); - } catch (Exception e) { + } catch ( + + Exception e) { return ErrorResponse.create(e, HttpStatus.NOT_FOUND); } } - @GetMapping( - path = ConsumerConsts.API_ROOT + "/eitypes/{eiTypeId}/eijobs/{eiJobId}", - produces = MediaType.APPLICATION_JSON_VALUE) - @ApiOperation(value = "Individual EI Job", notes = "") + @GetMapping(path = "/eijobs/{eiJobId}", produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "Individual EI job", notes = "") @ApiResponses( value = { // - @ApiResponse(code = 200, message = "EI Job", response = ConsumerEiJobInfo.class), // + @ApiResponse(code = 200, message = "EI job", response = ConsumerEiJobInfo.class), // @ApiResponse( code = 404, - message = "Enrichment Information type or job is not found", + message = "Enrichment Information job is not found", response = ErrorResponse.ErrorInfo.class)}) public ResponseEntity getIndividualEiJob( // - @PathVariable("eiTypeId") String eiTypeId, // @PathVariable("eiJobId") String eiJobId) { try { - this.eiTypes.getType(eiTypeId); // Just to check that the type exists EiJob job = this.eiJobs.getJob(eiJobId); return new ResponseEntity<>(gson.toJson(toEiJobInfo(job)), HttpStatus.OK); } catch (Exception e) { @@ -176,22 +186,18 @@ public class ConsumerController { } } - @GetMapping( - path = ConsumerConsts.API_ROOT + "/eitypes/{eiTypeId}/eijobs/{eiJobId}/status", - produces = MediaType.APPLICATION_JSON_VALUE) - @ApiOperation(value = "EI Job status", notes = "") + @GetMapping(path = "/eijobs/{eiJobId}/status", produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "EI job status", notes = "") @ApiResponses( value = { // - @ApiResponse(code = 200, message = "EI Job status", response = ConsumerEiJobStatus.class), // + @ApiResponse(code = 200, message = "EI job status", response = ConsumerEiJobStatus.class), // @ApiResponse( code = 404, - message = "Enrichment Information type or job is not found", + message = "Enrichment Information job is not found", response = ErrorResponse.ErrorInfo.class)}) public ResponseEntity getEiJobStatus( // - @PathVariable("eiTypeId") String eiTypeId, // @PathVariable("eiJobId") String eiJobId) { try { - this.eiTypes.getType(eiTypeId); // Just to check that the type exists EiJob job = this.eiJobs.getJob(eiJobId); return new ResponseEntity<>(gson.toJson(toEiJobStatus(job)), HttpStatus.OK); } catch (Exception e) { @@ -199,25 +205,33 @@ public class ConsumerController { } } + private Collection getProducers(EiJob eiJob) { + try { + return this.eiTypes.getType(eiJob.getTypeId()).getProducers(); + } catch (Exception e) { + return new Vector<>(); + } + } + private ConsumerEiJobStatus toEiJobStatus(EiJob job) { - // TODO - return new ConsumerEiJobStatus(ConsumerEiJobStatus.OperationalState.ENABLED); + if (getProducers(job).isEmpty()) { + return new ConsumerEiJobStatus(ConsumerEiJobStatus.EiJobStatusValues.DISABLED); + } else { + return new ConsumerEiJobStatus(ConsumerEiJobStatus.EiJobStatusValues.ENABLED); + } } - @DeleteMapping( - path = ConsumerConsts.API_ROOT + "/eitypes/{eiTypeId}/eijobs/{eiJobId}", - produces = MediaType.APPLICATION_JSON_VALUE) - @ApiOperation(value = "Individual EI Job", notes = "") + @DeleteMapping(path = "/eijobs/{eiJobId}", produces = MediaType.APPLICATION_JSON_VALUE) + @ApiOperation(value = "Individual EI job", notes = "") @ApiResponses( value = { // @ApiResponse(code = 200, message = "Not used", response = VoidResponse.class), @ApiResponse(code = 204, message = "Job deleted", response = VoidResponse.class), @ApiResponse( code = 404, - message = "Enrichment Information type or job is not found", + message = "Enrichment Information job is not found", response = ErrorResponse.ErrorInfo.class)}) public ResponseEntity deleteIndividualEiJob( // - @PathVariable("eiTypeId") String eiTypeId, // @PathVariable("eiJobId") String eiJobId) { try { EiJob job = this.eiJobs.getJob(eiJobId); @@ -230,10 +244,10 @@ public class ConsumerController { } @PutMapping( - path = ConsumerConsts.API_ROOT + "/eitypes/{eiTypeId}/eijobs/{eiJobId}", // + path = "/eijobs/{eiJobId}", // produces = MediaType.APPLICATION_JSON_VALUE, // consumes = MediaType.APPLICATION_JSON_VALUE) - @ApiOperation(value = "Individual EI Job", notes = "") + @ApiOperation(value = "Individual EI job", notes = "") @ApiResponses( value = { // @ApiResponse(code = 201, message = "Job created", response = VoidResponse.class), // @@ -243,13 +257,12 @@ public class ConsumerController { message = "Enrichment Information type is not found", response = ErrorResponse.ErrorInfo.class)}) public Mono> putIndividualEiJob( // - @PathVariable("eiTypeId") String eiTypeId, // @PathVariable("eiJobId") String eiJobId, // - @RequestBody ConsumerEiJobInfo eiJobInfo) { + @RequestBody ConsumerEiJobInfo eiJobObject) { final boolean isNewJob = this.eiJobs.get(eiJobId) == null; - return validatePutEiJob(eiTypeId, eiJobId, eiJobInfo) // + return validatePutEiJob(eiJobId, eiJobObject) // .flatMap(this::notifyProducersNewJob) // .doOnNext(newEiJob -> this.eiJobs.put(newEiJob)) // .flatMap(newEiJob -> Mono.just(new ResponseEntity<>(isNewJob ? HttpStatus.CREATED : HttpStatus.OK))) @@ -267,13 +280,13 @@ public class ConsumerController { }); } - private Mono validatePutEiJob(String eiTypeId, String eiJobId, ConsumerEiJobInfo eiJobInfo) { + private Mono validatePutEiJob(String eiJobId, ConsumerEiJobInfo eiJobInfo) { try { - EiType eiType = this.eiTypes.getType(eiTypeId); + EiType eiType = this.eiTypes.getType(eiJobInfo.eiTypeId); validateJsonObjectAgainstSchema(eiType.getJobDataSchema(), eiJobInfo.jobData); EiJob existingEiJob = this.eiJobs.get(eiJobId); - if (existingEiJob != null && !existingEiJob.type().getId().equals(eiTypeId)) { + if (existingEiJob != null && !existingEiJob.getTypeId().equals(eiJobInfo.eiTypeId)) { throw new ServiceException("Not allowed to change type for existing EI job", HttpStatus.CONFLICT); } return Mono.just(toEiJob(eiJobInfo, eiJobId, eiType)); @@ -300,23 +313,21 @@ public class ConsumerController { } } - // Status TBD - private EiJob toEiJob(ConsumerEiJobInfo info, String id, EiType type) { - return ImmutableEiJob.builder() // - .id(id) // - .type(type) // - .owner(info.owner) // - .jobData(info.jobData) // - .targetUri(info.targetUri) // - .build(); + return new EiJob(id, // + type.getId(), // + info.owner, // + info.jobData, // + info.targetUri, // + info.statusNotificationUri == null ? "" : info.statusNotificationUri); } - private ConsumerEiTypeInfo toEiTypeInfo(EiType t) { - return new ConsumerEiTypeInfo(t.getJobDataSchema()); + private ConsumerEiTypeInfo toEiTypeInfo() { + return new ConsumerEiTypeInfo(); } private ConsumerEiJobInfo toEiJobInfo(EiJob s) { - return new ConsumerEiJobInfo(s.jobData(), s.owner(), s.targetUri()); + return new ConsumerEiJobInfo(s.getTypeId(), s.getJobData(), s.getOwner(), s.getTargetUrl(), + s.getJobStatusUrl()); } }