Skip to content

Commit 49ccd6c

Browse files
committed
Add ValidatableDialog class
1 parent 255af39 commit 49ccd6c

File tree

4 files changed

+72
-19
lines changed

4 files changed

+72
-19
lines changed

src/main/java/com/redhat/devtools/lsp4ij/launching/ui/NewLanguageServerDialog.java

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
import com.intellij.openapi.project.Project;
1414
import com.intellij.openapi.ui.ComboBox;
15-
import com.intellij.openapi.ui.DialogWrapper;
1615
import com.intellij.openapi.ui.ValidationInfo;
1716
import com.intellij.ui.DocumentAdapter;
1817
import com.intellij.ui.SimpleListCellRenderer;
@@ -25,6 +24,7 @@
2524
import com.redhat.devtools.lsp4ij.launching.templates.LanguageServerTemplateManager;
2625
import com.redhat.devtools.lsp4ij.server.definition.launching.UserDefinedLanguageServerDefinition;
2726
import com.redhat.devtools.lsp4ij.settings.ui.LanguageServerPanel;
27+
import com.redhat.devtools.lsp4ij.settings.ui.ValidatableDialog;
2828
import org.jetbrains.annotations.NotNull;
2929
import org.jetbrains.annotations.Nullable;
3030

@@ -39,7 +39,7 @@
3939
/**
4040
* New language server dialog.
4141
*/
42-
public class NewLanguageServerDialog extends DialogWrapper {
42+
public class NewLanguageServerDialog extends ValidatableDialog {
4343

4444
private final ComboBox<LanguageServerTemplate> templateCombo = new ComboBox<>(new DefaultComboBoxModel<>(getLanguageServerTemplates()));
4545
private final Project project;
@@ -69,7 +69,7 @@ public NewLanguageServerDialog(@NotNull Project project) {
6969
// Template combo
7070
createTemplateCombo(builder);
7171
// Create server name, command line, mappings, configuration UI
72-
this.languageServerPanel = new LanguageServerPanel(builder, null, LanguageServerPanel.EditionMode.NEW_USER_DEFINED);
72+
this.languageServerPanel = new LanguageServerPanel(builder, null, LanguageServerPanel.EditionMode.NEW_USER_DEFINED, this);
7373

7474
// Add validation
7575
addValidator(this.languageServerPanel.getServerName());
@@ -164,20 +164,9 @@ public JComponent getPreferredFocusedComponent() {
164164

165165
@Override
166166
protected @NotNull List<ValidationInfo> doValidateAll() {
167-
List<ValidationInfo> validations = new ArrayList<>();
168-
addValidationInfo(this.languageServerPanel.getCommandLine().getValidationInfo(), validations);
169-
addValidationInfo(this.languageServerPanel.getServerName().getValidationInfo(), validations);
170-
return validations;
167+
return languageServerPanel.doValidateAll();
171168
}
172169

173-
private void addValidationInfo(ValidationInfo validationInfo, List<ValidationInfo> validations) {
174-
if (validationInfo == null) {
175-
return;
176-
}
177-
validations.add((validationInfo));
178-
}
179-
180-
181170
@Override
182171
protected void doOKAction() {
183172
super.doOKAction();

src/main/java/com/redhat/devtools/lsp4ij/settings/LanguageServerView.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.redhat.devtools.lsp4ij.server.definition.launching.UserDefinedLanguageServerDefinition;
3434
import com.redhat.devtools.lsp4ij.settings.ui.LanguageServerPanel;
3535
import com.redhat.devtools.lsp4ij.settings.ui.ServerMappingsPanel;
36+
import com.redhat.devtools.lsp4ij.settings.ui.ValidatableDialog;
3637
import org.jetbrains.annotations.NotNull;
3738
import org.jetbrains.annotations.Nullable;
3839

@@ -51,7 +52,7 @@
5152
* <li>Suspend and wait for a debugger?</li>
5253
* </ul>
5354
*/
54-
public class LanguageServerView extends DialogWrapper implements Disposable {
55+
public class LanguageServerView extends ValidatableDialog implements Disposable {
5556

5657
private final LanguageServerNameProvider languageServerNameProvider;
5758

@@ -71,7 +72,7 @@ public LanguageServerView(@NotNull LanguageServerDefinition languageServerDefini
7172
@Nullable LanguageServerNameProvider languageServerNameProvider,
7273
@NotNull Project project
7374
) {
74-
super(true);
75+
super(project);
7576
this.languageServerDefinition = languageServerDefinition;
7677
this.languageServerNameProvider = languageServerNameProvider;
7778
this.project = project;
@@ -288,7 +289,7 @@ private JPanel createSettings(JComponent description, boolean launchingServerDef
288289
this.languageServerPanel = new LanguageServerPanel(builder,
289290
description,
290291
launchingServerDefinition ? LanguageServerPanel.EditionMode.EDIT_USER_DEFINED :
291-
LanguageServerPanel.EditionMode.EDIT_EXTENSION);
292+
LanguageServerPanel.EditionMode.EDIT_EXTENSION, this);
292293
this.mappingPanel = languageServerPanel.getMappingsPanel();
293294
return builder
294295
.addComponentFillVertically(new JPanel(), 50)

src/main/java/com/redhat/devtools/lsp4ij/settings/ui/LanguageServerPanel.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import com.intellij.ide.BrowserUtil;
1414
import com.intellij.openapi.ui.ComboBox;
15+
import com.intellij.openapi.ui.ValidationInfo;
1516
import com.intellij.ui.*;
1617
import com.intellij.ui.components.JBCheckBox;
1718
import com.intellij.ui.components.JBScrollPane;
@@ -25,7 +26,11 @@
2526
import org.jetbrains.annotations.NotNull;
2627

2728
import javax.swing.*;
29+
import javax.swing.event.DocumentEvent;
30+
import javax.swing.text.JTextComponent;
2831
import java.awt.*;
32+
import java.util.ArrayList;
33+
import java.util.List;
2934

3035
/**
3136
* Language server panel which show information about language server in several tabs:
@@ -56,8 +61,10 @@ public enum EditionMode {
5661
private LanguageServerConfigurationWidget configurationWidget;
5762

5863
private LanguageServerInitializationOptionsWidget initializationOptionsWidget;
64+
private final ValidatableDialog dialogWrapper;
5965

60-
public LanguageServerPanel(FormBuilder builder, JComponent description, EditionMode mode) {
66+
public LanguageServerPanel(FormBuilder builder, JComponent description, EditionMode mode, ValidatableDialog dialogWrapper) {
67+
this.dialogWrapper = dialogWrapper;
6168
createUI(builder, description, mode);
6269
}
6370

@@ -75,6 +82,13 @@ private void createUI(FormBuilder builder, JComponent description, EditionMode m
7582
}
7683
// Debug tab
7784
addDebugTab(tabbedPane, mode);
85+
86+
// Add validation
87+
var serverName = getServerName();
88+
if (serverName != null) {
89+
addValidator(serverName);
90+
}
91+
addValidator(getCommandLine());
7892
}
7993

8094
private void addServerTab(JBTabbedPane tabbedPane, JComponent description, EditionMode mode) {
@@ -229,4 +243,34 @@ public ComboBox<ServerTrace> getServerTraceComboBox() {
229243
public ComboBox<ErrorReportingKind> getErrorReportingKindCombo() {
230244
return errorReportingKindCombo;
231245
}
246+
247+
public @NotNull List<ValidationInfo> doValidateAll() {
248+
List<ValidationInfo> validations = new ArrayList<>();
249+
var serverName = getServerName();
250+
if (serverName != null) {
251+
addValidationInfo(serverName.getValidationInfo(), validations);
252+
}
253+
var commandLine = getCommandLine();
254+
if (commandLine != null) {
255+
addValidationInfo(commandLine.getValidationInfo(), validations);
256+
}
257+
return validations;
258+
}
259+
260+
private void addValidationInfo(ValidationInfo validationInfo, List<ValidationInfo> validations) {
261+
if (validationInfo == null) {
262+
return;
263+
}
264+
validations.add((validationInfo));
265+
}
266+
267+
268+
private void addValidator(JTextComponent textComponent) {
269+
textComponent.getDocument().addDocumentListener(new DocumentAdapter() {
270+
@Override
271+
protected void textChanged(@NotNull DocumentEvent e) {
272+
dialogWrapper.refreshValidation();
273+
}
274+
});
275+
}
232276
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.redhat.devtools.lsp4ij.settings.ui;
2+
3+
import com.intellij.openapi.project.Project;
4+
import com.intellij.openapi.ui.DialogWrapper;
5+
6+
public abstract class ValidatableDialog extends DialogWrapper {
7+
public ValidatableDialog(Project project) {
8+
super(project);
9+
}
10+
11+
public void refreshValidation() {
12+
super.initValidation();
13+
}
14+
15+
@Override
16+
protected boolean continuousValidation() {
17+
return false;
18+
}
19+
}

0 commit comments

Comments
 (0)