package jetbrains.mps.execution.configurations.implementation.plugin.plugin; /*Generated by MPS */ import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JFormattedTextField; import java.awt.GridBagLayout; import javax.swing.text.DefaultFormatter; import javax.swing.JLabel; import jetbrains.mps.ide.common.LayoutUtil; import jetbrains.mps.debugger.java.api.settings.RemoteConnectionSettings; import jetbrains.mps.debugger.java.api.settings.DebugConnectionSettings; import java.awt.event.KeyAdapter; import java.beans.PropertyChangeListener; import java.awt.event.KeyEvent; import jetbrains.mps.openapi.editor.style.StyleRegistry; import java.awt.Color; import java.beans.PropertyChangeEvent; import java.text.ParseException; import org.jetbrains.annotations.Nullable; public class RemoteSettingsEditor extends JPanel { private final JTextField myHostTextField; private final JFormattedTextField myPortTextField; private final JTextField myCommandLineTextField; private int myPort; private String myHost; private String myCommandLine; public RemoteSettingsEditor() { super(new GridBagLayout()); RemoteSettingsEditor.MyKeyAdapter listener = new RemoteSettingsEditor.MyKeyAdapter(); myHostTextField = new JTextField(); myHostTextField.addKeyListener(listener); DefaultFormatter formatter = new RemoteSettingsEditor.MyDefaultFormatter(); formatter.setAllowsInvalid(true); formatter.setCommitsOnValidEdit(true); formatter.setOverwriteMode(false); myPortTextField = new JFormattedTextField(formatter); myPortTextField.addPropertyChangeListener("value", listener); myPortTextField.addKeyListener(listener); myCommandLineTextField = new JTextField(); myCommandLineTextField.setEditable(false); add(new JLabel("Host:"), LayoutUtil.createLabelConstraints(0)); add(myHostTextField, LayoutUtil.createFieldConstraints(1)); add(new JLabel("Port:"), LayoutUtil.createLabelConstraints(2)); add(myPortTextField, LayoutUtil.createFieldConstraints(3)); add(new JLabel("Remote JVM command line arguments:"), LayoutUtil.createLabelConstraints(4)); add(myCommandLineTextField, LayoutUtil.createFieldConstraints(5)); } private void updateFieldsFromUi() { myHost = myHostTextField.getText(); myPort = (Integer) myPortTextField.getValue(); myCommandLine = formClientCommandLine(); myCommandLineTextField.setText(myCommandLine); } private void updateUiFromFields() { myHostTextField.setText(myHost); myPortTextField.setValue(myPort); myCommandLineTextField.setText(myCommandLine); } private String formClientCommandLine() { return RemoteConnectionSettings.getClientCommandLine(true, myPort); } public void reset(DebugConnectionSettings settings) { myHost = settings.getHostName(); myPort = settings.getPort(); myCommandLine = formClientCommandLine(); updateUiFromFields(); } public void apply(DebugConnectionSettings settings) { settings.setHostName(myHost); settings.setPort(myPort); } private class MyKeyAdapter extends KeyAdapter implements PropertyChangeListener { private MyKeyAdapter() { } @Override public void keyReleased(KeyEvent e) { updateFieldsFromUi(); myPortTextField.setForeground((myPortTextField.isEditValid() ? StyleRegistry.getInstance().getEditorForeground() : Color.RED)); } @Override public void propertyChange(PropertyChangeEvent evt) { updateFieldsFromUi(); } } private class MyDefaultFormatter extends DefaultFormatter { private MyDefaultFormatter() { } @Override public Object stringToValue(String text) throws ParseException { try { return Integer.parseInt(text); } catch (NumberFormatException e) { throw new ParseException(text, 0); } } @Override public String valueToString(@Nullable Object value) throws ParseException { if (value == null) { return null; } return Integer.toString((Integer) value); } } }