From c6da9f5aaa7c29644ead22d5ba5fc8ef3ec5811a Mon Sep 17 00:00:00 2001 From: Brinda Santh Date: Sat, 1 Feb 2020 18:47:59 -0500 Subject: Expose rest API with non blocking call. Convert Mono and Flux to coroutines Convert reactor mdc to coroutine mdc Issue-ID: CCSDK-2052 Signed-off-by: Brinda Santh Change-Id: Ic58c0b74866d28fd2d803b96626b08f8e8b2db56 --- .../designer/api/BlueprintModelController.kt | 57 ++++++++++---------- .../designer/api/ModelTypeController.kt | 33 +++++++----- .../designer/api/ResourceDictionaryController.kt | 61 ++++++++++++++-------- 3 files changed, 87 insertions(+), 64 deletions(-) (limited to 'ms/blueprintsprocessor/modules/inbounds/designer-api/src/main') diff --git a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt index 0eb29f4cc..bb824ce4d 100644 --- a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt +++ b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/BlueprintModelController.kt @@ -24,7 +24,7 @@ import org.jetbrains.annotations.NotNull import org.onap.ccsdk.cds.blueprintsprocessor.db.primary.domain.BlueprintModelSearch import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.handler.BluePrintModelHandler import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.utils.BlueprintSortByOption -import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.monoMdc +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.mdcWebCoroutineScope import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException import org.springframework.core.io.Resource import org.springframework.data.domain.Page @@ -45,7 +45,6 @@ import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RequestPart import org.springframework.web.bind.annotation.ResponseBody import org.springframework.web.bind.annotation.RestController -import reactor.core.publisher.Mono /** * BlueprintModelController Purpose: Handle controllerBlueprint API request @@ -64,7 +63,7 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun bootstrap(@RequestBody bootstrapRequest: BootstrapRequest): Mono = monoMdc { + suspend fun bootstrap(@RequestBody bootstrapRequest: BootstrapRequest): Unit = mdcWebCoroutineScope { bluePrintModelHandler.bootstrapBlueprint(bootstrapRequest) } @@ -72,7 +71,7 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun saveBlueprint(@RequestPart("file") filePart: FilePart): Mono = monoMdc { + suspend fun saveBlueprint(@RequestPart("file") filePart: FilePart): BlueprintModelSearch = mdcWebCoroutineScope { bluePrintModelHandler.saveBlueprintModel(filePart) } @@ -98,9 +97,10 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @GetMapping("meta-data/{keyword}", produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody @PreAuthorize("hasRole('USER')") - fun allBlueprintModelMetaData(@NotNull @PathVariable(value = "keyword") keyWord: String): List { - return this.bluePrintModelHandler.searchBluePrintModelsByKeyWord(keyWord) - } + suspend fun allBlueprintModelMetaData(@NotNull @PathVariable(value = "keyword") keyWord: String): List = + mdcWebCoroutineScope { + bluePrintModelHandler.searchBluePrintModelsByKeyWord(keyWord) + } @GetMapping("/paged/meta-data/{keyword}", produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody @@ -118,20 +118,20 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @DeleteMapping("/{id}") @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun deleteBlueprint(@PathVariable(value = "id") id: String) { - this.bluePrintModelHandler.deleteBlueprintModel(id) + suspend fun deleteBlueprint(@PathVariable(value = "id") id: String) = mdcWebCoroutineScope { + bluePrintModelHandler.deleteBlueprintModel(id) } @GetMapping("/by-name/{name}/version/{version}", produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun getBlueprintByNameAndVersion( + suspend fun getBlueprintByNameAndVersion( @PathVariable(value = "name") name: String, @PathVariable(value = "version") version: String - ): - Mono> = monoMdc { - var bluePrintModel: BlueprintModelSearch? = bluePrintModelHandler.getBlueprintModelSearchByNameAndVersion(name, version) + ): ResponseEntity = mdcWebCoroutineScope { + val bluePrintModel: BlueprintModelSearch? = + bluePrintModelHandler.getBlueprintModelSearchByNameAndVersion(name, version) if (bluePrintModel != null) ResponseEntity(bluePrintModel, HttpStatus.OK) else @@ -142,11 +142,10 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun downloadBlueprintByNameAndVersion( + suspend fun downloadBlueprintByNameAndVersion( @PathVariable(value = "name") name: String, @PathVariable(value = "version") version: String - ): - Mono> = monoMdc { + ): ResponseEntity = mdcWebCoroutineScope { bluePrintModelHandler.downloadBlueprintModelFileByNameAndVersion(name, version) } @@ -154,17 +153,18 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun getBlueprintModel(@PathVariable(value = "id") id: String): BlueprintModelSearch { - return this.bluePrintModelHandler.getBlueprintModelSearch(id) + suspend fun getBlueprintModel(@PathVariable(value = "id") id: String): BlueprintModelSearch = mdcWebCoroutineScope { + bluePrintModelHandler.getBlueprintModelSearch(id) } @GetMapping("/download/{id}", produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun downloadBluePrint(@PathVariable(value = "id") id: String): Mono> = monoMdc { - bluePrintModelHandler.downloadBlueprintModelFile(id) - } + suspend fun downloadBluePrint(@PathVariable(value = "id") id: String): ResponseEntity = + mdcWebCoroutineScope { + bluePrintModelHandler.downloadBlueprintModelFile(id) + } @PostMapping( "/enrich", produces = [MediaType.APPLICATION_JSON_VALUE], consumes = [MediaType @@ -173,7 +173,7 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun enrichBlueprint(@RequestPart("file") file: FilePart): Mono> = monoMdc { + suspend fun enrichBlueprint(@RequestPart("file") file: FilePart): ResponseEntity = mdcWebCoroutineScope { bluePrintModelHandler.enrichBlueprint(file) } @@ -181,16 +181,17 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint @ResponseBody @Throws(BluePrintException::class) @PreAuthorize("hasRole('USER')") - fun publishBlueprint(@RequestPart("file") file: FilePart): Mono = monoMdc { + suspend fun publishBlueprint(@RequestPart("file") file: FilePart): BlueprintModelSearch = mdcWebCoroutineScope { bluePrintModelHandler.publishBlueprint(file) } @GetMapping("/search/{tags}", produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody @PreAuthorize("hasRole('USER')") - fun searchBlueprintModels(@PathVariable(value = "tags") tags: String): List { - return this.bluePrintModelHandler.searchBlueprintModels(tags) - } + suspend fun searchBlueprintModels(@PathVariable(value = "tags") tags: String): List = + mdcWebCoroutineScope { + bluePrintModelHandler.searchBlueprintModels(tags) + } @DeleteMapping("/name/{name}/version/{version}") @ApiOperation( @@ -199,12 +200,12 @@ open class BlueprintModelController(private val bluePrintModelHandler: BluePrint produces = MediaType.APPLICATION_JSON_VALUE ) @PreAuthorize("hasRole('USER')") - fun deleteBlueprint( + suspend fun deleteBlueprint( @ApiParam(value = "Name of the CBA.", required = true) @PathVariable(value = "name") name: String, @ApiParam(value = "Version of the CBA.", required = true) @PathVariable(value = "version") version: String - ) = monoMdc { + ) = mdcWebCoroutineScope { bluePrintModelHandler.deleteBlueprintModel(name, version) } } diff --git a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ModelTypeController.kt b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ModelTypeController.kt index adeb3cf89..1c550bb3e 100644 --- a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ModelTypeController.kt +++ b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ModelTypeController.kt @@ -17,9 +17,9 @@ package org.onap.ccsdk.cds.blueprintsprocessor.designer.api -import kotlinx.coroutines.runBlocking import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.domain.ModelType import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.handler.ModelTypeHandler +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.mdcWebCoroutineScope import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException import org.springframework.http.MediaType import org.springframework.web.bind.annotation.DeleteMapping @@ -32,34 +32,39 @@ import org.springframework.web.bind.annotation.ResponseBody import org.springframework.web.bind.annotation.RestController @RestController -@RequestMapping(value = arrayOf("/api/v1/model-type")) +@RequestMapping(value = ["/api/v1/model-type"]) open class ModelTypeController(private val modelTypeHandler: ModelTypeHandler) { - @GetMapping(path = arrayOf("/{name}"), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE)) - fun getModelTypeByName(@PathVariable(value = "name") name: String): ModelType? = runBlocking { + @GetMapping(path = ["/{name}"], produces = [MediaType.APPLICATION_JSON_VALUE]) + suspend fun getModelTypeByName(@PathVariable(value = "name") name: String): ModelType? = mdcWebCoroutineScope { modelTypeHandler.getModelTypeByName(name) } - @GetMapping(path = arrayOf("/search/{tags}"), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE)) - fun searchModelTypes(@PathVariable(value = "tags") tags: String): List = runBlocking { + @GetMapping(path = ["/search/{tags}"], produces = [MediaType.APPLICATION_JSON_VALUE]) + suspend fun searchModelTypes(@PathVariable(value = "tags") tags: String): List = mdcWebCoroutineScope { modelTypeHandler.searchModelTypes(tags) } - @GetMapping(path = arrayOf("/by-definition/{definitionType}"), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE)) + @GetMapping(path = ["/by-definition/{definitionType}"], produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody - fun getModelTypeByDefinitionType(@PathVariable(value = "definitionType") definitionType: String): List = runBlocking { - modelTypeHandler.getModelTypeByDefinitionType(definitionType) - } + suspend fun getModelTypeByDefinitionType(@PathVariable(value = "definitionType") definitionType: String): List = + mdcWebCoroutineScope { + modelTypeHandler.getModelTypeByDefinitionType(definitionType) + } - @PostMapping(path = arrayOf(""), produces = arrayOf(MediaType.APPLICATION_JSON_VALUE), consumes = arrayOf(MediaType.APPLICATION_JSON_VALUE)) + @PostMapping( + path = [""], + produces = [MediaType.APPLICATION_JSON_VALUE], + consumes = [MediaType.APPLICATION_JSON_VALUE] + ) @ResponseBody @Throws(BluePrintException::class) - fun saveModelType(@RequestBody modelType: ModelType): ModelType = runBlocking { + suspend fun saveModelType(@RequestBody modelType: ModelType): ModelType = mdcWebCoroutineScope { modelTypeHandler.saveModel(modelType) } - @DeleteMapping(path = arrayOf("/{name}")) - fun deleteModelTypeByName(@PathVariable(value = "name") name: String) = runBlocking { + @DeleteMapping(path = ["/{name}"]) + suspend fun deleteModelTypeByName(@PathVariable(value = "name") name: String) = mdcWebCoroutineScope { modelTypeHandler.deleteByModelName(name) } } diff --git a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ResourceDictionaryController.kt b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ResourceDictionaryController.kt index 75403d479..7f569cfba 100644 --- a/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ResourceDictionaryController.kt +++ b/ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ResourceDictionaryController.kt @@ -16,9 +16,9 @@ package org.onap.ccsdk.cds.blueprintsprocessor.designer.api -import kotlinx.coroutines.runBlocking import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.domain.ResourceDictionary import org.onap.ccsdk.cds.blueprintsprocessor.designer.api.handler.ResourceDictionaryHandler +import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.mdcWebCoroutineScope import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintException import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceSourceMapping @@ -39,50 +39,67 @@ open class ResourceDictionaryController(private val resourceDictionaryHandler: R @GetMapping(path = ["/{name}"], produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody @Throws(BluePrintException::class) - fun getResourceDictionaryByName(@PathVariable(value = "name") name: String): ResourceDictionary = runBlocking { - resourceDictionaryHandler.getResourceDictionaryByName(name) - } + suspend fun getResourceDictionaryByName(@PathVariable(value = "name") name: String): ResourceDictionary = + mdcWebCoroutineScope { + resourceDictionaryHandler.getResourceDictionaryByName(name) + } - @PostMapping(path = [""], produces = [MediaType.APPLICATION_JSON_VALUE], consumes = [MediaType.APPLICATION_JSON_VALUE]) + @PostMapping( + path = [""], + produces = [MediaType.APPLICATION_JSON_VALUE], + consumes = [MediaType.APPLICATION_JSON_VALUE] + ) @ResponseBody @Throws(BluePrintException::class) - fun saveResourceDictionary(@RequestBody dataDictionary: ResourceDictionary): ResourceDictionary = runBlocking { - resourceDictionaryHandler.saveResourceDictionary(dataDictionary) - } + suspend fun saveResourceDictionary(@RequestBody dataDictionary: ResourceDictionary): ResourceDictionary = + mdcWebCoroutineScope { + resourceDictionaryHandler.saveResourceDictionary(dataDictionary) + } - @PostMapping(path = ["/definition"], produces = [MediaType.APPLICATION_JSON_VALUE], consumes = [MediaType.APPLICATION_JSON_VALUE]) + @PostMapping( + path = ["/definition"], + produces = [MediaType.APPLICATION_JSON_VALUE], + consumes = [MediaType.APPLICATION_JSON_VALUE] + ) @ResponseBody @Throws(BluePrintException::class) - fun saveResourceDictionary(@RequestBody resourceDefinition: ResourceDefinition): ResourceDefinition = runBlocking { - resourceDictionaryHandler.saveResourceDefinition(resourceDefinition) - } + suspend fun saveResourceDictionary(@RequestBody resourceDefinition: ResourceDefinition): ResourceDefinition = + mdcWebCoroutineScope { + resourceDictionaryHandler.saveResourceDefinition(resourceDefinition) + } @DeleteMapping(path = ["/{name}"]) - fun deleteResourceDictionaryByName(@PathVariable(value = "name") name: String) = runBlocking { + suspend fun deleteResourceDictionaryByName(@PathVariable(value = "name") name: String) = mdcWebCoroutineScope { resourceDictionaryHandler.deleteResourceDictionary(name) } - @PostMapping(path = ["/by-names"], produces = [MediaType.APPLICATION_JSON_VALUE], consumes = [MediaType.APPLICATION_JSON_VALUE]) + @PostMapping( + path = ["/by-names"], + produces = [MediaType.APPLICATION_JSON_VALUE], + consumes = [MediaType.APPLICATION_JSON_VALUE] + ) @ResponseBody - fun searchResourceDictionaryByNames(@RequestBody names: List): List = runBlocking { - resourceDictionaryHandler.searchResourceDictionaryByNames(names) - } + suspend fun searchResourceDictionaryByNames(@RequestBody names: List): List = + mdcWebCoroutineScope { + resourceDictionaryHandler.searchResourceDictionaryByNames(names) + } @GetMapping(path = ["/search/{tags}"], produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody - fun searchResourceDictionaryByTags(@PathVariable(value = "tags") tags: String): List = runBlocking { - resourceDictionaryHandler.searchResourceDictionaryByTags(tags) - } + suspend fun searchResourceDictionaryByTags(@PathVariable(value = "tags") tags: String): List = + mdcWebCoroutineScope { + resourceDictionaryHandler.searchResourceDictionaryByTags(tags) + } @GetMapping(path = ["/source-mapping"], produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody - fun getResourceSourceMapping(): ResourceSourceMapping = runBlocking { + suspend fun getResourceSourceMapping(): ResourceSourceMapping = mdcWebCoroutineScope { resourceDictionaryHandler.getResourceSourceMapping() } @GetMapping(path = ["/resource_dictionary_group"], produces = [MediaType.APPLICATION_JSON_VALUE]) @ResponseBody - fun getResourceDictionaryDistinct(): List = runBlocking { + suspend fun getResourceDictionaryDistinct(): List = mdcWebCoroutineScope { resourceDictionaryHandler.getResourceDictionaryDistinct() } } -- cgit 1.2.3-korg