davmail/src/java/davmail/ui/SettingsFrame.java

268 lines
13 KiB
Java

package davmail.ui;
import davmail.DavGateway;
import davmail.Settings;
import davmail.tray.DavGatewayTray;
import org.apache.log4j.Level;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* DavMail settings frame
*/
public class SettingsFrame extends JFrame {
static final Level[] LOG_LEVELS = {Level.OFF, Level.FATAL, Level.ERROR, Level.WARN, Level.INFO, Level.DEBUG, Level.ALL};
protected JTextField urlField;
protected JTextField popPortField;
protected JTextField smtpPortField;
protected JTextField caldavPortField;
protected JTextField keepDelayField;
JCheckBox enableProxyField;
JTextField httpProxyField;
JTextField httpProxyPortField;
JTextField httpProxyUserField;
JTextField httpProxyPasswordField;
JCheckBox allowRemoteField;
JTextField bindAddressField;
JTextField certHashField;
JCheckBox disableUpdateCheck;
JComboBox rootLoggingLevelField;
JComboBox davmailLoggingLevelField;
JComboBox httpclientLoggingLevelField;
JComboBox wireLoggingLevelField;
protected void addSettingComponent(JPanel panel, String label, Component component) {
JLabel fieldLabel = new JLabel(label);
fieldLabel.setHorizontalAlignment(SwingConstants.RIGHT);
panel.add(fieldLabel);
component.setMaximumSize(component.getPreferredSize());
JPanel innerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
innerPanel.add(component);
panel.add(innerPanel);
}
protected JPanel getSettingsPanel() {
JPanel settingsPanel = new JPanel(new GridLayout(5, 2));
settingsPanel.setBorder(BorderFactory.createTitledBorder("Gateway"));
urlField = new JTextField(Settings.getProperty("davmail.url"), 17);
urlField.setToolTipText("Base outlook web access URL");
popPortField = new JTextField(Settings.getProperty("davmail.popPort"), 4);
smtpPortField = new JTextField(Settings.getProperty("davmail.smtpPort"), 4);
caldavPortField = new JTextField(Settings.getProperty("davmail.caldavPort"), 4);
keepDelayField = new JTextField(Settings.getProperty("davmail.keepDelay"), 4);
keepDelayField.setToolTipText("Number of days to keep messages in trash");
addSettingComponent(settingsPanel, "OWA url: ", urlField);
addSettingComponent(settingsPanel, "Local POP port: ", popPortField);
addSettingComponent(settingsPanel, "Local SMTP port: ", smtpPortField);
addSettingComponent(settingsPanel, "Caldav HTTP port: ", caldavPortField);
addSettingComponent(settingsPanel, "Keep Delay: ", keepDelayField);
return settingsPanel;
}
protected JPanel getProxyPanel() {
JPanel proxyPanel = new JPanel(new GridLayout(5, 2));
proxyPanel.setBorder(BorderFactory.createTitledBorder("Proxy"));
boolean enableProxy = Settings.getBooleanProperty("davmail.enableProxy");
enableProxyField = new JCheckBox();
enableProxyField.setSelected(enableProxy);
httpProxyField = new JTextField(Settings.getProperty("davmail.proxyHost"), 15);
httpProxyPortField = new JTextField(Settings.getProperty("davmail.proxyPort"), 4);
httpProxyUserField = new JTextField(Settings.getProperty("davmail.proxyUser"), 10);
httpProxyPasswordField = new JPasswordField(Settings.getProperty("davmail.proxyPassword"), 10);
httpProxyField.setEnabled(enableProxy);
httpProxyPortField.setEnabled(enableProxy);
httpProxyUserField.setEnabled(enableProxy);
httpProxyPasswordField.setEnabled(enableProxy);
enableProxyField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
boolean enableProxy = enableProxyField.isSelected();
httpProxyField.setEnabled(enableProxy);
httpProxyPortField.setEnabled(enableProxy);
httpProxyUserField.setEnabled(enableProxy);
httpProxyPasswordField.setEnabled(enableProxy);
}
});
addSettingComponent(proxyPanel, "Enable proxy: ", enableProxyField);
addSettingComponent(proxyPanel, "Proxy server: ", httpProxyField);
addSettingComponent(proxyPanel, "Proxy port: ", httpProxyPortField);
addSettingComponent(proxyPanel, "Proxy user: ", httpProxyUserField);
addSettingComponent(proxyPanel, "Proxy password: ", httpProxyPasswordField);
return proxyPanel;
}
public JPanel getNetworkSettingsPanel() {
JPanel networkSettingsPanel = new JPanel(new GridLayout(4, 2));
networkSettingsPanel.setBorder(BorderFactory.createTitledBorder("Network"));
allowRemoteField = new JCheckBox();
allowRemoteField.setSelected(Settings.getBooleanProperty("davmail.allowRemote"));
allowRemoteField.setToolTipText("Allow remote connections to the gateway (server mode)");
bindAddressField = new JTextField(Settings.getProperty("davmail.bindAddress"), 15);
bindAddressField.setToolTipText("Bind only to the specified network address");
certHashField = new JTextField(Settings.getProperty("davmail.server.certificate.hash"), 15);
certHashField.setToolTipText("Manually accepted server certificate hash");
disableUpdateCheck = new JCheckBox();
disableUpdateCheck.setSelected(Settings.getBooleanProperty("davmail.disableUpdateCheck"));
disableUpdateCheck.setToolTipText("Disable DavMail check for new version");
addSettingComponent(networkSettingsPanel, "Bind address: ", bindAddressField);
addSettingComponent(networkSettingsPanel, "Allow Remote Connections: ", allowRemoteField);
addSettingComponent(networkSettingsPanel, "Server certificate hash: ", certHashField);
addSettingComponent(networkSettingsPanel, "Disable update check: ", disableUpdateCheck);
return networkSettingsPanel;
}
public JPanel getLoggingSettingsPanel() {
JPanel loggingSettingsPanel = new JPanel(new GridLayout(4, 2));
loggingSettingsPanel.setBorder(BorderFactory.createTitledBorder("Logging levels"));
rootLoggingLevelField = new JComboBox(LOG_LEVELS);
davmailLoggingLevelField = new JComboBox(LOG_LEVELS);
httpclientLoggingLevelField = new JComboBox(LOG_LEVELS);
wireLoggingLevelField = new JComboBox(LOG_LEVELS);
addSettingComponent(loggingSettingsPanel, "Default: ", rootLoggingLevelField);
addSettingComponent(loggingSettingsPanel, "DavMail: ", davmailLoggingLevelField);
addSettingComponent(loggingSettingsPanel, "HttpClient: ", httpclientLoggingLevelField);
addSettingComponent(loggingSettingsPanel, "Wire: ", wireLoggingLevelField);
return loggingSettingsPanel;
}
public void reload() {
// reload settings in form
urlField.setText(Settings.getProperty("davmail.url"));
popPortField.setText(Settings.getProperty("davmail.popPort"));
smtpPortField.setText(Settings.getProperty("davmail.smtpPort"));
caldavPortField.setText(Settings.getProperty("davmail.caldavPort"));
keepDelayField.setText(Settings.getProperty("davmail.keepDelay"));
boolean enableProxy = Settings.getBooleanProperty("davmail.enableProxy");
enableProxyField.setSelected(enableProxy);
httpProxyField.setEnabled(enableProxy);
httpProxyPortField.setEnabled(enableProxy);
httpProxyUserField.setEnabled(enableProxy);
httpProxyPasswordField.setEnabled(enableProxy);
httpProxyField.setText(Settings.getProperty("davmail.proxyHost"));
httpProxyPortField.setText(Settings.getProperty("davmail.proxyPort"));
httpProxyUserField.setText(Settings.getProperty("davmail.proxyUser"));
httpProxyPasswordField.setText(Settings.getProperty("davmail.proxyPassword"));
bindAddressField.setText(Settings.getProperty("davmail.bindAddress"));
allowRemoteField.setSelected(Settings.getBooleanProperty(("davmail.allowRemote")));
certHashField.setText(Settings.getProperty("davmail.server.certificate.hash"));
disableUpdateCheck.setSelected(Settings.getBooleanProperty(("davmail.disableUpdateCheck")));
rootLoggingLevelField.setSelectedItem(Settings.getLoggingLevel("rootLogger"));
davmailLoggingLevelField.setSelectedItem(Settings.getLoggingLevel("davmail"));
httpclientLoggingLevelField.setSelectedItem(Settings.getLoggingLevel("org.apache.commons.httpclient"));
wireLoggingLevelField.setSelectedItem(Settings.getLoggingLevel("httpclient.wire"));
}
public SettingsFrame() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setTitle("DavMail Gateway Settings");
setIconImage(DavGatewayTray.getFrameIcon());
JTabbedPane tabbedPane = new JTabbedPane();
// add help (F1 handler)
tabbedPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("F1"),
"help");
tabbedPane.getActionMap().put("help", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
DesktopBrowser.browse("http://davmail.sourceforge.net");
}
});
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(getSettingsPanel());
mainPanel.add(getProxyPanel());
mainPanel.add(Box.createVerticalGlue());
tabbedPane.add("Main", mainPanel);
JPanel advancedPanel = new JPanel();
advancedPanel.setLayout(new BoxLayout(advancedPanel, BoxLayout.Y_AXIS));
advancedPanel.add(getNetworkSettingsPanel());
advancedPanel.add(getLoggingSettingsPanel());
tabbedPane.add("Advanced", advancedPanel);
add("Center", tabbedPane);
JPanel buttonPanel = new JPanel();
JButton cancel = new JButton("Cancel");
JButton ok = new JButton("Save");
ActionListener save = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
// save options
Settings.setProperty("davmail.url", urlField.getText());
Settings.setProperty("davmail.popPort", popPortField.getText());
Settings.setProperty("davmail.smtpPort", smtpPortField.getText());
Settings.setProperty("davmail.caldavPort", caldavPortField.getText());
Settings.setProperty("davmail.keepDelay", keepDelayField.getText());
Settings.setProperty("davmail.enableProxy", String.valueOf(enableProxyField.isSelected()));
Settings.setProperty("davmail.proxyHost", httpProxyField.getText());
Settings.setProperty("davmail.proxyPort", httpProxyPortField.getText());
Settings.setProperty("davmail.proxyUser", httpProxyUserField.getText());
Settings.setProperty("davmail.proxyPassword", httpProxyPasswordField.getText());
Settings.setProperty("davmail.bindAddress", bindAddressField.getText());
Settings.setProperty("davmail.allowRemote", String.valueOf(allowRemoteField.isSelected()));
Settings.setProperty("davmail.server.certificate.hash", certHashField.getText());
Settings.setProperty("davmail.disableUpdateCheck", String.valueOf(disableUpdateCheck.isSelected()));
Settings.setLoggingLevel("rootLogger", (Level) rootLoggingLevelField.getSelectedItem());
Settings.setLoggingLevel("davmail", (Level) davmailLoggingLevelField.getSelectedItem());
Settings.setLoggingLevel("org.apache.commons.httpclient", (Level) httpclientLoggingLevelField.getSelectedItem());
Settings.setLoggingLevel("httpclient.wire", (Level) wireLoggingLevelField.getSelectedItem());
dispose();
Settings.save();
// restart listeners with new config
DavGateway.start();
}
};
ok.addActionListener(save);
cancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
reload();
dispose();
}
});
buttonPanel.add(ok);
buttonPanel.add(cancel);
add("South", buttonPanel);
pack();
//setResizable(false);
// center frame
setLocation(getToolkit().getScreenSize().width / 2 -
getSize().width / 2,
getToolkit().getScreenSize().height / 2 -
getSize().height / 2);
urlField.requestFocus();
}
}