fun validateSctMetadata()

in plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/utils/CodeTransformFileUtils.kt [145:188]


fun validateSctMetadata(sctFile: File?): SqlMetadataValidationResult {
    if (sctFile == null) {
        return SqlMetadataValidationResult(false, message("codemodernizer.chat.message.validation.error.missing_sct_file"))
    }

    val sctMetadata: SctMetadata
    try {
        sctMetadata = XML_MAPPER.readValue<SctMetadata>(sctFile)
    } catch (e: Exception) {
        getLogger<CodeTransformChatController>().error { "Error parsing .sct metadata file; invalid XML encountered: ${e.localizedMessage}" }
        return SqlMetadataValidationResult(false, message("codemodernizer.chat.message.validation.error.invalid_sct"))
    }

    try {
        val projectModel = sctMetadata.instances.projectModel
        val sourceDbServer = projectModel.entities.sources.dbServer
        val sourceVendor = sourceDbServer.vendor.trim().uppercase()
        if (sourceVendor != ORACLE_DB) {
            return SqlMetadataValidationResult(false, message("codemodernizer.chat.message.validation.error.invalid_source_db"))
        }

        val sourceServerName = sourceDbServer.name.trim()

        val targetDbServer = projectModel.entities.targets.dbServer
        val targetVendor = targetDbServer.vendor.trim().uppercase()
        if (targetVendor != AURORA_DB && targetVendor != RDS_DB) {
            return SqlMetadataValidationResult(false, message("codemodernizer.chat.message.validation.error.invalid_target_db"))
        }

        val schemaNames = mutableSetOf<String>()
        projectModel.relations.serverNodeLocation.forEach { serverNodeLocation ->
            val fullNameNodeInfoList = serverNodeLocation.fullNameNodeInfoList.nameParts.fullNameNodeInfo
            fullNameNodeInfoList.forEach { node ->
                if (node.typeNode.lowercase() == "schema") {
                    schemaNames.add(node.nameNode.uppercase())
                }
            }
        }
        return SqlMetadataValidationResult(true, "", sourceVendor, targetVendor, sourceServerName, schemaNames)
    } catch (e: Exception) {
        getLogger<CodeTransformChatController>().error { "Error parsing .sct metadata file: ${e.localizedMessage}" }
        return SqlMetadataValidationResult(false, message("codemodernizer.chat.message.validation.error.invalid_sct"))
    }
}