1111package eu.ibagroup.formainframe.explorer.ui
1212
1313import com.intellij.openapi.project.Project
14+ import com.intellij.openapi.ui.DialogPanel
1415import com.intellij.openapi.ui.DialogWrapper
16+ import com.intellij.openapi.ui.ValidationInfo
17+ import com.intellij.openapi.ui.validation.DialogValidation
1518import com.intellij.ui.components.JBTextField
1619import com.intellij.ui.dsl.builder.bindText
1720import com.intellij.ui.dsl.builder.panel
@@ -35,9 +38,24 @@ class AddJobsFilterDialog(
3538 lateinit var prefixField: JBTextField
3639 lateinit var ownerField: JBTextField
3740 lateinit var jobIdField: JBTextField
41+ lateinit var dialogPanel: DialogPanel
3842 val sameWidthGroup = " ADD_JOB_FILTER_DIALOG_LABELS_WIDTH_GROUP"
3943
40- return panel {
44+ class ValidatePrefix (
45+ var componentsToIsJobId : List <Pair <JBTextField , Boolean >>
46+ ) : DialogValidation {
47+ override fun validate (): ValidationInfo ? {
48+ dialogPanel.validateAll()
49+ var validationInfo: ValidationInfo ? = null
50+ componentsToIsJobId.forEach { (component, isJobId) ->
51+ validationInfo = validateJobFilter(prefixField.text, ownerField.text, jobIdField.text, state.ws.masks, component, isJobId)
52+ if (validationInfo != null ) return validationInfo
53+ }
54+ return null
55+ }
56+ }
57+
58+ dialogPanel = panel {
4159 row {
4260 label(" JES working set: " )
4361 .widthGroup(sameWidthGroup)
@@ -49,9 +67,6 @@ class AddJobsFilterDialog(
4967 textField()
5068 .bindText(state::prefix)
5169 .also { prefixField = it.component }
52- .validationOnApply {
53- validateJobFilter(it.text, ownerField.text, jobIdField.text, state.ws.masks, it, false )
54- }
5570 .horizontalAlign(HorizontalAlign .FILL )
5671 }
5772 row {
@@ -60,9 +75,6 @@ class AddJobsFilterDialog(
6075 textField()
6176 .bindText(state::owner)
6277 .also { ownerField = it.component }
63- .validationOnApply {
64- validateJobFilter(prefixField.text, it.text, jobIdField.text, state.ws.masks, it, false )
65- }
6678 .horizontalAlign(HorizontalAlign .FILL )
6779 }
6880 row {
@@ -71,11 +83,16 @@ class AddJobsFilterDialog(
7183 textField()
7284 .bindText(state::jobId)
7385 .also { jobIdField = it.component }
74- .validationOnApply {
75- validateJobFilter(prefixField.text, ownerField.text, it.text, state.ws.masks, it, true )
76- }
7786 .horizontalAlign(HorizontalAlign .FILL )
7887 }
7988 }
89+ .apply {
90+ validationsOnInput= mapOf (
91+ prefixField to listOf (ValidatePrefix (listOf (prefixField to false , ownerField to false , jobIdField to true ))),
92+ ownerField to listOf (ValidatePrefix (listOf (ownerField to false , prefixField to false , jobIdField to true ))),
93+ jobIdField to listOf (ValidatePrefix (listOf (jobIdField to true , prefixField to false , ownerField to false )))
94+ )
95+ }
96+ return dialogPanel
8097 }
8198}
0 commit comments