String updateSecurityProfile()

in aws-iot-securityprofile/src/main/java/com/amazonaws/iot/securityprofile/UpdateHandler.java [83:138]


    String updateSecurityProfile(AmazonWebServicesClientProxy proxy,
                                 ResourceModel model,
                                 Logger logger) {

        // If the desired template has no behaviors, passing an empty list in the behaviors field
        // is not enough. UpdateSecurityProfile needs us to pass a deleteBehaviors=true flag.
        boolean deleteBehaviors;
        Set<software.amazon.awssdk.services.iot.model.Behavior> behaviorsForRequest;
        if (CollectionUtils.isNullOrEmpty(model.getBehaviors())) {
            deleteBehaviors = true;
            behaviorsForRequest = null;
        } else {
            deleteBehaviors = false;
            behaviorsForRequest = Translator.translateBehaviorSetFromCfnToIot(model.getBehaviors());
        }

        // Same for alertTargets
        boolean deleteAlertTargets;
        Map<String, software.amazon.awssdk.services.iot.model.AlertTarget> alertTargetsForRequest;
        if (CollectionUtils.isNullOrEmpty(model.getAlertTargets())) {
            deleteAlertTargets = true;
            alertTargetsForRequest = null;
        } else {
            deleteAlertTargets = false;
            alertTargetsForRequest = Translator.translateAlertTargetMapFromCfnToIot(model.getAlertTargets());
        }

        // Same for additionalMetricsToRetain
        boolean deleteAdditionalMetricsToRetain;
        Set<MetricToRetain> additionalMetricsV2ForRequest;
        if (CollectionUtils.isNullOrEmpty(model.getAdditionalMetricsToRetainV2())) {
            deleteAdditionalMetricsToRetain = true;
            additionalMetricsV2ForRequest = null;
        } else {
            deleteAdditionalMetricsToRetain = false;
            additionalMetricsV2ForRequest = Translator.translateMetricToRetainSetFromCfnToIot(
                    model.getAdditionalMetricsToRetainV2());
        }

        UpdateSecurityProfileRequest updateRequest = UpdateSecurityProfileRequest.builder()
                .securityProfileName(model.getSecurityProfileName())
                .securityProfileDescription(model.getSecurityProfileDescription())
                .behaviors(behaviorsForRequest)
                .alertTargetsWithStrings(alertTargetsForRequest)
                .additionalMetricsToRetainV2(additionalMetricsV2ForRequest)
                .deleteBehaviors(deleteBehaviors)
                .deleteAlertTargets(deleteAlertTargets)
                .deleteAdditionalMetricsToRetain(deleteAdditionalMetricsToRetain)
                .build();

        UpdateSecurityProfileResponse updateResponse = proxy.injectCredentialsAndInvokeV2(
                updateRequest, iotClient::updateSecurityProfile);
        String arn = updateResponse.securityProfileArn();
        logger.log("Called UpdateSecurityProfile for " + arn);
        return arn;
    }