From 5fe6dbaacf5a11f26523889580219068c473b5ce Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Thu, 23 Apr 2020 00:15:07 +0200 Subject: Abstract out common code between ConnectToServerDialog and CreateServerDialog --- .../cuchaz/enigma/gui/dialog/AbstractDialog.java | 94 ++++++++++++++++++++ .../enigma/gui/dialog/ConnectToServerDialog.java | 99 ++++++---------------- .../enigma/gui/dialog/CreateServerDialog.java | 95 +++++---------------- 3 files changed, 142 insertions(+), 146 deletions(-) create mode 100644 enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AbstractDialog.java diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AbstractDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AbstractDialog.java new file mode 100644 index 00000000..a4d8e1f5 --- /dev/null +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/AbstractDialog.java @@ -0,0 +1,94 @@ +package cuchaz.enigma.gui.dialog; + +import java.awt.*; +import java.util.List; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import cuchaz.enigma.utils.I18n; +import cuchaz.enigma.utils.Pair; +import cuchaz.enigma.utils.validation.ValidationContext; + +public abstract class AbstractDialog extends JDialog { + + protected final ValidationContext vc = new ValidationContext(); + + private boolean actionConfirm = false; + + public AbstractDialog(Frame owner, String title, String confirmAction, String cancelAction) { + super(owner, I18n.translate(title), true); + + Container contentPane = getContentPane(); + contentPane.setLayout(new BorderLayout()); + Container inputContainer = new JPanel(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + + List> components = createComponents(); + + for (int i = 0; i < components.size(); i += 1) { + Pair entry = components.get(i); + JLabel label = new JLabel(I18n.translate(entry.a)); + Component component = entry.b; + + c.gridy = i; + c.insets = new Insets(4, 4, 4, 4); + + c.gridx = 0; + c.weightx = 0.0; + c.anchor = GridBagConstraints.LINE_END; + c.fill = GridBagConstraints.NONE; + inputContainer.add(label, c); + + c.gridx = 1; + c.weightx = 1.0; + c.anchor = GridBagConstraints.LINE_START; + c.fill = GridBagConstraints.HORIZONTAL; + inputContainer.add(component, c); + } + contentPane.add(inputContainer, BorderLayout.CENTER); + Container buttonContainer = new JPanel(new GridBagLayout()); + c = new GridBagConstraints(); + c.weightx = 1.0; + c.insets = new Insets(4, 4, 4, 4); + c.anchor = GridBagConstraints.LINE_END; + JButton connectButton = new JButton(I18n.translate(confirmAction)); + connectButton.addActionListener(event -> confirm()); + buttonContainer.add(connectButton, c); + c.weightx = 0.0; + c.anchor = GridBagConstraints.CENTER; + JButton abortButton = new JButton(I18n.translate(cancelAction)); + abortButton.addActionListener(event -> cancel()); + buttonContainer.add(abortButton, c); + contentPane.add(buttonContainer, BorderLayout.SOUTH); + + pack(); + setLocationRelativeTo(owner); + } + + protected abstract List> createComponents(); + + protected void confirm() { + vc.reset(); + validateInputs(); + if (vc.canProceed()) { + actionConfirm = true; + setVisible(false); + } + } + + protected void cancel() { + actionConfirm = false; + setVisible(false); + } + + public boolean isActionConfirm() { + return actionConfirm; + } + + public void validateInputs() { + } + +} 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 697fc516..79b0c4e0 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 @@ -1,96 +1,49 @@ package cuchaz.enigma.gui.dialog; -import java.awt.*; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Frame; import java.util.Arrays; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import javax.swing.*; +import javax.swing.JPasswordField; +import javax.swing.JTextField; import cuchaz.enigma.gui.elements.ValidatableTextField; import cuchaz.enigma.network.EnigmaServer; -import cuchaz.enigma.utils.I18n; +import cuchaz.enigma.utils.Pair; import cuchaz.enigma.utils.ServerAddress; import cuchaz.enigma.utils.validation.Message; -import cuchaz.enigma.utils.validation.ValidationContext; -public class ConnectToServerDialog extends JDialog { +public class ConnectToServerDialog extends AbstractDialog { - private final ValidationContext vc = new ValidationContext(); - - private final JTextField usernameField; - private final ValidatableTextField ipField; - private final JPasswordField passwordField; - private boolean actionConfirm = false; + private JTextField usernameField; + private ValidatableTextField ipField; + private JPasswordField passwordField; public ConnectToServerDialog(Frame owner) { - super(owner, I18n.translate("prompt.connect.title"), true); + super(owner, "prompt.connect.title", "prompt.connect.confirm", "prompt.cancel"); + + setSize(new Dimension(400, 185)); + setLocationRelativeTo(owner); + } - Container contentPane = getContentPane(); - contentPane.setLayout(new BorderLayout()); - Container inputContainer = new JPanel(new GridBagLayout()); - GridBagConstraints c = new GridBagConstraints(); + @Override + protected List> createComponents() { usernameField = new JTextField(System.getProperty("user.name")); ipField = new ValidatableTextField(); passwordField = new JPasswordField(); - List labels = Stream.of("prompt.connect.username", "prompt.connect.address", "prompt.password") - .map(I18n::translate) - .map(JLabel::new) - .collect(Collectors.toList()); - List inputs = Arrays.asList(usernameField, ipField, passwordField); - - for (int i = 0; i < inputs.size(); i += 1) { - c.gridy = i; - c.insets = new Insets(4, 4, 4, 4); - - c.gridx = 0; - c.weightx = 0.0; - c.anchor = GridBagConstraints.LINE_END; - c.fill = GridBagConstraints.NONE; - inputContainer.add(labels.get(i), c); - - c.gridx = 1; - c.weightx = 1.0; - c.anchor = GridBagConstraints.LINE_START; - c.fill = GridBagConstraints.HORIZONTAL; - inputs.get(i).addActionListener(event -> confirm()); - inputContainer.add(inputs.get(i), c); - } - contentPane.add(inputContainer, BorderLayout.CENTER); - Container buttonContainer = new JPanel(new GridBagLayout()); - c = new GridBagConstraints(); - c.weightx = 1.0; - c.insets = new Insets(4, 4, 4, 4); - c.anchor = GridBagConstraints.LINE_END; - JButton connectButton = new JButton(I18n.translate("prompt.connect.confirm")); - connectButton.addActionListener(event -> confirm()); - buttonContainer.add(connectButton, c); - c.weightx = 0.0; - c.anchor = GridBagConstraints.CENTER; - JButton abortButton = new JButton(I18n.translate("prompt.cancel")); - abortButton.addActionListener(event -> cancel()); - buttonContainer.add(abortButton, c); - contentPane.add(buttonContainer, BorderLayout.SOUTH); - - setLocationRelativeTo(owner); - setSize(new Dimension(400, 185)); - } - - private void confirm() { - vc.reset(); - validateInputs(); - if (vc.canProceed()) { - actionConfirm = true; - setVisible(false); - } - } + usernameField.addActionListener(event -> confirm()); + ipField.addActionListener(event -> confirm()); + passwordField.addActionListener(event -> confirm()); - private void cancel() { - actionConfirm = false; - setVisible(false); + return Arrays.asList( + new Pair<>("prompt.connect.username", usernameField), + new Pair<>("prompt.connect.address", ipField), + new Pair<>("prompt.password", passwordField) + ); } public void validateInputs() { @@ -103,7 +56,7 @@ public class ConnectToServerDialog extends JDialog { } public Result getResult() { - if (!actionConfirm) return null; + if (!isActionConfirm()) return null; vc.reset(); validateInputs(); if (!vc.canProceed()) return null; diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java index bc4e9c94..f2bc7dbe 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/CreateServerDialog.java @@ -1,96 +1,45 @@ package cuchaz.enigma.gui.dialog; -import java.awt.*; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Frame; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.swing.*; import cuchaz.enigma.gui.elements.ValidatablePasswordField; import cuchaz.enigma.gui.elements.ValidatableTextField; import cuchaz.enigma.network.EnigmaServer; -import cuchaz.enigma.utils.I18n; +import cuchaz.enigma.utils.Pair; import cuchaz.enigma.utils.validation.Message; import cuchaz.enigma.utils.validation.StandardValidation; -import cuchaz.enigma.utils.validation.ValidationContext; - -public class CreateServerDialog extends JDialog { - private final ValidationContext vc = new ValidationContext(); +public class CreateServerDialog extends AbstractDialog { - private final ValidatableTextField portField; - private final ValidatablePasswordField passwordField; - private boolean actionConfirm = false; + private ValidatableTextField portField; + private ValidatablePasswordField passwordField; public CreateServerDialog(Frame owner) { - super(owner, I18n.translate("prompt.create_server.title"), true); - - Container contentPane = getContentPane(); - contentPane.setLayout(new BorderLayout()); - Container inputContainer = new JPanel(new GridBagLayout()); - GridBagConstraints c = new GridBagConstraints(); - portField = new ValidatableTextField(Integer.toString(EnigmaServer.DEFAULT_PORT)); - passwordField = new ValidatablePasswordField(); + super(owner, "prompt.create_server.title", "prompt.create_server.confirm", "prompt.cancel"); - java.util.List labels = Stream.of("prompt.create_server.port", "prompt.password") - .map(I18n::translate) - .map(JLabel::new) - .collect(Collectors.toList()); - List inputs = Arrays.asList(portField, passwordField); - - for (int i = 0; i < inputs.size(); i += 1) { - c.gridy = i; - c.insets = new Insets(4, 4, 4, 4); - - c.gridx = 0; - c.weightx = 0.0; - c.anchor = GridBagConstraints.LINE_END; - c.fill = GridBagConstraints.NONE; - inputContainer.add(labels.get(i), c); - - c.gridx = 1; - c.weightx = 1.0; - c.anchor = GridBagConstraints.LINE_START; - c.fill = GridBagConstraints.HORIZONTAL; - inputs.get(i).addActionListener(event -> confirm()); - inputContainer.add(inputs.get(i), c); - } - contentPane.add(inputContainer, BorderLayout.CENTER); - Container buttonContainer = new JPanel(new GridBagLayout()); - c = new GridBagConstraints(); - c.weightx = 1.0; - c.insets = new Insets(4, 4, 4, 4); - c.anchor = GridBagConstraints.LINE_END; - JButton connectButton = new JButton(I18n.translate("prompt.create_server.confirm")); - connectButton.addActionListener(event -> confirm()); - buttonContainer.add(connectButton, c); - c.weightx = 0.0; - c.anchor = GridBagConstraints.CENTER; - JButton abortButton = new JButton(I18n.translate("prompt.cancel")); - abortButton.addActionListener(event -> cancel()); - buttonContainer.add(abortButton, c); - contentPane.add(buttonContainer, BorderLayout.SOUTH); - - setLocationRelativeTo(owner); setSize(new Dimension(400, 150)); + setLocationRelativeTo(owner); } - private void confirm() { - vc.reset(); - validateInputs(); - if (vc.canProceed()) { - actionConfirm = true; - setVisible(false); - } - } + @Override + protected List> createComponents() { + portField = new ValidatableTextField(Integer.toString(EnigmaServer.DEFAULT_PORT)); + passwordField = new ValidatablePasswordField(); - private void cancel() { - actionConfirm = false; - setVisible(false); + portField.addActionListener(event -> confirm()); + passwordField.addActionListener(event -> confirm()); + + return Arrays.asList( + new Pair<>("prompt.create_server.port", portField), + new Pair<>("prompt.password", passwordField) + ); } + @Override public void validateInputs() { vc.setActiveElement(portField); StandardValidation.isIntInRange(vc, portField.getText(), 0, 65535); @@ -101,7 +50,7 @@ public class CreateServerDialog extends JDialog { } public Result getResult() { - if (!actionConfirm) return null; + if (!isActionConfirm()) return null; vc.reset(); validateInputs(); if (!vc.canProceed()) return null; -- cgit v1.2.3