CDS add Swagger annotations for Resource, Template, Dictionary and Config API 42/116242/4
authorPiotr Stanior <piotr.stanior@t-mobile.pl>
Wed, 9 Dec 2020 08:36:03 +0000 (09:36 +0100)
committerKAPIL SINGAL <ks220y@att.com>
Mon, 14 Dec 2020 18:31:15 +0000 (18:31 +0000)
Issue-ID: CCSDK-3014
Change-Id: I380c38cde52a748a9b797c573b7651a766e8b496
Signed-off-by: Piotr Stanior <piotr.stanior@t-mobile.pl>
ms/blueprintsprocessor/application/pom.xml
ms/blueprintsprocessor/functions/config-snapshots/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/config/snapshots/db/ResourceConfigSnapshot.kt
ms/blueprintsprocessor/modules/blueprints/resource-dict/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/resource/dict/ResourceDefinition.kt
ms/blueprintsprocessor/modules/inbounds/configs-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/configs/api/ResourceConfigSnapshotController.kt
ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/ResourceDictionaryController.kt
ms/blueprintsprocessor/modules/inbounds/designer-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/designer/api/domain/ResourceDictionary.kt
ms/blueprintsprocessor/modules/inbounds/resource-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/resource/api/ResourceController.kt
ms/blueprintsprocessor/modules/inbounds/resource-api/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/resource/api/TemplateController.kt

index 2b14433..76d3013 100755 (executable)
                             <springmvc>true</springmvc>
                             <locations>
                                 <location>org.onap.ccsdk.cds.blueprintsprocessor.designer.api.BlueprintModelController</location>
-                                <!-- These locations are not implemented yet
                                 <location>org.onap.ccsdk.cds.blueprintsprocessor.resource.api</location>
                                 <location>org.onap.ccsdk.cds.blueprintsprocessor.configs.api</location>
+                                <!-- This location is not implemented yet
                                 <location>org.onap.ccsdk.cds.blueprintsprocessor.healthapi</location>
                                 -->
                             </locations>
index 7df5ea1..a260d32 100644 (file)
@@ -50,7 +50,7 @@ class ResourceConfigSnapshot : Serializable {
     @Column(name = "resource_type", nullable = false)
     var resourceType: String? = null
 
-    @get:ApiModelProperty(value = "ID associated with the resource type in the inventory system.", required = true)
+    @get:ApiModelProperty(value = "ID associated with the resource type in the inventory system.", required = true, example = "\"1\"")
     @Column(name = "resource_id", nullable = false)
     var resourceId: String? = null
 
@@ -58,7 +58,7 @@ class ResourceConfigSnapshot : Serializable {
     @Column(name = "status", nullable = false)
     var status: Status? = null
 
-    @get:ApiModelProperty(value = "Snapshot of the resource as retrieved from resource.", required = true)
+    @get:ApiModelProperty(value = "Snapshot of the resource as retrieved from resource.", required = true, example = "\"config_snapshot\"")
     @Lob
     @Column(name = "config_snapshot", nullable = false)
     var config_snapshot: String? = null
index 556f4a3..2e7e182 100644 (file)
@@ -20,29 +20,37 @@ package org.onap.ccsdk.cds.controllerblueprints.resource.dict
 import com.fasterxml.jackson.annotation.JsonFormat
 import com.fasterxml.jackson.annotation.JsonProperty
 import com.fasterxml.jackson.databind.JsonNode
+import io.swagger.annotations.ApiModel
+import io.swagger.annotations.ApiModelProperty
 import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate
 import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
 import java.io.Serializable
 import java.util.Date
 
+@ApiModel
 open class ResourceDefinition {
 
     @JsonProperty(value = "name", required = true)
+    @ApiModelProperty(value = "Name", required = true, example = "\"default-source\"")
     lateinit var name: String
 
     @JsonProperty(value = "property", required = true)
+    @ApiModelProperty(value = "Property", required = true)
     lateinit var property: PropertyDefinition
 
     var tags: String? = null
 
     /** The default group for Resource Definition is "default" */
     @JsonProperty(value = "group", required = true)
+    @ApiModelProperty(value = "Group", required = true, example = "\"default\"")
     var group: String = "default"
 
     @JsonProperty(value = "updated-by")
+    @ApiModelProperty(value = "Updated by", required = true, example = "\"example@onap.com\"")
     lateinit var updatedBy: String
 
     @JsonProperty(value = "sources", required = true)
+    @ApiModelProperty(value = "Sources", required = true, example = "\"sources\"")
     lateinit var sources: MutableMap<String, NodeTemplate>
 }
 
index d285fe5..584df27 100644 (file)
@@ -48,7 +48,7 @@ import org.springframework.web.bind.annotation.RestController
 @RestController
 @RequestMapping("/api/v1/configs")
 @Api(
-    value = "/api/v1/configs",
+    value = "Resource configuration",
     description = "Interaction with stored configurations."
 )
 open class ResourceConfigSnapshotController(private val resourceConfigSnapshotService: ResourceConfigSnapshotService) {
@@ -67,7 +67,6 @@ open class ResourceConfigSnapshotController(private val resourceConfigSnapshotSe
     }
 
     @RequestMapping(
-        path = [""],
         method = [RequestMethod.GET],
         produces = [MediaType.TEXT_PLAIN_VALUE, MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE]
     )
@@ -79,10 +78,10 @@ open class ResourceConfigSnapshotController(private val resourceConfigSnapshotSe
     @ResponseBody
     @PreAuthorize("hasRole('USER')")
     fun get(
-        @ApiParam(value = "Resource Type associated of the resource configuration snapshot.", required = false)
+        @ApiParam(value = "Resource Type associated of the resource configuration snapshot.", required = false, example = "\"PNF\"")
         @RequestParam(value = "resourceType", required = true) resourceType: String,
 
-        @ApiParam(value = "Resource Id associated of the resource configuration snapshot.", required = false)
+        @ApiParam(value = "Resource Id associated of the resource configuration snapshot.", required = false, example = "\"1\"")
         @RequestParam(value = "resourceId", required = true) resourceId: String,
 
         @ApiParam(value = "Status of the snapshot being retrieved.", defaultValue = "RUNNING", required = false)
@@ -142,18 +141,18 @@ open class ResourceConfigSnapshotController(private val resourceConfigSnapshotSe
         value = "Store a resource configuration snapshot identified by resourceId, resourceType, status.",
         notes = "Store a resource configuration snapshot, identified by its resourceId and resourceType, " +
             "and optionally its status, either RUNNING or CANDIDATE.",
-        response = ResourceConfigSnapshot::class, produces = MediaType.APPLICATION_JSON_VALUE
+        response = ResourceConfigSnapshot::class
     )
     @ResponseBody
     @PreAuthorize("hasRole('USER')")
     fun postWithResourceIdAndResourceType(
-        @ApiParam(value = "Resource Type associated with the resolution.", required = false)
+        @ApiParam(value = "Resource Type associated with the resolution.", required = false, example = "\"PNF\"")
         @PathVariable(value = "resourceType", required = true) resourceType: String,
-        @ApiParam(value = "Resource Id associated with the resolution.", required = false)
+        @ApiParam(value = "Resource Id associated with the resolution.", required = false, example = "\"1\"")
         @PathVariable(value = "resourceId", required = true) resourceId: String,
         @ApiParam(value = "Status of the snapshot being retrieved.", defaultValue = "RUNNING", required = true)
         @PathVariable(value = "status", required = true) status: String,
-        @ApiParam(value = "Config snapshot to store.", required = true)
+        @ApiParam(value = "Config snapshot to store.", required = true, example = "\"config_snapshot\"")
         @RequestBody snapshot: String
     ): ResponseEntity<ResourceConfigSnapshot> = runBlocking {
 
@@ -178,7 +177,7 @@ open class ResourceConfigSnapshotController(private val resourceConfigSnapshotSe
     @ResponseBody
     @PreAuthorize("hasRole('USER')")
     fun getAllByID(
-        @ApiParam(value = "Resource Id associated of the resource configuration snapshots.", required = false)
+        @ApiParam(value = "Resource Id associated of the resource configuration snapshots.", required = false, example = "\"1\"")
         @RequestParam(value = "resourceId", required = true) resourceId: String,
         @ApiParam(value = "Status of the snapshot being retrieved.", defaultValue = "ANY", required = false)
         @RequestParam(value = "status", required = false, defaultValue = "ANY") status: String
@@ -223,7 +222,7 @@ open class ResourceConfigSnapshotController(private val resourceConfigSnapshotSe
     @ResponseBody
     @PreAuthorize("hasRole('USER')")
     fun getAllByType(
-        @ApiParam(value = "Resource Type associated of the resource configuration snapshot.", required = false)
+        @ApiParam(value = "Resource Type associated of the resource configuration snapshot.", required = false, example = "\"PNF\"")
         @RequestParam(value = "resourceType", required = true) resourceType: String,
         @ApiParam(value = "Status of the snapshot being retrieved.", defaultValue = "ANY", required = false)
         @RequestParam(value = "status", required = false, defaultValue = "ANY") status: String
index 7f569cf..1dcfa2f 100644 (file)
@@ -16,6 +16,9 @@
 
 package org.onap.ccsdk.cds.blueprintsprocessor.designer.api
 
+import io.swagger.annotations.Api
+import io.swagger.annotations.ApiOperation
+import io.swagger.annotations.ApiParam
 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
@@ -34,24 +37,43 @@ import org.springframework.web.bind.annotation.RestController
 
 @RestController
 @RequestMapping(value = ["/api/v1/dictionary"])
+@Api(
+    value = "Resource dictionary",
+    description = "Interaction with stored dictionaries."
+)
 open class ResourceDictionaryController(private val resourceDictionaryHandler: ResourceDictionaryHandler) {
 
     @GetMapping(path = ["/{name}"], produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ApiOperation(
+        value = "Retrieve a resource dictionary.",
+        notes = "Retrieve a resource dictionary by name provided.",
+        response = ResourceDictionary::class
+    )
     @ResponseBody
     @Throws(BluePrintException::class)
-    suspend fun getResourceDictionaryByName(@PathVariable(value = "name") name: String): ResourceDictionary =
+    suspend fun getResourceDictionaryByName(
+        @ApiParam(value = "Name of the resource.", required = true, example = "\"hostname\"")
+        @PathVariable(value = "name") name: String
+    ): ResourceDictionary =
         mdcWebCoroutineScope {
             resourceDictionaryHandler.getResourceDictionaryByName(name)
         }
 
     @PostMapping(
-        path = [""],
         produces = [MediaType.APPLICATION_JSON_VALUE],
         consumes = [MediaType.APPLICATION_JSON_VALUE]
     )
+    @ApiOperation(
+        value = "Saves a resource dictionary.",
+        notes = "Saves a resource dictionary by dictionary provided.",
+        response = ResourceDictionary::class
+    )
     @ResponseBody
     @Throws(BluePrintException::class)
-    suspend fun saveResourceDictionary(@RequestBody dataDictionary: ResourceDictionary): ResourceDictionary =
+    suspend fun saveResourceDictionary(
+        @ApiParam(value = "Resource dictionary to store.", required = true)
+        @RequestBody dataDictionary: ResourceDictionary
+    ): ResourceDictionary =
         mdcWebCoroutineScope {
             resourceDictionaryHandler.saveResourceDictionary(dataDictionary)
         }
@@ -61,15 +83,31 @@ open class ResourceDictionaryController(private val resourceDictionaryHandler: R
         produces = [MediaType.APPLICATION_JSON_VALUE],
         consumes = [MediaType.APPLICATION_JSON_VALUE]
     )
+    @ApiOperation(
+        value = "Saves a resource dictionary.",
+        notes = "Saves a resource dictionary by resource definition provided.",
+        nickname = "ResourceDictionaryController_saveResourceDictionary_1_POST.org.onap.ccsdk.cds.blueprintsprocessor.designer.api",
+        response = ResourceDefinition::class
+    )
     @ResponseBody
     @Throws(BluePrintException::class)
-    suspend fun saveResourceDictionary(@RequestBody resourceDefinition: ResourceDefinition): ResourceDefinition =
+    suspend fun saveResourceDictionary(
+        @ApiParam(value = "Resource definition to generate.", required = true)
+        @RequestBody resourceDefinition: ResourceDefinition
+    ): ResourceDefinition =
         mdcWebCoroutineScope {
             resourceDictionaryHandler.saveResourceDefinition(resourceDefinition)
         }
 
     @DeleteMapping(path = ["/{name}"])
-    suspend fun deleteResourceDictionaryByName(@PathVariable(value = "name") name: String) = mdcWebCoroutineScope {
+    @ApiOperation(
+        value = "Removes a resource dictionary.",
+        notes = "Removes a resource dictionary by name provided."
+    )
+    suspend fun deleteResourceDictionaryByName(
+        @ApiParam(value = "Name of the resource.", required = true)
+        @PathVariable(value = "name") name: String
+    ) = mdcWebCoroutineScope {
         resourceDictionaryHandler.deleteResourceDictionary(name)
     }
 
@@ -78,26 +116,55 @@ open class ResourceDictionaryController(private val resourceDictionaryHandler: R
         produces = [MediaType.APPLICATION_JSON_VALUE],
         consumes = [MediaType.APPLICATION_JSON_VALUE]
     )
+    @ApiOperation(
+        value = "Searches for a resource dictionary.",
+        notes = "Searches for a resource dictionary by names provided.",
+        responseContainer = "List",
+        response = ResourceDictionary::class
+    )
     @ResponseBody
-    suspend fun searchResourceDictionaryByNames(@RequestBody names: List<String>): List<ResourceDictionary> =
+    suspend fun searchResourceDictionaryByNames(
+        @ApiParam(value = "List of names.", required = true)
+        @RequestBody names: List<String>
+    ): List<ResourceDictionary> =
         mdcWebCoroutineScope {
             resourceDictionaryHandler.searchResourceDictionaryByNames(names)
         }
 
     @GetMapping(path = ["/search/{tags}"], produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ApiOperation(
+        value = "Searches for a resource dictionary.",
+        notes = "Searches for a resource dictionary by tags provided.",
+        responseContainer = "List",
+        response = ResourceDictionary::class
+    )
     @ResponseBody
-    suspend fun searchResourceDictionaryByTags(@PathVariable(value = "tags") tags: String): List<ResourceDictionary> =
+    suspend fun searchResourceDictionaryByTags(
+        @ApiParam(value = "Tags list.", required = true, example = "\"status\"")
+        @PathVariable(value = "tags") tags: String
+    ): List<ResourceDictionary> =
         mdcWebCoroutineScope {
             resourceDictionaryHandler.searchResourceDictionaryByTags(tags)
         }
 
     @GetMapping(path = ["/source-mapping"], produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ApiOperation(
+        value = "Searches for a source mapping.",
+        notes = "Searches for a source mapping.",
+        response = ResourceSourceMapping::class
+    )
     @ResponseBody
     suspend fun getResourceSourceMapping(): ResourceSourceMapping = mdcWebCoroutineScope {
         resourceDictionaryHandler.getResourceSourceMapping()
     }
 
     @GetMapping(path = ["/resource_dictionary_group"], produces = [MediaType.APPLICATION_JSON_VALUE])
+    @ApiOperation(
+        value = "Retrieve all resource dictionary groups.",
+        notes = "Retrieve all resource dictionary groups.",
+        responseContainer = "List",
+        response = String::class
+    )
     @ResponseBody
     suspend fun getResourceDictionaryDistinct(): List<String> = mdcWebCoroutineScope {
         resourceDictionaryHandler.getResourceDictionaryDistinct()
index eaa63dd..5dac6b5 100644 (file)
@@ -17,6 +17,7 @@
 package org.onap.ccsdk.cds.blueprintsprocessor.designer.api.domain
 
 import com.fasterxml.jackson.annotation.JsonFormat
+import io.swagger.annotations.ApiModel
 import io.swagger.annotations.ApiModelProperty
 import org.onap.ccsdk.cds.controllerblueprints.resource.dict.ResourceDefinition
 import org.springframework.data.annotation.LastModifiedDate
@@ -40,40 +41,42 @@ import javax.persistence.TemporalType
  * @version 1.0
  */
 @EntityListeners(AuditingEntityListener::class)
+@ApiModel
 @Entity
 @Table(name = "RESOURCE_DICTIONARY")
 class ResourceDictionary : Serializable {
 
     @Id
     @Column(name = "name", nullable = false)
-    @ApiModelProperty(required = true)
+    @ApiModelProperty(value = "Name", required = true, example = "\"sample-db-source\"")
     lateinit var name: String
 
     @Column(name = "data_type", nullable = false)
-    @ApiModelProperty(required = true)
+    @ApiModelProperty(value = "Data type", required = true, example = "\"string\"")
     lateinit var dataType: String
 
     @Column(name = "entry_schema")
+    @ApiModelProperty(value = "Entry schema", required = true, example = "\"dt-license-key\"")
     var entrySchema: String? = null
 
     @Column(name = "resource_dictionary_group")
-    @ApiModelProperty(required = true)
+    @ApiModelProperty(value = "Resource dictionary group", required = true, example = "\"default\"")
     var resourceDictionaryGroup: String? = null
 
     @Lob
     @Convert(converter = JpaResourceDefinitionConverter::class)
     @Column(name = "definition", nullable = false)
-    @ApiModelProperty(required = true)
+    @ApiModelProperty(value = "Definition", required = true)
     lateinit var definition: ResourceDefinition
 
     @Lob
     @Column(name = "description", nullable = false)
-    @ApiModelProperty(required = true)
+    @ApiModelProperty(value = "Description", required = true, example = "\"demo_artifacts_version\"")
     lateinit var description: String
 
     @Lob
     @Column(name = "tags", nullable = false)
-    @ApiModelProperty(required = true)
+    @ApiModelProperty(value = "Tags", required = true, example = "\"hostname\"")
     lateinit var tags: String
 
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
@@ -83,7 +86,7 @@ class ResourceDictionary : Serializable {
     var creationDate: Date? = null
 
     @Column(name = "updated_by", nullable = false)
-    @ApiModelProperty(required = true)
+    @ApiModelProperty(value = "Updated by", required = true, example = "\"username\"")
     lateinit var updatedBy: String
 
     override fun toString(): String {
index e7c11e3..3c18ba4 100644 (file)
@@ -38,7 +38,7 @@ import org.springframework.web.bind.annotation.RestController
 @RestController
 @RequestMapping("/api/v1/resources")
 @Api(
-    value = "/api/v1/resources",
+    value = "Resources",
     description = "Interaction with resolved resources."
 )
 open class ResourceController(private var resourceResolutionDBService: ResourceResolutionDBService) {
@@ -116,8 +116,7 @@ open class ResourceController(private var resourceResolutionDBService: ResourceR
     )
     @ApiOperation(
         value = "Delete resources using resolution key",
-        notes = "Delete all the resources associated to a resolution-key using blueprint metadata, artifact name and the resolution-key.",
-        produces = MediaType.APPLICATION_JSON_VALUE
+        notes = "Delete all the resources associated to a resolution-key using blueprint metadata, artifact name and the resolution-key."
     )
     @PreAuthorize("hasRole('USER')")
     fun deleteByBlueprintNameAndBlueprintVersionAndArtifactNameAndResolutionKey(
@@ -148,8 +147,7 @@ open class ResourceController(private var resourceResolutionDBService: ResourceR
     )
     @ApiOperation(
         value = "Fetch a resource value using resolution key.",
-        notes = "Retrieve a stored resource value using the blueprint metadata, artifact name, resolution-key along with the name of the resource value to retrieve.",
-        produces = MediaType.APPLICATION_JSON_VALUE
+        notes = "Retrieve a stored resource value using the blueprint metadata, artifact name, resolution-key along with the name of the resource value to retrieve."
     )
     @ResponseBody
     @PreAuthorize("hasRole('USER')")
index b56a63b..b80e81c 100644 (file)
@@ -47,7 +47,7 @@ import org.springframework.web.bind.annotation.RestController
 @RestController
 @RequestMapping("/api/v1/template")
 @Api(
-    value = "/api/v1/template",
+    value = "Resource template",
     description = "Interaction with resolved template."
 )
 open class TemplateController(private val templateResolutionService: TemplateResolutionService) {
@@ -146,8 +146,7 @@ open class TemplateController(private val templateResolutionService: TemplateRes
         value = "Store a resolved template w/ resolution-key",
         notes = "Store a template for a given CBA's action, identified by its blueprint name, blueprint version, " +
             "artifact name and resolution key.",
-        response = TemplateResolution::class,
-        produces = MediaType.APPLICATION_JSON_VALUE
+        response = TemplateResolution::class
     )
     @ResponseBody
     @PreAuthorize("hasRole('USER')")
@@ -178,8 +177,7 @@ open class TemplateController(private val templateResolutionService: TemplateRes
         value = "Store a resolved template w/ resourceId and resourceType",
         notes = "Store a template for a given CBA's action, identified by its blueprint name, blueprint version, " +
             "artifact name, resourceId and resourceType.",
-        response = TemplateResolution::class,
-        produces = MediaType.APPLICATION_JSON_VALUE
+        response = TemplateResolution::class
     )
     @ResponseBody
     @PreAuthorize("hasRole('USER')")