/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Icy is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package icy.gui.preferences;
import icy.gui.component.IcyTextField;
import icy.gui.component.IcyTextField.TextChangeListener;
import icy.network.NetworkUtil;
import icy.preferences.NetworkPreferences;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
/**
* @author stephane
*/
public class NetworkPreferencePanel extends PreferencePanel implements ActionListener, TextChangeListener,
ChangeListener, DocumentListener
{
/**
*
*/
private static final long serialVersionUID = -2311019090865779672L;
public static final String NODE_NAME = "Network";
private JComboBox proxySettingComboBox;
private IcyTextField httpHostField;
private JSpinner httpPortField;
private IcyTextField httpsHostField;
private IcyTextField ftpHostField;
private JSpinner httpsPortField;
private JSpinner ftpPortField;
private IcyTextField socksHostField;
private JSpinner socksPortField;
private JCheckBox useAuthenticationChkBox;
private JLabel lblLogin;
private JLabel lblPassword;
private IcyTextField userField;
private JPasswordField passwordField;
public NetworkPreferencePanel(PreferenceFrame parent)
{
super(parent, NODE_NAME, PreferenceFrame.NODE_NAME);
initialize();
validate();
load();
updateComponentsState();
proxySettingComboBox.addActionListener(this);
httpHostField.addTextChangeListener(this);
httpPortField.addChangeListener(this);
httpsHostField.addTextChangeListener(this);
httpsPortField.addChangeListener(this);
ftpHostField.addTextChangeListener(this);
ftpPortField.addChangeListener(this);
socksHostField.addTextChangeListener(this);
socksPortField.addChangeListener(this);
userField.addTextChangeListener(this);
passwordField.getDocument().addDocumentListener(this);
useAuthenticationChkBox.addActionListener(this);
}
void initialize()
{
GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[] {69, 239, 97, 0, 0};
gridBagLayout.rowHeights = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
gridBagLayout.columnWeights = new double[] {0.0, 1.0, 0.0, 1.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
mainPanel.setLayout(gridBagLayout);
JLabel lblProxy = new JLabel("Proxy");
GridBagConstraints gbc_lblProxy = new GridBagConstraints();
gbc_lblProxy.anchor = GridBagConstraints.EAST;
gbc_lblProxy.insets = new Insets(0, 0, 5, 5);
gbc_lblProxy.gridx = 0;
gbc_lblProxy.gridy = 0;
mainPanel.add(lblProxy, gbc_lblProxy);
proxySettingComboBox = new JComboBox();
proxySettingComboBox.setModel(new DefaultComboBoxModel(
new String[] {"No proxy", "System proxy", "Manual proxy"}));
proxySettingComboBox.setToolTipText("Proxy setting");
GridBagConstraints gbc_proxySettingComboBox = new GridBagConstraints();
gbc_proxySettingComboBox.insets = new Insets(0, 0, 5, 5);
gbc_proxySettingComboBox.fill = GridBagConstraints.HORIZONTAL;
gbc_proxySettingComboBox.gridx = 1;
gbc_proxySettingComboBox.gridy = 0;
mainPanel.add(proxySettingComboBox, gbc_proxySettingComboBox);
JLabel lblNewLabel = new JLabel("HTTP");
GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
gbc_lblNewLabel.anchor = GridBagConstraints.EAST;
gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel.gridx = 0;
gbc_lblNewLabel.gridy = 1;
mainPanel.add(lblNewLabel, gbc_lblNewLabel);
httpHostField = new IcyTextField();
httpHostField.setToolTipText("HTTP proxy host");
GridBagConstraints gbc_httpHostField = new GridBagConstraints();
gbc_httpHostField.insets = new Insets(0, 0, 5, 5);
gbc_httpHostField.fill = GridBagConstraints.HORIZONTAL;
gbc_httpHostField.gridx = 1;
gbc_httpHostField.gridy = 1;
mainPanel.add(httpHostField, gbc_httpHostField);
httpHostField.setColumns(10);
httpPortField = new JSpinner();
httpPortField.setModel(new SpinnerNumberModel(80, 0, 65535, 1));
httpPortField.setToolTipText("HTTPS proxy port");
GridBagConstraints gbc_httpPortField = new GridBagConstraints();
gbc_httpPortField.fill = GridBagConstraints.HORIZONTAL;
gbc_httpPortField.insets = new Insets(0, 0, 5, 5);
gbc_httpPortField.gridx = 2;
gbc_httpPortField.gridy = 1;
mainPanel.add(httpPortField, gbc_httpPortField);
JLabel lblNewLabel_1 = new JLabel("HTTPS");
GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
gbc_lblNewLabel_1.anchor = GridBagConstraints.EAST;
gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel_1.gridx = 0;
gbc_lblNewLabel_1.gridy = 2;
mainPanel.add(lblNewLabel_1, gbc_lblNewLabel_1);
httpsHostField = new IcyTextField();
httpsHostField.setToolTipText("HTTPS proxy host");
GridBagConstraints gbc_httpsHostField = new GridBagConstraints();
gbc_httpsHostField.insets = new Insets(0, 0, 5, 5);
gbc_httpsHostField.fill = GridBagConstraints.HORIZONTAL;
gbc_httpsHostField.gridx = 1;
gbc_httpsHostField.gridy = 2;
mainPanel.add(httpsHostField, gbc_httpsHostField);
httpsHostField.setColumns(10);
httpsPortField = new JSpinner();
httpsPortField.setModel(new SpinnerNumberModel(443, 0, 65535, 1));
httpsPortField.setToolTipText("HTTPS proxy port");
GridBagConstraints gbc_httpsPortField = new GridBagConstraints();
gbc_httpsPortField.insets = new Insets(0, 0, 5, 5);
gbc_httpsPortField.fill = GridBagConstraints.HORIZONTAL;
gbc_httpsPortField.gridx = 2;
gbc_httpsPortField.gridy = 2;
mainPanel.add(httpsPortField, gbc_httpsPortField);
JLabel lblNewLabel_2 = new JLabel("FTP");
GridBagConstraints gbc_lblNewLabel_2 = new GridBagConstraints();
gbc_lblNewLabel_2.anchor = GridBagConstraints.EAST;
gbc_lblNewLabel_2.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel_2.gridx = 0;
gbc_lblNewLabel_2.gridy = 3;
mainPanel.add(lblNewLabel_2, gbc_lblNewLabel_2);
ftpHostField = new IcyTextField();
ftpHostField.setToolTipText("FTP proxy host");
GridBagConstraints gbc_ftpHostField = new GridBagConstraints();
gbc_ftpHostField.insets = new Insets(0, 0, 5, 5);
gbc_ftpHostField.fill = GridBagConstraints.HORIZONTAL;
gbc_ftpHostField.gridx = 1;
gbc_ftpHostField.gridy = 3;
mainPanel.add(ftpHostField, gbc_ftpHostField);
ftpHostField.setColumns(10);
ftpPortField = new JSpinner();
ftpPortField.setModel(new SpinnerNumberModel(21, 0, 65535, 1));
ftpPortField.setToolTipText("FTP proxy port");
GridBagConstraints gbc_ftpPortField = new GridBagConstraints();
gbc_ftpPortField.insets = new Insets(0, 0, 5, 5);
gbc_ftpPortField.fill = GridBagConstraints.HORIZONTAL;
gbc_ftpPortField.gridx = 2;
gbc_ftpPortField.gridy = 3;
mainPanel.add(ftpPortField, gbc_ftpPortField);
JLabel lblNewLabel_3 = new JLabel("SOCKS");
GridBagConstraints gbc_lblNewLabel_3 = new GridBagConstraints();
gbc_lblNewLabel_3.anchor = GridBagConstraints.EAST;
gbc_lblNewLabel_3.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel_3.gridx = 0;
gbc_lblNewLabel_3.gridy = 4;
mainPanel.add(lblNewLabel_3, gbc_lblNewLabel_3);
socksHostField = new IcyTextField();
socksHostField.setToolTipText("SOCKS host");
GridBagConstraints gbc_socksHostField = new GridBagConstraints();
gbc_socksHostField.insets = new Insets(0, 0, 5, 5);
gbc_socksHostField.fill = GridBagConstraints.HORIZONTAL;
gbc_socksHostField.gridx = 1;
gbc_socksHostField.gridy = 4;
mainPanel.add(socksHostField, gbc_socksHostField);
socksHostField.setColumns(10);
socksPortField = new JSpinner();
socksPortField.setModel(new SpinnerNumberModel(1080, 0, 65535, 1));
socksPortField.setToolTipText("SOCKS port");
GridBagConstraints gbc_socksPortField = new GridBagConstraints();
gbc_socksPortField.insets = new Insets(0, 0, 5, 5);
gbc_socksPortField.fill = GridBagConstraints.HORIZONTAL;
gbc_socksPortField.gridx = 2;
gbc_socksPortField.gridy = 4;
mainPanel.add(socksPortField, gbc_socksPortField);
useAuthenticationChkBox = new JCheckBox("Use authentication");
GridBagConstraints gbc_chckbxUseAuthentication = new GridBagConstraints();
gbc_chckbxUseAuthentication.anchor = GridBagConstraints.WEST;
gbc_chckbxUseAuthentication.insets = new Insets(0, 0, 5, 5);
gbc_chckbxUseAuthentication.gridx = 1;
gbc_chckbxUseAuthentication.gridy = 5;
mainPanel.add(useAuthenticationChkBox, gbc_chckbxUseAuthentication);
lblLogin = new JLabel("User");
GridBagConstraints gbc_lblLogin = new GridBagConstraints();
gbc_lblLogin.anchor = GridBagConstraints.EAST;
gbc_lblLogin.insets = new Insets(0, 0, 5, 5);
gbc_lblLogin.gridx = 0;
gbc_lblLogin.gridy = 6;
mainPanel.add(lblLogin, gbc_lblLogin);
userField = new IcyTextField();
GridBagConstraints gbc_userField = new GridBagConstraints();
gbc_userField.insets = new Insets(0, 0, 5, 5);
gbc_userField.fill = GridBagConstraints.HORIZONTAL;
gbc_userField.gridx = 1;
gbc_userField.gridy = 6;
mainPanel.add(userField, gbc_userField);
userField.setColumns(10);
lblPassword = new JLabel("Password");
GridBagConstraints gbc_lblPassword = new GridBagConstraints();
gbc_lblPassword.anchor = GridBagConstraints.EAST;
gbc_lblPassword.insets = new Insets(0, 0, 5, 5);
gbc_lblPassword.gridx = 0;
gbc_lblPassword.gridy = 7;
mainPanel.add(lblPassword, gbc_lblPassword);
passwordField = new JPasswordField();
GridBagConstraints gbc_passwordField = new GridBagConstraints();
gbc_passwordField.insets = new Insets(0, 0, 5, 5);
gbc_passwordField.fill = GridBagConstraints.HORIZONTAL;
gbc_passwordField.gridx = 1;
gbc_passwordField.gridy = 7;
mainPanel.add(passwordField, gbc_passwordField);
}
private void updateComponentsState()
{
final boolean enabled = proxySettingComboBox.getSelectedIndex() == 2;
httpHostField.setEnabled(enabled);
httpPortField.setEnabled(enabled);
httpsHostField.setEnabled(enabled);
httpsPortField.setEnabled(enabled);
ftpHostField.setEnabled(enabled);
ftpPortField.setEnabled(enabled);
socksHostField.setEnabled(enabled);
socksPortField.setEnabled(enabled);
useAuthenticationChkBox.setEnabled(enabled);
final boolean authEnabled = enabled && useAuthenticationChkBox.isSelected();
userField.setEnabled(authEnabled);
passwordField.setEnabled(authEnabled);
}
@Override
public void actionPerformed(ActionEvent e)
{
final Object source = e.getSource();
if ((source == proxySettingComboBox) || (source == useAuthenticationChkBox))
updateComponentsState();
// network setting changed, restart needed
getPreferenceFrame().setNeedRestart();
}
@Override
public void textChanged(IcyTextField source, boolean validate)
{
// network setting changed, restart needed
if (validate)
getPreferenceFrame().setNeedRestart();
}
@Override
public void stateChanged(ChangeEvent e)
{
// network setting changed, restart needed
getPreferenceFrame().setNeedRestart();
}
@Override
protected void load()
{
proxySettingComboBox.setSelectedIndex(NetworkPreferences.getProxySetting());
httpHostField.setText(NetworkPreferences.getProxyHTTPHost());
httpPortField.setValue(Integer.valueOf(NetworkPreferences.getProxyHTTPPort()));
httpsHostField.setText(NetworkPreferences.getProxyHTTPSHost());
httpsPortField.setValue(Integer.valueOf(NetworkPreferences.getProxyHTTPSPort()));
ftpHostField.setText(NetworkPreferences.getProxyFTPHost());
ftpPortField.setValue(Integer.valueOf(NetworkPreferences.getProxyFTPPort()));
socksHostField.setText(NetworkPreferences.getProxySOCKSHost());
socksPortField.setValue(Integer.valueOf(NetworkPreferences.getProxySOCKSPort()));
useAuthenticationChkBox.setSelected(NetworkPreferences.getProxyAuthentication());
userField.setText(NetworkPreferences.getProxyUser());
passwordField.setText(NetworkPreferences.getProxyPassword());
}
@Override
protected void save()
{
NetworkPreferences.setProxySetting(proxySettingComboBox.getSelectedIndex());
NetworkPreferences.setProxyHTTPHost(httpHostField.getText());
NetworkPreferences.setProxyHTTPPort(((Integer) httpPortField.getValue()).intValue());
NetworkPreferences.setProxyHTTPSHost(httpsHostField.getText());
NetworkPreferences.setProxyHTTPSPort(((Integer) httpsPortField.getValue()).intValue());
NetworkPreferences.setProxyFTPHost(ftpHostField.getText());
NetworkPreferences.setProxyFTPPort(((Integer) ftpPortField.getValue()).intValue());
NetworkPreferences.setProxySOCKSHost(socksHostField.getText());
NetworkPreferences.setProxySOCKSPort(((Integer) socksPortField.getValue()).intValue());
NetworkPreferences.setProxyAuthentication(useAuthenticationChkBox.isSelected());
NetworkPreferences.setProxyUser(userField.getText());
NetworkPreferences.setProxyPassword(new String(passwordField.getPassword()));
NetworkUtil.updateNetworkSetting();
}
@Override
public void insertUpdate(DocumentEvent e)
{
// network setting changed, restart needed
getPreferenceFrame().setNeedRestart();
}
@Override
public void removeUpdate(DocumentEvent e)
{
// network setting changed, restart needed
getPreferenceFrame().setNeedRestart();
}
@Override
public void changedUpdate(DocumentEvent e)
{
// network setting changed, restart needed
getPreferenceFrame().setNeedRestart();
}
}