override fun handleRequest()

in aws-iotcoredeviceadvisor-suitedefinition/src/main/kotlin/software/amazon/iotcoredeviceadvisor/suitedefinition/UpdateHandler.kt [23:65]


    override fun handleRequest(
        proxy: AmazonWebServicesClientProxy,
        request: ResourceHandlerRequest<ResourceModel>,
        callbackContext: CallbackContext?,
        logger: Logger
    ): ProgressEvent<ResourceModel, CallbackContext?> {
        logger.log("Update SuiteDefinition Request: $request")
        val deviceAdvisorClient = getDeviceAdvisorClient()
        val prevModel = request.previousResourceState
        val model = request.desiredResourceState

        val suiteDefinitionId = prevModel.suiteDefinitionId
        logger.log("Getting SuiteDefinition of id $suiteDefinitionId")

        if (suiteDefinitionId.isNullOrEmpty()) {
            throw ResourceNotFoundException(ResourceModel.TYPE_NAME, null)
        }

        lateinit var suiteDefinition: GetSuiteDefinitionResponse
        try {
            suiteDefinition = getSuiteDefinition(proxy, deviceAdvisorClient, suiteDefinitionId)
        } catch (e: Exception) {
            handleDeviceAdvisorException(e)
        }
        val suiteDefinitionArn = suiteDefinition.suiteDefinitionArn()

        val oldTags = getOldSuiteDefinitionTags(proxy, deviceAdvisorClient, suiteDefinitionId)
        val newTags = tagsFromModel(model.tags)

        val updateRequest: UpdateSuiteDefinitionRequest = UpdateSuiteDefinitionRequest.builder()
            .suiteDefinitionId(suiteDefinitionId)
            .suiteDefinitionConfiguration(convertToSuiteDefinitionConfiguration(model))
            .build()

        try {
            updateTags(oldTags, newTags, suiteDefinitionArn, proxy, deviceAdvisorClient, logger)
            proxy.injectCredentialsAndInvokeV2(updateRequest, deviceAdvisorClient::updateSuiteDefinition)
        } catch (e: Exception) {
            resetTags(oldTags, newTags, suiteDefinitionArn, proxy, deviceAdvisorClient, logger)
            handleDeviceAdvisorException(e)
        }
        return ProgressEvent.defaultSuccessHandler(model)
    }