package de.kopis.jusenet.ui;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.factories.ButtonBarFactory;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import de.kopis.jusenet.Application;
public class SelectServerWindow extends JDialog implements WindowListener, ActionListener {
private static final String OK_COMMAND = "Ok";
private static final String CANCEL_COMMAND = "Cancel";
private static final String APPLY_COMMAND = "Apply";
private JTextField tfHostname;
private JSpinner tfPort;
private JCheckBox cbNeedAuth;
private JTextField tfUsername;
private JPasswordField tfPassword;
private boolean cancelled = false;
private boolean saved = false;
public SelectServerWindow(JFrame parent) {
super(parent, "Edit server");
createGUI();
addWindowListener(this);
setSize(400, 300);
}
private void createGUI() {
setLayout(new BorderLayout());
tfHostname = new JTextField(Application.getInstance().getProperty("nntp.hostname", "localhost"));
tfHostname.setToolTipText("Enter full domain name of your NNTP server.");
tfPort = new JSpinner(new SpinnerNumberModel());
tfPort.setValue(Integer.parseInt(Application.getInstance().getProperty("nntp.port", "119")));
tfPort.setToolTipText("Default port is 119. It is recommended to leave this setting alone.");
cbNeedAuth = new JCheckBox("Requires authentication");
cbNeedAuth.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tfUsername.setEnabled(cbNeedAuth.isSelected());
tfPassword.setEnabled(cbNeedAuth.isSelected());
}});
cbNeedAuth.setSelected(!"".equals(Application.getInstance().getProperty("nntp.username")));
tfUsername = new JTextField(Application.getInstance().getProperty("nntp.username"));
tfPassword = new JPasswordField(Application.getInstance().getProperty("nntp.password"));
tfUsername.setEnabled(cbNeedAuth.isSelected());
tfPassword.setEnabled(cbNeedAuth.isSelected());
FormLayout layout = new FormLayout(
"right:pref, 3dlu, pref:grow",
"pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref, 3dlu, pref");
PanelBuilder builder = new PanelBuilder(layout);
CellConstraints c = new CellConstraints();
builder.addSeparator("Server", c.xyw(1, 1, 3));
builder.addLabel("Hostname:", c.xy (1, 3));
builder.add(tfHostname, c.xy (3, 3));
builder.addLabel("Port:", c.xy (1, 5));
builder.add(tfPort, c.xy (3, 5));
builder.add(cbNeedAuth, c.xyw(1, 7, 3));
builder.addLabel("Username:", c.xy (1, 9));
builder.add(tfUsername, c.xy (3, 9));
builder.addLabel("Password:", c.xy (1, 11));
builder.add(tfPassword, c.xy (3, 11));
builder.setDefaultDialogBorder();
add(builder.getPanel(), BorderLayout.CENTER);
JButton ok = new JButton(OK_COMMAND);
ok.addActionListener(this);
JButton cancel = new JButton(CANCEL_COMMAND);
cancel.addActionListener(this);
JButton apply = new JButton(APPLY_COMMAND);
apply.addActionListener(this);
add(ButtonBarFactory.buildOKCancelApplyBar(ok, cancel, apply),
BorderLayout.SOUTH);
}
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
public void windowClosing(WindowEvent e) {
if(!saved && !cancelled) {
int result = JOptionPane.showConfirmDialog(this, "Settings are not saved. Do you want to save now?", "Save settings?", JOptionPane.YES_NO_OPTION);
switch(result) {
case JOptionPane.YES_OPTION:
// save before close
save();
break;
case JOptionPane.NO_OPTION:
// close
break;
}
}
}
public void windowClosed(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void actionPerformed(ActionEvent e) {
if(CANCEL_COMMAND.equals(e.getActionCommand())) {
cancelled = true;
dispose();
} else if(APPLY_COMMAND.equals(e.getActionCommand())) {
save();
} else if(OK_COMMAND.equals(e.getActionCommand())) {
save();
dispose();
}
}
/**
* Saves current values to application properties.
*
*/
private void save() {
Application.getInstance().setProperty("nntp.hostname", tfHostname.getText());
Application.getInstance().setProperty("nntp.port", "" + tfPort.getValue());
if(cbNeedAuth.isSelected()) {
Application.getInstance().setProperty("nntp.username", tfUsername.getText());
Application.getInstance().setProperty("nntp.password", new String(tfPassword.getPassword()));
} else {
Application.getInstance().setProperty("nntp.username", "");
Application.getInstance().setProperty("nntp.password", "");
}
saved = true;
}
}