From f51c8a16770216003a1c8039a94e1632b2b1bb3c Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Wed, 22 Apr 2020 22:59:41 +0200 Subject: Extend validation system --- .../enigma/gui/dialog/ConnectToServerDialog.java | 37 +++++----- .../enigma/gui/elements/VerifiableTextField.java | 83 ---------------------- 2 files changed, 21 insertions(+), 99 deletions(-) delete mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/elements/VerifiableTextField.java (limited to 'enigma-swing/src/main/java') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java index 4bac97b..eede946 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/ConnectToServerDialog.java @@ -9,15 +9,19 @@ import java.util.stream.Stream; import javax.swing.*; -import cuchaz.enigma.gui.elements.VerifiableTextField; +import cuchaz.enigma.gui.elements.ValidatableTextField; import cuchaz.enigma.network.EnigmaServer; import cuchaz.enigma.utils.I18n; import cuchaz.enigma.utils.ServerAddress; +import cuchaz.enigma.utils.validation.Message; +import cuchaz.enigma.utils.validation.ValidationContext; public class ConnectToServerDialog extends JDialog { + private final ValidationContext vc = new ValidationContext(); + private final JTextField usernameField; - private final VerifiableTextField ipField; + private final ValidatableTextField ipField; private final JPasswordField passwordField; private boolean success = false; @@ -29,7 +33,7 @@ public class ConnectToServerDialog extends JDialog { Container inputContainer = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); usernameField = new JTextField(System.getProperty("user.name")); - ipField = new VerifiableTextField(); + ipField = new ValidatableTextField(); passwordField = new JPasswordField(); List labels = Stream.of("prompt.connect.username", "prompt.connect.address", "prompt.password") @@ -76,31 +80,32 @@ public class ConnectToServerDialog extends JDialog { } private void confirm() { - if (validateInputs()) { + vc.reset(); + validateInputs(); + if (vc.canProceed()) { success = true; setVisible(false); } } private void cancel() { - success = false; - setVisible(false); + success = false; + setVisible(false); } - public boolean validateInputs() { - boolean error = false; - ipField.clearErrorState(); - - if (ServerAddress.from(ipField.getText(), EnigmaServer.DEFAULT_PORT) == null) { - ipField.addError("Invalid IP/Port combination"); - error = true; + public void validateInputs() { + vc.setActiveElement(ipField); + if (ipField.getText().trim().isEmpty()) { + vc.raise(Message.EMPTY_FIELD); + } else if (ServerAddress.from(ipField.getText(), EnigmaServer.DEFAULT_PORT) == null) { + vc.raise(Message.INVALID_IP, ipField.getText()); } - - return !error; } public Result getResult() { - if (!success) return null; + vc.reset(); + validateInputs(); + if (!vc.canProceed()) return null; return new Result( usernameField.getText(), Objects.requireNonNull(ServerAddress.from(ipField.getText(), EnigmaServer.DEFAULT_PORT)), diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/VerifiableTextField.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/VerifiableTextField.java deleted file mode 100644 index 928372c..0000000 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/elements/VerifiableTextField.java +++ /dev/null @@ -1,83 +0,0 @@ -package cuchaz.enigma.gui.elements; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; - -import javax.swing.JTextField; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.text.Document; - -public class VerifiableTextField extends JTextField { - - private boolean hasError; - - public VerifiableTextField() { - } - - public VerifiableTextField(String text) { - super(text); - } - - public VerifiableTextField(int columns) { - super(columns); - } - - public VerifiableTextField(String text, int columns) { - super(text, columns); - } - - public VerifiableTextField(Document doc, String text, int columns) { - super(doc, text, columns); - } - - { - getDocument().addDocumentListener(new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - clearErrorState(); - } - - @Override - public void removeUpdate(DocumentEvent e) { - clearErrorState(); - } - - @Override - public void changedUpdate(DocumentEvent e) { - clearErrorState(); - } - }); - } - - @Override - public void setText(String t) { - super.setText(t); - } - - public void clearErrorState() { - this.hasError = false; - repaint(); - } - - public void addError(String message) { - this.hasError = true; - repaint(); - } - - @Override - public void paint(Graphics g) { - super.paint(g); - if (hasError) { - g.setColor(Color.RED); - int x1 = getWidth() - 9; - int x2 = getWidth() - 2; - int y1 = 1; - int y2 = 8; - g.fillPolygon(new int[]{x1, x2, x2}, new int[]{y1, y1, y2}, 3); - } - } - -} -- cgit v1.2.3