override fun actionPerformed()

in jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/actions/DeployServerlessApplicationAction.kt [66:126]


    override fun actionPerformed(e: AnActionEvent) {
        val project = e.getRequiredData(PlatformDataKeys.PROJECT)

        if (!AwsConnectionManager.getInstance(project).isValidConnectionSettings()) {
            notifyNoActiveCredentialsError(project = project)
            return
        }

        ExecutableManager.getInstance().getExecutable<SamExecutable>().thenAccept { samExecutable ->
            if (samExecutable is ExecutableInstance.InvalidExecutable || samExecutable is ExecutableInstance.UnresolvedExecutable) {
                notifySamCliNotValidError(
                    project = project,
                    content = (samExecutable as ExecutableInstance.BadExecutable).validationError
                )
                return@thenAccept
            }

            val templateFile = if (e.place == ExplorerToolWindow.explorerToolWindowPlace) {
                runBlocking(edtContext) {
                    FileChooser.chooseFile(
                        FileChooserDescriptorFactory.createSingleFileDescriptor(YAMLFileType.YML),
                        project,
                        project.guessProjectDir()
                    )
                } ?: return@thenAccept
            } else {
                val file = getSamTemplateFile(e)
                if (file == null) {
                    Exception(message("serverless.application.deploy.toast.template_file_failure"))
                        .notifyError(message("aws.notification.title"), project)
                    return@thenAccept
                }
                file
            }

            validateTemplateFile(project, templateFile)?.let {
                notifyError(content = it, project = project)
                return@thenAccept
            }

            runInEdt {
                // Force save before we deploy
                FileDocumentManager.getInstance().saveAllDocuments()

                val stackDialog = DeployServerlessApplicationDialog(project, templateFile)
                if (!stackDialog.showAndGet()) {
                    SamTelemetry.deploy(
                        project = project,
                        version = SamCommon.getVersionString(),
                        result = Result.Cancelled
                    )
                    return@runInEdt
                }

                val settings = stackDialog.settings()
                saveSettings(project, templateFile, settings)

                continueDeployment(project, templateFile, settings)
            }
        }
    }