X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=enrichment-coordinator-service%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fenrichment%2Fcontrollers%2Fr1consumer%2FConsumerController.java;h=b108380b5ba9afc002392bfdcf116df8be28f924;hb=5e1623ab25b62c6c28849bfd862eba4648465922;hp=fd1901e3a82b906b1a5067b8c437d14dffcf545f;hpb=194b712cc0d58def2e02c8532f6fa503856c1fda;p=nonrtric.git diff --git a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/r1consumer/ConsumerController.java b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/r1consumer/ConsumerController.java index fd1901e3..b108380b 100644 --- a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/r1consumer/ConsumerController.java +++ b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/controllers/r1consumer/ConsumerController.java @@ -41,7 +41,6 @@ import java.util.Collection; import java.util.List; import org.json.JSONObject; -import org.oransc.enrichment.configuration.ApplicationConfig; import org.oransc.enrichment.controllers.ErrorResponse; import org.oransc.enrichment.controllers.VoidResponse; import org.oransc.enrichment.controllers.r1producer.ProducerCallbacks; @@ -70,36 +69,29 @@ 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("Consumer registry") +@RestController("Consumer API") @Tag(name = ConsumerConsts.CONSUMER_API_NAME) @RequestMapping(path = ConsumerConsts.API_ROOT, produces = MediaType.APPLICATION_JSON_VALUE) public class ConsumerController { private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - - @Autowired - ApplicationConfig applicationConfig; - - @Autowired - private InfoJobs jobs; - - @Autowired - private InfoTypes infoTypes; - - @Autowired - private InfoProducers infoProducers; - - @Autowired - private ConsumerCallbacks consumerCallbacks; - - @Autowired - private ProducerCallbacks producerCallbacks; - - @Autowired - private InfoTypeSubscriptions infoTypeSubscriptions; - + private final InfoJobs infoJobs; + private final InfoTypes infoTypes; + private final InfoProducers infoProducers; + private final ProducerCallbacks producerCallbacks; + private final InfoTypeSubscriptions infoTypeSubscriptions; private static Gson gson = new GsonBuilder().create(); + public ConsumerController(@Autowired InfoJobs jobs, @Autowired InfoTypes infoTypes, + @Autowired InfoProducers infoProducers, @Autowired ProducerCallbacks producerCallbacks, + @Autowired InfoTypeSubscriptions infoTypeSubscriptions) { + this.infoProducers = infoProducers; + this.infoJobs = jobs; + this.infoTypeSubscriptions = infoTypeSubscriptions; + this.infoTypes = infoTypes; + this.producerCallbacks = producerCallbacks; + } + @GetMapping(path = "/info-types", produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Information type identifiers", description = "") @ApiResponses( @@ -170,15 +162,15 @@ public class ConsumerController { try { List result = new ArrayList<>(); if (owner != null) { - for (InfoJob job : this.jobs.getJobsForOwner(owner)) { + for (InfoJob job : this.infoJobs.getJobsForOwner(owner)) { if (infoTypeId == null || job.getTypeId().equals(infoTypeId)) { result.add(job.getId()); } } } else if (infoTypeId != null) { - this.jobs.getJobsForType(infoTypeId).forEach(job -> result.add(job.getId())); + this.infoJobs.getJobsForType(infoTypeId).forEach(job -> result.add(job.getId())); } else { - this.jobs.getJobs().forEach(job -> result.add(job.getId())); + this.infoJobs.getJobs().forEach(job -> result.add(job.getId())); } return new ResponseEntity<>(gson.toJson(result), HttpStatus.OK); } catch ( @@ -204,7 +196,7 @@ public class ConsumerController { public ResponseEntity getIndividualEiJob( // @PathVariable("infoJobId") String infoJobId) { try { - InfoJob job = this.jobs.getJob(infoJobId); + InfoJob job = this.infoJobs.getJob(infoJobId); return new ResponseEntity<>(gson.toJson(toInfoJobInfo(job)), HttpStatus.OK); } catch (Exception e) { return ErrorResponse.create(e, HttpStatus.NOT_FOUND); @@ -227,7 +219,7 @@ public class ConsumerController { public ResponseEntity getEiJobStatus( // @PathVariable("infoJobId") String jobId) { try { - InfoJob job = this.jobs.getJob(jobId); + InfoJob job = this.infoJobs.getJob(jobId); return new ResponseEntity<>(gson.toJson(toInfoJobStatus(job)), HttpStatus.OK); } catch (Exception e) { return ErrorResponse.create(e, HttpStatus.NOT_FOUND); @@ -264,8 +256,8 @@ public class ConsumerController { public ResponseEntity deleteIndividualEiJob( // @PathVariable("infoJobId") String jobId) { try { - InfoJob job = this.jobs.getJob(jobId); - this.jobs.remove(job, this.infoProducers); + InfoJob job = this.infoJobs.getJob(jobId); + this.infoJobs.remove(job, this.infoProducers); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } catch (Exception e) { return ErrorResponse.create(e, HttpStatus.NOT_FOUND); @@ -290,8 +282,15 @@ public class ConsumerController { @ApiResponse( responseCode = "404", description = "Information type is not found", // - content = @Content(schema = @Schema(implementation = ErrorResponse.ErrorInfo.class))) // - }) + content = @Content(schema = @Schema(implementation = ErrorResponse.ErrorInfo.class))), // + @ApiResponse( + responseCode = "400", + description = "Input validation failed", // + content = @Content(schema = @Schema(implementation = ErrorResponse.ErrorInfo.class))), // + @ApiResponse( + responseCode = "409", + description = "Cannot modify job type", // + content = @Content(schema = @Schema(implementation = ErrorResponse.ErrorInfo.class)))}) public Mono> putIndividualInfoJob( // @PathVariable("infoJobId") String jobId, // @Parameter( @@ -304,12 +303,12 @@ public class ConsumerController { defaultValue = "false") boolean performTypeCheck, @RequestBody ConsumerJobInfo informationJobObject) { - final boolean isNewJob = this.jobs.get(jobId) == null; + final boolean isNewJob = this.infoJobs.get(jobId) == null; return validatePutInfoJob(jobId, informationJobObject, performTypeCheck) // .flatMap(this::startInfoSubscriptionJob) // - .doOnNext(newEiJob -> this.jobs.put(newEiJob)) // - .flatMap(newEiJob -> Mono.just(new ResponseEntity<>(isNewJob ? HttpStatus.CREATED : HttpStatus.OK))) + .doOnNext(this.infoJobs::put) // + .map(newEiJob -> new ResponseEntity<>(isNewJob ? HttpStatus.CREATED : HttpStatus.OK)) // .onErrorResume(throwable -> Mono.just(ErrorResponse.create(throwable, HttpStatus.NOT_FOUND))); } @@ -432,18 +431,17 @@ public class ConsumerController { private InfoTypeSubscriptions.SubscriptionInfo toTypeSuscriptionInfo(ConsumerTypeSubscriptionInfo s, String subscriptionId) { return InfoTypeSubscriptions.SubscriptionInfo.builder() // - .callback(this.consumerCallbacks) // + .apiVersion(ConsumerCallbacks.API_VERSION) // .owner(s.owner) // .id(subscriptionId) // .callbackUrl(s.statusResultUri).build(); - } private Mono startInfoSubscriptionJob(InfoJob newInfoJob) { return this.producerCallbacks.startInfoSubscriptionJob(newInfoJob, infoProducers) // .doOnNext(noOfAcceptingProducers -> this.logger.debug("Started job {}, number of activated producers: {}", newInfoJob.getId(), noOfAcceptingProducers)) // - .flatMap(noOfAcceptingProducers -> Mono.just(newInfoJob)); + .map(noOfAcceptingProducers -> newInfoJob); } private Mono validatePutInfoJob(String jobId, ConsumerJobInfo jobInfo, boolean performTypeCheck) { @@ -452,7 +450,7 @@ public class ConsumerController { InfoType infoType = this.infoTypes.getType(jobInfo.infoTypeId); validateJsonObjectAgainstSchema(infoType.getJobDataSchema(), jobInfo.jobDefinition); } - InfoJob existingEiJob = this.jobs.get(jobId); + InfoJob existingEiJob = this.infoJobs.get(jobId); validateUri(jobInfo.statusNotificationUri); validateUri(jobInfo.jobResultUri); @@ -469,7 +467,7 @@ public class ConsumerController { if (url != null && !url.isEmpty()) { URI uri = new URI(url); if (!uri.isAbsolute()) { - throw new ServiceException("URI: " + url + " is not absolute", HttpStatus.CONFLICT); + throw new ServiceException("URI: " + url + " is not absolute", HttpStatus.BAD_REQUEST); } } } @@ -487,7 +485,7 @@ public class ConsumerController { JSONObject json = new JSONObject(objectAsString); schema.validate(json); } catch (Exception e) { - throw new ServiceException("Json validation failure " + e.toString(), HttpStatus.CONFLICT); + throw new ServiceException("Json validation failure " + e.toString(), HttpStatus.BAD_REQUEST); } } }