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
|
||||
|
||||
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.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.plugins.kotlin.ModuleType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components.DropDownComponent
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module.Companion.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES
|
||||
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.panel
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingsList
|
||||
import java.awt.BorderLayout
|
||||
import javax.swing.BorderFactory
|
||||
@@ -19,7 +20,7 @@ import javax.swing.JComponent
|
||||
class ModuleSettingsComponent(valuesReadingContext: ValuesReadingContext) : DynamicComponent(valuesReadingContext) {
|
||||
private val validateModuleName =
|
||||
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 templateComponent = TemplatesComponent(valuesReadingContext).asSubComponent()
|
||||
|
||||
+9
-6
@@ -31,15 +31,18 @@ object StringValidators {
|
||||
else ValidationResult.OK
|
||||
}
|
||||
|
||||
fun shouldBeValidIdentifier(name: String) = settingValidator { value: String ->
|
||||
if (value.any { char -> !char.isLetterOrDigit() && char !in ALLOWED_SPECIAL_CHARS_FOR_IDENTIFIERS })
|
||||
fun shouldBeValidIdentifier(name: String, allowedExtraSymbols: Set<Char>) = settingValidator { value: String ->
|
||||
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(
|
||||
"${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)
|
||||
|
||||
+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.Plugin
|
||||
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.pathParser
|
||||
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) {
|
||||
shouldNotBeBlank()
|
||||
validate(StringValidators.shouldBeValidIdentifier("Group ID", setOf('.', '_')))
|
||||
}
|
||||
val artifactId by stringSetting("Artifact ID", GenerationPhase.PROJECT_GENERATION) {
|
||||
shouldNotBeBlank()
|
||||
validate(StringValidators.shouldBeValidIdentifier("Artifact ID", setOf('_')))
|
||||
}
|
||||
val version by stringSetting("Version", GenerationPhase.PROJECT_GENERATION) {
|
||||
shouldNotBeBlank()
|
||||
validate(StringValidators.shouldBeValidIdentifier("Version", setOf('_', '-', '.')))
|
||||
defaultValue = "1.0-SNAPSHOT"
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -31,7 +31,7 @@ class Module(
|
||||
override val validator: SettingValidator<Module> = settingValidator<Module> { module ->
|
||||
StringValidators.shouldNotBeBlank("Module name").validate(this, module.name)
|
||||
} 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 ->
|
||||
withSettingsOf(module) {
|
||||
configurator.settings.map { setting ->
|
||||
@@ -81,6 +81,8 @@ class Module(
|
||||
}
|
||||
|
||||
companion object {
|
||||
val ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES = setOf('-', '_')
|
||||
|
||||
val parser: Parser<Module> = mapParser { map, path ->
|
||||
val (name) = map.parseValue<String>(path, "name")
|
||||
val identificator = GeneratedIdentificator(name)
|
||||
|
||||
Reference in New Issue
Block a user