Wizard: add validators for POM data
This commit is contained in:
+8
-7
@@ -1,16 +1,17 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep
|
package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep
|
||||||
|
|
||||||
import com.intellij.ui.components.JBTabbedPane
|
import com.intellij.ui.components.JBTabbedPane
|
||||||
import com.intellij.ui.components.panels.VerticalLayout
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.configuratorSettings
|
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.configuratorSettings
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.*
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module.Companion.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.DropDownComponent
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.UiConstants
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.TextFieldComponent
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.TextFieldComponent
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.panel
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingsList
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingsList
|
||||||
import java.awt.BorderLayout
|
import java.awt.BorderLayout
|
||||||
import javax.swing.BorderFactory
|
import javax.swing.BorderFactory
|
||||||
@@ -19,7 +20,7 @@ import javax.swing.JComponent
|
|||||||
class ModuleSettingsComponent(valuesReadingContext: ValuesReadingContext) : DynamicComponent(valuesReadingContext) {
|
class ModuleSettingsComponent(valuesReadingContext: ValuesReadingContext) : DynamicComponent(valuesReadingContext) {
|
||||||
private val validateModuleName =
|
private val validateModuleName =
|
||||||
StringValidators.shouldNotBeBlank("Module name") and
|
StringValidators.shouldNotBeBlank("Module name") and
|
||||||
StringValidators.shouldBeValidIdentifier("Module Name")
|
StringValidators.shouldBeValidIdentifier("Module Name", ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES)
|
||||||
|
|
||||||
private val moduleConfiguratorSettingsList = SettingsList(emptyList(), valuesReadingContext).asSubComponent()
|
private val moduleConfiguratorSettingsList = SettingsList(emptyList(), valuesReadingContext).asSubComponent()
|
||||||
private val templateComponent = TemplatesComponent(valuesReadingContext).asSubComponent()
|
private val templateComponent = TemplatesComponent(valuesReadingContext).asSubComponent()
|
||||||
|
|||||||
+9
-6
@@ -31,15 +31,18 @@ object StringValidators {
|
|||||||
else ValidationResult.OK
|
else ValidationResult.OK
|
||||||
}
|
}
|
||||||
|
|
||||||
fun shouldBeValidIdentifier(name: String) = settingValidator { value: String ->
|
fun shouldBeValidIdentifier(name: String, allowedExtraSymbols: Set<Char>) = settingValidator { value: String ->
|
||||||
if (value.any { char -> !char.isLetterOrDigit() && char !in ALLOWED_SPECIAL_CHARS_FOR_IDENTIFIERS })
|
if (value.any { char -> !char.isLetterOrDigit() && char !in allowedExtraSymbols }) {
|
||||||
|
val allowedExtraSymbolsStringified = allowedExtraSymbols
|
||||||
|
.takeIf { it.isNotEmpty() }
|
||||||
|
?.joinToString(separator = ", ") { char -> "'$char'" }
|
||||||
|
?.let { chars -> ", and symbols: $chars" }
|
||||||
|
.orEmpty()
|
||||||
ValidationResult.ValidationError(
|
ValidationResult.ValidationError(
|
||||||
"${name.capitalize()} should consist only of letters, digits, '_', or '-'"
|
"${name.capitalize()} should consist only of letters, digits$allowedExtraSymbolsStringified"
|
||||||
)
|
)
|
||||||
else ValidationResult.OK
|
} else ValidationResult.OK
|
||||||
}
|
}
|
||||||
|
|
||||||
private val ALLOWED_SPECIAL_CHARS_FOR_IDENTIFIERS = setOf('_', '-')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun List<ValidationResult>.fold() = fold(ValidationResult.OK, ValidationResult::and)
|
fun List<ValidationResult>.fold() = fold(ValidationResult.OK, ValidationResult::and)
|
||||||
|
|||||||
+4
@@ -3,6 +3,7 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins
|
|||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
import org.jetbrains.kotlin.tools.projectWizard.core.Plugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
|
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.pathParser
|
import org.jetbrains.kotlin.tools.projectWizard.core.pathParser
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
||||||
@@ -19,12 +20,15 @@ class StructurePlugin(context: Context) : Plugin(context) {
|
|||||||
|
|
||||||
val groupId by stringSetting("Group ID", GenerationPhase.PROJECT_GENERATION) {
|
val groupId by stringSetting("Group ID", GenerationPhase.PROJECT_GENERATION) {
|
||||||
shouldNotBeBlank()
|
shouldNotBeBlank()
|
||||||
|
validate(StringValidators.shouldBeValidIdentifier("Group ID", setOf('.', '_')))
|
||||||
}
|
}
|
||||||
val artifactId by stringSetting("Artifact ID", GenerationPhase.PROJECT_GENERATION) {
|
val artifactId by stringSetting("Artifact ID", GenerationPhase.PROJECT_GENERATION) {
|
||||||
shouldNotBeBlank()
|
shouldNotBeBlank()
|
||||||
|
validate(StringValidators.shouldBeValidIdentifier("Artifact ID", setOf('_')))
|
||||||
}
|
}
|
||||||
val version by stringSetting("Version", GenerationPhase.PROJECT_GENERATION) {
|
val version by stringSetting("Version", GenerationPhase.PROJECT_GENERATION) {
|
||||||
shouldNotBeBlank()
|
shouldNotBeBlank()
|
||||||
|
validate(StringValidators.shouldBeValidIdentifier("Version", setOf('_', '-', '.')))
|
||||||
defaultValue = "1.0-SNAPSHOT"
|
defaultValue = "1.0-SNAPSHOT"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -31,7 +31,7 @@ class Module(
|
|||||||
override val validator: SettingValidator<Module> = settingValidator<Module> { module ->
|
override val validator: SettingValidator<Module> = settingValidator<Module> { module ->
|
||||||
StringValidators.shouldNotBeBlank("Module name").validate(this, module.name)
|
StringValidators.shouldNotBeBlank("Module name").validate(this, module.name)
|
||||||
} and settingValidator { module ->
|
} and settingValidator { module ->
|
||||||
StringValidators.shouldBeValidIdentifier("Module name `$name`").validate(this, module.name)
|
StringValidators.shouldBeValidIdentifier("Module name `$name`", ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES).validate(this, module.name)
|
||||||
} and settingValidator { module ->
|
} and settingValidator { module ->
|
||||||
withSettingsOf(module) {
|
withSettingsOf(module) {
|
||||||
configurator.settings.map { setting ->
|
configurator.settings.map { setting ->
|
||||||
@@ -81,6 +81,8 @@ class Module(
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
val ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES = setOf('-', '_')
|
||||||
|
|
||||||
val parser: Parser<Module> = mapParser { map, path ->
|
val parser: Parser<Module> = mapParser { map, path ->
|
||||||
val (name) = map.parseValue<String>(path, "name")
|
val (name) = map.parseValue<String>(path, "name")
|
||||||
val identificator = GeneratedIdentificator(name)
|
val identificator = GeneratedIdentificator(name)
|
||||||
|
|||||||
Reference in New Issue
Block a user