From daa58d93cf9225fa2f5807f23c888d90de71bb19 Mon Sep 17 00:00:00 2001 From: ellizio Date: Fri, 22 Aug 2025 15:27:40 +0300 Subject: [PATCH] Improved validation --- .../main/kotlin/ru/ellizio/odatacliui/dialogs/CliDialog.kt | 2 ++ .../kotlin/ru/ellizio/odatacliui/models/CliDialogModel.kt | 2 +- .../odatacliui/models/validators/CliDialogValidators.kt | 7 +++++++ .../ellizio/odatacliui/toolwindows/CliToolWindowManager.kt | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/rider/main/kotlin/ru/ellizio/odatacliui/dialogs/CliDialog.kt b/src/rider/main/kotlin/ru/ellizio/odatacliui/dialogs/CliDialog.kt index e85040e..a846486 100644 --- a/src/rider/main/kotlin/ru/ellizio/odatacliui/dialogs/CliDialog.kt +++ b/src/rider/main/kotlin/ru/ellizio/odatacliui/dialogs/CliDialog.kt @@ -90,6 +90,8 @@ class CliDialog(private val model: CliDialogModel) : BaseDialog(false) { .emptyText(UiBundle.text("cli.filename.empty-text")) .comment(UiBundle.text("cli.filename.comment")) .bindText(model.fileName) + .validationOnInput(CliDialogValidators.fileNameValidator()) + .validationOnApply(CliDialogValidators.fileNameValidator()) } row("--namespace-prefix") { textField() diff --git a/src/rider/main/kotlin/ru/ellizio/odatacliui/models/CliDialogModel.kt b/src/rider/main/kotlin/ru/ellizio/odatacliui/models/CliDialogModel.kt index 2e42e43..7fb843c 100644 --- a/src/rider/main/kotlin/ru/ellizio/odatacliui/models/CliDialogModel.kt +++ b/src/rider/main/kotlin/ru/ellizio/odatacliui/models/CliDialogModel.kt @@ -60,7 +60,7 @@ class CliDialogModel(project: Project, private val actionMetadata: ActionMetadat fun buildODataCliCommand(): GeneralCommandLine = CommandLineBuilder(DotnetToolsUtils.getToolDefaultPath("odata-cli"), "generate") .withParameter("--metadata-uri", metadataUri.get()) .withParameter("--service-name", serviceName.get(), atLeast031) - .withParameter("--file-name", fileName.get()) + .withParameter("--file-name", fileName.get().removeSuffix(".cs")) .withParameter("--custom-headers", customHeaders.get()) .withParameter("--proxy", proxy.get()) .withParameter("--namespace-prefix", namespacePrefix.get()) diff --git a/src/rider/main/kotlin/ru/ellizio/odatacliui/models/validators/CliDialogValidators.kt b/src/rider/main/kotlin/ru/ellizio/odatacliui/models/validators/CliDialogValidators.kt index 37254a3..64ca41f 100644 --- a/src/rider/main/kotlin/ru/ellizio/odatacliui/models/validators/CliDialogValidators.kt +++ b/src/rider/main/kotlin/ru/ellizio/odatacliui/models/validators/CliDialogValidators.kt @@ -30,6 +30,13 @@ object CliDialogValidators { null } + fun fileNameValidator(): ValidationInfoBuilder.(JTextField) -> ValidationInfo? = { + if (it.text.isNotEmpty() && it.text.isBlank()) + error("File name must not be entirely whitespace") + else + null + } + fun namespacePrefixValidator(): ValidationInfoBuilder.(JTextField) -> ValidationInfo? = { if (it.text.isNotEmpty() && !namespacePrefixRegex.matches(it.text)) error("Namespace prefix must be in a valid format") diff --git a/src/rider/main/kotlin/ru/ellizio/odatacliui/toolwindows/CliToolWindowManager.kt b/src/rider/main/kotlin/ru/ellizio/odatacliui/toolwindows/CliToolWindowManager.kt index 0f6076c..1f19de2 100644 --- a/src/rider/main/kotlin/ru/ellizio/odatacliui/toolwindows/CliToolWindowManager.kt +++ b/src/rider/main/kotlin/ru/ellizio/odatacliui/toolwindows/CliToolWindowManager.kt @@ -28,6 +28,7 @@ class CliToolWindowManager(private val project: Project) { fun instantiateConsole(): ConsoleView { val consoleView = TextConsoleBuilderFactory.getInstance().createBuilder(project).console val content = toolWindow.contentManager.factory.createContent(consoleView.component, UiBundle.text("cli.tab.generate"), true) + content.setDisposer(consoleView); toolWindow.contentManager.addContent(content) toolWindow.activate { toolWindow.contentManager.setSelectedContent(content)