/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license. See terms of license at gnu.org.
*/
package net.java.sip.communicator.plugin.aimaccregwizz;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.swing.*;
/**
* The FirstWizardPage is the page, where user could enter the uin
* and the password of the account.
*
* @author Yana Stamcheva
*/
public class FirstWizardPage
extends TransparentPanel
implements WizardPage,
DocumentListener,
ActionListener
{
public static final String FIRST_PAGE_IDENTIFIER = "FirstPageIdentifier";
public static final String USER_NAME_EXAMPLE = "Ex: 83378997";
private JPanel uinPassPanel =
new TransparentPanel(new BorderLayout(10, 10));
private JPanel labelsPanel = new TransparentPanel();
private JPanel valuesPanel = new TransparentPanel();
private JPanel advancedOpPanel =
new TransparentPanel(new BorderLayout(10, 10));
private JPanel labelsAdvOpPanel =
new TransparentPanel(new GridLayout(0, 1, 10, 10));
private JPanel valuesAdvOpPanel =
new TransparentPanel(new GridLayout(0, 1, 10, 10));
private JCheckBox enableAdvOpButton =
new SIPCommCheckBox(Resources.getString(
"plugin.aimaccregwizz.OVERRIDE_SERVER_DEFAULT_OPTIONS"), false);
private JLabel uinLabel = new JLabel(
Resources.getString("plugin.aimaccregwizz.USERNAME"));
private JPanel emptyPanel = new TransparentPanel();
private JLabel uinExampleLabel = new JLabel(USER_NAME_EXAMPLE);
private JLabel passLabel = new JLabel(
Resources.getString("service.gui.PASSWORD"));
private JLabel existingAccountLabel =
new JLabel(Resources.getString("service.gui.EXISTING_ACCOUNT_ERROR"));
private JTextField uinField = new JTextField();
private JPasswordField passField = new JPasswordField();
private JCheckBox rememberPassBox =
new SIPCommCheckBox(Resources.getString(
"service.gui.REMEMBER_PASSWORD"));
private JPanel registerPanel = new TransparentPanel(new GridLayout(0, 1));
private JPanel buttonPanel =
new TransparentPanel(new FlowLayout(FlowLayout.CENTER));
private JTextArea registerArea =
new JTextArea(Resources.getString("plugin.aimaccregwizz.REGISTER_NEW_ACCOUNT_TEXT"));
private JButton registerButton =
new JButton(Resources.getString("plugin.aimaccregwizz.REGISTER_NEW_ACCOUNT"));
private JLabel proxyLabel = new JLabel(Resources.getString("plugin.aimaccregwizz.PROXY"));
private JLabel proxyPortLabel =
new JLabel(Resources.getString("plugin.aimaccregwizz.PROXY"));
private JLabel proxyUsernameLabel =
new JLabel(Resources.getString("plugin.aimaccregwizz.PROXY_USERNAME"));
private JLabel proxyPasswordLabel =
new JLabel(Resources.getString("plugin.aimaccregwizz.PROXY_PASSWORD"));
private JLabel proxyTypeLabel =
new JLabel(Resources.getString("plugin.aimaccregwizz.PROXY_TYPE"));
private JTextField proxyField = new JTextField();
private JTextField proxyPortField = new JTextField();
private JTextField proxyUsernameField = new JTextField();
private JPasswordField proxyPassField = new JPasswordField();
private JComboBox proxyTypeCombo = new JComboBox(new Object[]
{ "http", "socks5", "socks4" });
private JPanel mainPanel = new TransparentPanel();
private Object nextPageIdentifier = WizardPage.SUMMARY_PAGE_IDENTIFIER;
private AimAccountRegistrationWizard wizard;
private boolean isCommitted = false;
/**
* Creates an instance of FirstWizardPage.
*
* @param wizard the parent wizard
*/
public FirstWizardPage( AimAccountRegistrationWizard wizard)
{
super(new BorderLayout());
this.wizard = wizard;
this.setPreferredSize(new Dimension(600, 500));
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
this.init();
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
this.labelsPanel
.setLayout(new BoxLayout(labelsPanel, BoxLayout.Y_AXIS));
this.valuesPanel
.setLayout(new BoxLayout(valuesPanel, BoxLayout.Y_AXIS));
}
/**
* Initializes all panels, buttons, etc.
*/
private void init()
{
this.mainPanel.setOpaque(false);
this.labelsPanel.setOpaque(false);
this.valuesPanel.setOpaque(false);
this.uinPassPanel.setOpaque(false);
this.emptyPanel.setOpaque(false);
this.registerButton.addActionListener(this);
this.uinField.getDocument().addDocumentListener(this);
this.rememberPassBox.setSelected(true);
this.existingAccountLabel.setForeground(Color.RED);
this.uinExampleLabel.setForeground(Color.GRAY);
this.uinExampleLabel.setFont(uinExampleLabel.getFont().deriveFont(8));
this.emptyPanel.setMaximumSize(new Dimension(40, 35));
this.uinExampleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 8,
0));
labelsPanel.add(uinLabel);
labelsPanel.add(emptyPanel);
labelsPanel.add(passLabel);
valuesPanel.add(uinField);
valuesPanel.add(uinExampleLabel);
valuesPanel.add(passField);
uinPassPanel.add(labelsPanel, BorderLayout.WEST);
uinPassPanel.add(valuesPanel, BorderLayout.CENTER);
uinPassPanel.add(rememberPassBox, BorderLayout.SOUTH);
uinPassPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("plugin.aimaccregwizz.USERNAME_AND_PASSWORD")));
mainPanel.add(uinPassPanel);
proxyField.setEditable(false);
proxyPortField.setEditable(false);
proxyTypeCombo.setEnabled(false);
enableAdvOpButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
// Perform action
JCheckBox cb = (JCheckBox) evt.getSource();
proxyField.setEditable(cb.isSelected());
proxyPortField.setEditable(cb.isSelected());
proxyTypeCombo.setEnabled(cb.isSelected());
}
});
proxyTypeCombo.setSelectedItem(wizard.getRegistration().getProxyType());
labelsAdvOpPanel.add(proxyLabel);
labelsAdvOpPanel.add(proxyPortLabel);
labelsAdvOpPanel.add(proxyTypeLabel);
labelsAdvOpPanel.add(proxyUsernameLabel);
labelsAdvOpPanel.add(proxyPasswordLabel);
valuesAdvOpPanel.add(proxyField);
valuesAdvOpPanel.add(proxyPortField);
valuesAdvOpPanel.add(proxyTypeCombo);
valuesAdvOpPanel.add(proxyUsernameField);
valuesAdvOpPanel.add(proxyPassField);
advancedOpPanel.add(enableAdvOpButton, BorderLayout.NORTH);
advancedOpPanel.add(labelsAdvOpPanel, BorderLayout.WEST);
advancedOpPanel.add(valuesAdvOpPanel, BorderLayout.CENTER);
advancedOpPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("plugin.aimaccregwizz.ADVANCED_OPTIONS")));
mainPanel.add(advancedOpPanel);
this.buttonPanel.add(registerButton);
this.registerArea.setEditable(false);
this.registerArea.setLineWrap(true);
this.registerArea.setWrapStyleWord(true);
this.registerPanel.add(registerArea);
this.registerPanel.add(buttonPanel);
this.registerPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("plugin.aimaccregwizz.REGISTER_NEW_ACCOUNT")));
mainPanel.add(registerPanel);
this.add(mainPanel, BorderLayout.NORTH);
}
/**
* Implements the WizardPage.getIdentifier
to return this
* page identifier.
*/
public Object getIdentifier()
{
return FIRST_PAGE_IDENTIFIER;
}
/**
* Implements the WizardPage.getNextPageIdentifier
to return
* the next page identifier - the summary page.
*/
public Object getNextPageIdentifier()
{
return nextPageIdentifier;
}
/**
* Implements the WizardPage.getBackPageIdentifier
to return
* the next back identifier - the default page.
*/
public Object getBackPageIdentifier()
{
return WizardPage.DEFAULT_PAGE_IDENTIFIER;
}
/**
* Implements the WizardPage.getWizardForm
to return this
* panel.
*/
public Object getWizardForm()
{
return this;
}
/**
* Before this page is displayed enables or disables the "Next" wizard
* button according to whether the UIN field is empty.
*/
public void pageShowing()
{
this.setNextButtonAccordingToUIN();
}
/**
* Saves the user input when the "Next" wizard buttons is clicked.
*/
public void commitPage()
{
String uin = uinField.getText();
if (!wizard.isModification() && isExistingAccount(uin))
{
nextPageIdentifier = FIRST_PAGE_IDENTIFIER;
uinPassPanel.add(existingAccountLabel, BorderLayout.NORTH);
this.revalidate();
}
else
{
nextPageIdentifier = SUMMARY_PAGE_IDENTIFIER;
uinPassPanel.remove(existingAccountLabel);
AimAccountRegistration registration = wizard.getRegistration();
registration.setUin(uin);
registration.setPassword(new String(passField.getPassword()));
registration.setRememberPassword(rememberPassBox.isSelected());
if (enableAdvOpButton.isSelected())
{
registration.setProxy(proxyField.getText());
registration.setProxyPort(proxyPortField.getText());
registration.setProxyUsername(proxyUsernameField.getText());
if (proxyTypeCombo.getSelectedItem() != null)
registration.setProxyType(proxyTypeCombo.getSelectedItem()
.toString());
if (proxyPassField.getPassword() != null)
registration.setProxyPassword(new String(proxyPassField
.getPassword()));
}
}
isCommitted = true;
}
/**
* Enables or disables the "Next" wizard button according to whether the UIN
* field is empty.
*/
private void setNextButtonAccordingToUIN()
{
if (uinField.getText() == null || uinField.getText().equals(""))
{
wizard.getWizardContainer().setNextFinishButtonEnabled(false);
}
else
{
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
}
}
/**
* Handles the DocumentEvent triggered when user types in the UIN
* field. Enables or disables the "Next" wizard button according to whether
* the UIN field is empty.
*/
public void insertUpdate(DocumentEvent e)
{
this.setNextButtonAccordingToUIN();
}
/**
* Handles the DocumentEvent triggered when user deletes letters
* from the UIN field. Enables or disables the "Next" wizard button
* according to whether the UIN field is empty.
*/
public void removeUpdate(DocumentEvent e)
{
this.setNextButtonAccordingToUIN();
}
public void changedUpdate(DocumentEvent e)
{
}
public void pageHiding()
{
}
public void pageShown()
{
}
public void pageBack()
{
}
/**
* Fills the UIN and Password fields in this panel with the data comming
* from the given protocolProvider.
*
* @param protocolProvider The ProtocolProviderService to load
* the data from.
*/
public void loadAccount(ProtocolProviderService protocolProvider)
{
AccountID accountID = protocolProvider.getAccountID();
String password =
accountID
.getAccountPropertyString(ProtocolProviderFactory.PASSWORD);
this.uinField.setEnabled(false);
this.uinField.setText(accountID.getUserID());
if (password != null)
{
this.passField.setText(password);
this.rememberPassBox.setSelected(true);
}
String proxyAddress =
accountID
.getAccountPropertyString(ProtocolProviderFactory.PROXY_ADDRESS);
String proxyPort =
accountID
.getAccountPropertyString(ProtocolProviderFactory.PROXY_PORT);
String proxyType =
accountID
.getAccountPropertyString(ProtocolProviderFactory.PROXY_TYPE);
String proxyUsername =
accountID
.getAccountPropertyString(ProtocolProviderFactory.PROXY_USERNAME);
String proxyPassword =
accountID
.getAccountPropertyString(ProtocolProviderFactory.PROXY_PASSWORD);
if (proxyAddress != null || proxyPort != null
|| proxyType != null || proxyUsername != null
|| proxyPassword != null)
{
enableAdvOpButton.setSelected(true);
}
proxyField.setText(proxyAddress);
proxyPortField.setText(proxyPort);
proxyTypeCombo.setSelectedItem(proxyType);
proxyUsernameField.setText(proxyUsername);
proxyPassField.setText(proxyPassword);
}
public void actionPerformed(ActionEvent e)
{
wizard.webSignup();
}
/**
* Checks if an acount with the given account already exists.
*
* @param accountName the name of the account to check
* @return TRUE, if an account with the given name already exists, FALSE -
* otherwise
*/
private boolean isExistingAccount(String accountName)
{
ProtocolProviderFactory factory =
AimAccRegWizzActivator.getAimProtocolProviderFactory();
ArrayList registeredAccounts = factory.getRegisteredAccounts();
for (int i = 0; i < registeredAccounts.size(); i++)
{
AccountID accountID = (AccountID) registeredAccounts.get(i);
if (accountName.equalsIgnoreCase(accountID.getUserID()))
return true;
}
return false;
}
public Object getSimpleForm()
{
return uinPassPanel;
}
public boolean isCommitted()
{
return isCommitted;
}
}