New configurations prepared for the arrive of ice and stun support.

cusax-fix
Yana Stamcheva 16 years ago
parent b741c059fb
commit 1ccc8a5f28

@ -655,6 +655,15 @@ plugin.jabberaccregwizz.UNKNOWN_XMPP_ERROR=Unknown XMPP error. Verify that the s
plugin.jabberaccregwizz.NOT_SAME_PASSWORD=The two entered password aren't the same.
plugin.jabberaccregwizz.OVERRIDE_SERVER_DEFAULT_OPTIONS=Override server default options
plugin.jabberaccregwizz.ADVANCED_OPTIONS=Advanced options
plugin.jabberaccregwizz.USE_ICE=Use ICE
plugin.jabberaccregwizz.AUTO_DISCOVER_STUN=Auto discover STUN/TURN servers
plugin.jabberaccregwizz.SUPPORT_TURN=Support TURN
plugin.jabberaccregwizz.IP_ADDRESS=IP Address
plugin.jabberaccregwizz.ADD_STUN_SERVER=Add STUN server
plugin.jabberaccregwizz.ADDITIONAL_STUN_SERVERS=Additional STUN servers
plugin.jabberaccregwizz.NO_STUN_ADDRESS=Please fill a valid STUN server address in order to continue.
plugin.jabberaccregwizz.NO_STUN_USERNAME=Please fill a valid STUN server username in order to continue.
plugin.jabberaccregwizz.STUN_ALREADY_EXIST=The STUN server you specified already exist.
# mailbox
plugin.mailbox.OUTGOING=Outgoing Message:

@ -0,0 +1,242 @@
package net.java.sip.communicator.plugin.jabberaccregwizz;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import net.java.sip.communicator.util.*;
import net.java.sip.communicator.util.swing.*;
/**
*
* @author Yana Stamcheva
*/
public class AccountPanel
extends TransparentPanel
implements DocumentListener
{
private static final Logger logger = Logger.getLogger(AccountPanel.class);
public static final String USER_NAME_EXAMPLE = "Ex: johnsmith@jabber.org";
private final JPanel userIDPassPanel
= new TransparentPanel(new BorderLayout(10, 10));
private final JPanel labelsPanel = new TransparentPanel();
private final JPanel valuesPanel = new TransparentPanel();
private final JLabel userIDLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.USERNAME"));
private final JLabel passLabel
= new JLabel(Resources.getString("service.gui.PASSWORD"));
private final JPanel emptyPanel = new TransparentPanel();
private final JLabel userIDExampleLabel = new JLabel(USER_NAME_EXAMPLE);
private final JTextField userIDField = new JTextField();
private final JPasswordField passField = new JPasswordField();
private final JCheckBox rememberPassBox = new SIPCommCheckBox(Resources
.getString("service.gui.REMEMBER_PASSWORD"));
private final JPanel registerPanel
= new TransparentPanel(new GridLayout(0, 1));
private final JPanel buttonPanel
= new TransparentPanel(new FlowLayout(FlowLayout.CENTER));
private final JTextArea registerArea = new JTextArea(Resources
.getString("plugin.jabberaccregwizz.REGISTER_NEW_ACCOUNT_TEXT"));
private final JButton registerButton = new JButton(Resources
.getString("plugin.jabberaccregwizz.NEW_ACCOUNT_TITLE"));
private JabberNewAccountDialog jabberNewAccountDialog;
private final FirstWizardPage parentPage;
/**
* Creates an instance of <tt>AccountPanel</tt> by specifying the parent
* wizard page, where it's contained.
* @param parentPage the parent page where this panel is contained
*/
public AccountPanel(final FirstWizardPage parentPage)
{
super(new BorderLayout());
this.parentPage = parentPage;
labelsPanel.setLayout(new BoxLayout(labelsPanel, BoxLayout.Y_AXIS));
valuesPanel.setLayout(new BoxLayout(valuesPanel, BoxLayout.Y_AXIS));
userIDField.getDocument().addDocumentListener(this);
rememberPassBox.setSelected(true);
userIDExampleLabel.setForeground(Color.GRAY);
userIDExampleLabel.setFont(userIDExampleLabel.getFont().deriveFont(8));
emptyPanel.setMaximumSize(new Dimension(40, 35));
userIDExampleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 8, 0));
labelsPanel.add(userIDLabel);
labelsPanel.add(emptyPanel);
labelsPanel.add(passLabel);
valuesPanel.add(userIDField);
valuesPanel.add(userIDExampleLabel);
valuesPanel.add(passField);
userIDPassPanel.add(labelsPanel, BorderLayout.WEST);
userIDPassPanel.add(valuesPanel, BorderLayout.CENTER);
userIDPassPanel.add(rememberPassBox, BorderLayout.SOUTH);
registerButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
if (logger.isDebugEnabled())
logger.debug("Reg OK");
// Open the new account dialog.
jabberNewAccountDialog = new JabberNewAccountDialog();
if (jabberNewAccountDialog.isOK == true)
{
ConnectionPanel connectionPanel
= parentPage.getConnectionPanel();
if (connectionPanel != null)
{
connectionPanel
.setServerAddress(jabberNewAccountDialog.server);
connectionPanel
.setServerPort(jabberNewAccountDialog.port);
}
// This userIDField contains the username "@" the server.
userIDField.setText(jabberNewAccountDialog.userID + "@"
+ jabberNewAccountDialog.server);
passField.setText(jabberNewAccountDialog.password);
}
if (logger.isDebugEnabled())
logger.debug("Reg End");
}
});
buttonPanel.add(registerButton);
registerArea.setEditable(false);
registerArea.setOpaque(false);
registerArea.setLineWrap(true);
registerArea.setWrapStyleWord(true);
registerPanel.add(registerArea);
registerPanel.add(buttonPanel);
registerPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("plugin.jabberaccregwizz.NEW_ACCOUNT_TITLE")));
JPanel mainPanel = new TransparentPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
mainPanel.add(userIDPassPanel);
mainPanel.add(Box.createVerticalStrut(10));
mainPanel.add(registerPanel);
add(mainPanel, BorderLayout.NORTH);
}
/**
* Handles the <tt>DocumentEvent</tt> triggered when user types in the
* UserID field. Enables or disables the "Next" wizard button according to
* whether the UserID field is empty.
*
* @param evt the document event that has triggered this method call.
*/
public void insertUpdate(DocumentEvent evt)
{
parentPage.setNextButtonAccordingToUserIDAndResource();
parentPage.setServerFieldAccordingToUsername(userIDField.getText());
}
/**
* Handles the <tt>DocumentEvent</tt> triggered when user deletes letters
* from the User ID field. Enables or disables the "Next" wizard button
* according to whether the User ID field is empty.
*
* @param evt the document event that has triggered this method call.
*/
public void removeUpdate(DocumentEvent evt)
{
parentPage.setNextButtonAccordingToUserIDAndResource();
parentPage.setServerFieldAccordingToUsername(userIDField.getText());
}
public void changedUpdate(DocumentEvent evt) {}
/**
* Returns the username entered in this panel.
* @return the username entered in this panel
*/
String getUsername()
{
return userIDField.getText();
}
/**
* Sets the username to display in the username field.
* @param username the username to set
*/
void setUsername(String username)
{
userIDField.setText(username);
}
/**
* Returns the password entered in this panel.
* @return the password entered in this panel
*/
char[] getPassword()
{
return passField.getPassword();
}
/**
* Sets the password to display in the password field of this panel.
* @param password the password to set
*/
void setPassword(String password)
{
passField.setText(password);
}
/**
* Indicates if the remember password box is selected.
* @return <tt>true</tt> if the remember password check box is selected,
* otherwise returns <tt>false</tt>
*/
boolean isRememberPassword()
{
return rememberPassBox.isSelected();
}
/**
* Selects/deselects the remember password check box depending on the given
* <tt>isRemember</tt> parameter.
* @param isRemember indicates if the remember password checkbox should be
* selected or not
*/
void setRememberPassword(boolean isRemember)
{
rememberPassBox.setSelected(isRemember);
}
}

@ -0,0 +1,269 @@
/*
* 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.jabberaccregwizz;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import net.java.sip.communicator.util.swing.*;
/**
*
* @author Yana Stamcheva
*/
public class ConnectionPanel
extends TransparentPanel
{
private final TransparentPanel mainPanel = new TransparentPanel();
private final JPanel advancedOpPanel
= new TransparentPanel(new BorderLayout(10, 10));
private final JPanel labelsAdvOpPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
private final JPanel valuesAdvOpPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
private final JCheckBox sendKeepAliveBox = new SIPCommCheckBox(
Resources.getString("plugin.jabberaccregwizz.ENABLE_KEEP_ALIVE"));
private final JCheckBox gmailNotificationsBox = new SIPCommCheckBox(
Resources.getString(
"plugin.jabberaccregwizz.ENABLE_GMAIL_NOTIFICATIONS"));
private final JLabel resourceLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.RESOURCE"));
private final JTextField resourceField
= new JTextField(JabberAccountRegistration.DEFAULT_RESOURCE);
private final JLabel priorityLabel = new JLabel(
Resources.getString("plugin.jabberaccregwizz.PRIORITY"));
private final JTextField priorityField
= new JTextField(JabberAccountRegistration.DEFAULT_PRIORITY);
private final JLabel serverLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.SERVER"));
private final JTextField serverField = new JTextField();
private final JLabel portLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.PORT"));
private final JTextField portField
= new JTextField(JabberAccountRegistration.DEFAULT_PORT);
private final JabberAccountRegistrationWizard wizard;
/**
* Creates an instance of <tt>ConnectionPanel</tt> by specifying the parent
* wizard, where it's contained.
* @param wizard the parent wizard
*/
public ConnectionPanel(JabberAccountRegistrationWizard wizard)
{
super(new BorderLayout());
this.wizard = wizard;
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
portField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent evt)
{
}
public void insertUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
public void removeUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
});
priorityField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent evt)
{
}
public void insertUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
public void removeUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
});
labelsAdvOpPanel.add(serverLabel);
labelsAdvOpPanel.add(portLabel);
labelsAdvOpPanel.add(resourceLabel);
labelsAdvOpPanel.add(priorityLabel);
valuesAdvOpPanel.add(serverField);
valuesAdvOpPanel.add(portField);
valuesAdvOpPanel.add(resourceField);
valuesAdvOpPanel.add(priorityField);
JPanel checkBoxesPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
checkBoxesPanel.add(sendKeepAliveBox);
checkBoxesPanel.add(gmailNotificationsBox);
advancedOpPanel.add(checkBoxesPanel, BorderLayout.NORTH);
advancedOpPanel.add(labelsAdvOpPanel, BorderLayout.WEST);
advancedOpPanel.add(valuesAdvOpPanel, BorderLayout.CENTER);
mainPanel.add(advancedOpPanel);
add(mainPanel, BorderLayout.NORTH);
}
/**
* Returns the server address.
* @return the server address
*/
String getServerAddress()
{
return serverField.getText();
}
/**
* Sets the server address.
* @param serverAddress the server address
*/
void setServerAddress(String serverAddress)
{
serverField.setText(serverAddress);
}
/**
* Returns the server port.
* @return the server port
*/
String getServerPort()
{
return portField.getText();
}
/**
* Sets the server port.
* @param serverPort the server port
*/
void setServerPort(String serverPort)
{
portField.setText(serverPort);
}
/**
* Returns the resource.
* @return the resource
*/
String getResource()
{
return resourceField.getText();
}
/**
* Sets the resource field value.
* @param resource the resource to set
*/
void setResource(String resource)
{
resourceField.setText(resource);
}
/**
* Returns the priority field value.
* @return the priority field value
*/
String getPriority()
{
return priorityField.getText();
}
/**
* Sets the priority field value.
* @param priority the priority field value
*/
void setPriority(String priority)
{
priorityField.setText(priority);
}
/**
* Returns <tt>true</tt> if the "send keep alive" check box is selected,
* otherwise returns <tt>false</tt>.
* @return <tt>true</tt> if the "send keep alive" check box is selected,
* otherwise returns <tt>false</tt>
*/
boolean isSendKeepAlive()
{
return sendKeepAliveBox.isSelected();
}
/**
* Selects/unselects the "send keep alive" check box according to the given
* <tt>isSendKeepAlive</tt> property.
* @param isSendKeepAlive indicates if the "send keep alive" check box
* should be selected or not
*/
void setSendKeepAlive(boolean isSendKeepAlive)
{
sendKeepAliveBox.setSelected(isSendKeepAlive);
}
/**
* Returns <tt>true</tt> if the "gmail notifications" check box is selected,
* otherwise returns <tt>false</tt>.
* @return <tt>true</tt> if the "gmail notifications" check box is selected,
* otherwise returns <tt>false</tt>
*/
boolean isGmailNotificationsEnabled()
{
return gmailNotificationsBox.isSelected();
}
/**
* Selects/unselects the "gmail notifications" check box according to the
* given <tt>isEnabled</tt> property.
* @param isEnabled indicates if the "gmail notifications"
* check box should be selected or not
*/
void setGmailNotificationsEnabled(boolean isEnabled)
{
gmailNotificationsBox.setSelected(isEnabled);
}
/**
* Disables Next Button if Port field value is incorrect
*/
private void setNextButtonAccordingToPortAndPriority()
{
try
{
Integer.parseInt(getServerPort());
Integer.parseInt(getPriority());
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
}
catch (NumberFormatException ex)
{
wizard.getWizardContainer().setNextFinishButtonEnabled(false);
}
}
}

@ -6,16 +6,13 @@
*/
package net.java.sip.communicator.plugin.jabberaccregwizz;
import java.awt.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
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.*;
import net.java.sip.communicator.util.swing.*;
/**
@ -27,92 +24,15 @@
*/
public class FirstWizardPage
extends TransparentPanel
implements WizardPage,
DocumentListener
implements WizardPage
{
private static final Logger logger = Logger
.getLogger(FirstWizardPage.class);
public static final String FIRST_PAGE_IDENTIFIER = "FirstPageIdentifier";
public static final String USER_NAME_EXAMPLE = "Ex: johnsmith@jabber.org";
private JabberNewAccountDialog jabberNewAccountDialog;
private JPanel userIDPassPanel
= new TransparentPanel(new BorderLayout(10, 10));
private JPanel labelsPanel = new TransparentPanel();
private JPanel valuesPanel = new TransparentPanel();
private JLabel userIDLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.USERNAME"));
private JLabel passLabel
= new JLabel(Resources.getString("service.gui.PASSWORD"));
private JPanel emptyPanel = new TransparentPanel();
private JLabel userIDExampleLabel = new JLabel(USER_NAME_EXAMPLE);
private JTextField userIDField = new JTextField();
private JPasswordField passField = new JPasswordField();
private JCheckBox rememberPassBox = new SIPCommCheckBox(Resources
.getString("service.gui.REMEMBER_PASSWORD"));
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 final AccountPanel accountPanel;
private JCheckBox sendKeepAliveBox = new SIPCommCheckBox(Resources
.getString("plugin.jabberaccregwizz.ENABLE_KEEP_ALIVE"));
private final ConnectionPanel connectionPanel;
private JCheckBox gmailNotificationsBox = new SIPCommCheckBox(Resources
.getString("plugin.jabberaccregwizz.ENABLE_GMAIL_NOTIFICATIONS"));
private JLabel resourceLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.RESOURCE"));
private JTextField resourceField
= new JTextField(JabberAccountRegistration.DEFAULT_RESOURCE);
private JLabel priorityLabel = new JLabel(
Resources.getString("plugin.jabberaccregwizz.PRIORITY"));
private JTextField priorityField
= new JTextField(JabberAccountRegistration.DEFAULT_PRIORITY);
private JLabel serverLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.SERVER"));
private JTextField serverField = new JTextField();
private JLabel portLabel
= new JLabel(Resources.getString("plugin.jabberaccregwizz.PORT"));
private JTextField portField
= new JTextField(JabberAccountRegistration.DEFAULT_PORT);
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.jabberaccregwizz.REGISTER_NEW_ACCOUNT_TEXT"));
private JButton registerButton = new JButton(Resources
.getString("plugin.jabberaccregwizz.NEW_ACCOUNT_TITLE"));
private JPanel mainPanel = new TransparentPanel();
private final IceConfigPanel iceConfigPanel;
private Object nextPageIdentifier = WizardPage.SUMMARY_PAGE_IDENTIFIER;
@ -133,17 +53,11 @@ public FirstWizardPage(JabberAccountRegistrationWizard wizard)
this.wizard = wizard;
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
accountPanel = new AccountPanel(this);
connectionPanel = new ConnectionPanel(wizard);
iceConfigPanel = new IceConfigPanel();
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));
}
/**
@ -151,139 +65,19 @@ public FirstWizardPage(JabberAccountRegistrationWizard wizard)
*/
private void init()
{
this.mainPanel.setOpaque(false);
this.labelsPanel.setOpaque(false);
this.valuesPanel.setOpaque(false);
this.emptyPanel.setOpaque(false);
JTabbedPane tabbedPane = new JTabbedPane();
this.userIDField.getDocument().addDocumentListener(this);
this.rememberPassBox.setSelected(true);
this.userIDExampleLabel.setForeground(Color.GRAY);
this.userIDExampleLabel.setFont(userIDExampleLabel.getFont()
.deriveFont(8));
this.emptyPanel.setMaximumSize(new Dimension(40, 35));
this.userIDExampleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0,
8, 0));
labelsPanel.add(userIDLabel);
labelsPanel.add(emptyPanel);
labelsPanel.add(passLabel);
valuesPanel.add(userIDField);
valuesPanel.add(userIDExampleLabel);
valuesPanel.add(passField);
userIDPassPanel.add(labelsPanel, BorderLayout.WEST);
userIDPassPanel.add(valuesPanel, BorderLayout.CENTER);
userIDPassPanel.add(rememberPassBox, BorderLayout.SOUTH);
userIDPassPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("plugin.jabberaccregwizz.USERNAME_AND_PASSWORD")));
mainPanel.add(userIDPassPanel);
portField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent evt)
{
}
public void insertUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
public void removeUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
});
priorityField.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent evt)
{
}
public void insertUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
public void removeUpdate(DocumentEvent evt)
{
setNextButtonAccordingToPortAndPriority();
}
});
labelsAdvOpPanel.add(serverLabel);
labelsAdvOpPanel.add(portLabel);
labelsAdvOpPanel.add(resourceLabel);
labelsAdvOpPanel.add(priorityLabel);
valuesAdvOpPanel.add(serverField);
valuesAdvOpPanel.add(portField);
valuesAdvOpPanel.add(resourceField);
valuesAdvOpPanel.add(priorityField);
JPanel checkBoxesPanel
= new TransparentPanel(new GridLayout(0, 1, 10, 10));
checkBoxesPanel.add(sendKeepAliveBox);
checkBoxesPanel.add(gmailNotificationsBox);
advancedOpPanel.add(checkBoxesPanel, BorderLayout.NORTH);
advancedOpPanel.add(labelsAdvOpPanel, BorderLayout.WEST);
advancedOpPanel.add(valuesAdvOpPanel, BorderLayout.CENTER);
advancedOpPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("plugin.jabberaccregwizz.ADVANCED_OPTIONS")));
mainPanel.add(advancedOpPanel);
registerButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
if (logger.isDebugEnabled())
logger.debug("Reg OK");
// Open the new account dialog.
jabberNewAccountDialog = new JabberNewAccountDialog();
if (jabberNewAccountDialog.isOK == true)
{
serverField.setText(jabberNewAccountDialog.server);
portField.setText(jabberNewAccountDialog.port);
// This userIDField contains the username "@" the server.
userIDField.setText(jabberNewAccountDialog.userID + "@"
+ jabberNewAccountDialog.server);
passField.setText(jabberNewAccountDialog.password);
}
if (logger.isDebugEnabled())
logger.debug("Reg End");
}
});
buttonPanel.add(registerButton);
registerArea.setEditable(false);
registerArea.setOpaque(false);
registerArea.setLineWrap(true);
registerArea.setWrapStyleWord(true);
registerPanel.add(registerArea);
registerPanel.add(buttonPanel);
registerPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("plugin.jabberaccregwizz.NEW_ACCOUNT_TITLE")));
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
mainPanel.add(registerPanel);
tabbedPane.addTab( Resources.getString("service.gui.ACCOUNT"),
accountPanel);
tabbedPane.addTab( Resources.getString("service.gui.CONNECTION"),
connectionPanel);
// tabbedPane.addTab( Resources.getString("service.gui.ADVANCED"),
// iceConfigPanel);
this.add(mainPanel, BorderLayout.NORTH);
add(tabbedPane, BorderLayout.NORTH);
tabbedPane.setSelectedIndex(0);
}
/**
@ -347,27 +141,39 @@ public void commitPage()
{
JabberAccountRegistration registration = wizard.getRegistration();
String userID = userIDField.getText();
String userID = accountPanel.getUsername();
if(userID == null || userID.trim().length() == 0)
throw new IllegalStateException("No user ID provided.");
registration.setUserID(userID);
registration.setPassword(new String(passField.getPassword()));
registration.setRememberPassword(rememberPassBox.isSelected());
registration.setPassword(new String(accountPanel.getPassword()));
registration.setRememberPassword(accountPanel.isRememberPassword());
registration.setServerAddress(serverField.getText());
registration.setSendKeepAlive(sendKeepAliveBox.isSelected());
registration.setServerAddress(connectionPanel.getServerAddress());
registration.setSendKeepAlive(connectionPanel.isSendKeepAlive());
registration.setGmailNotificationEnabled(
this.gmailNotificationsBox.isSelected());
registration.setResource(resourceField.getText());
connectionPanel.isGmailNotificationsEnabled());
registration.setResource(connectionPanel.getResource());
String serverPort = connectionPanel.getServerPort();
if (serverPort != null)
registration.setPort(Integer.parseInt(serverPort));
if (portField.getText() != null)
registration.setPort(Integer.parseInt(portField.getText()));
String priority = connectionPanel.getPriority();
if (priority != null)
registration.setPriority(Integer.parseInt(priority));
if (priorityField.getText() != null)
registration.setPriority(
Integer.parseInt(priorityField.getText()));
registration.setUseIce(iceConfigPanel.isUseIce());
registration.setAutoDiscoverStun(iceConfigPanel.isAutoDiscoverStun());
Iterator<StunServer> stunServers
= iceConfigPanel.getAdditionalStunServers().iterator();
while (stunServers.hasNext())
{
registration.addStunServer(stunServers.next());
}
nextPageIdentifier = SUMMARY_PAGE_IDENTIFIER;
@ -378,14 +184,14 @@ public void commitPage()
* Enables or disables the "Next" wizard button according to whether the
* UserID field is empty.
*/
private void setNextButtonAccordingToUserIDAndResource()
void setNextButtonAccordingToUserIDAndResource()
{
boolean nextFinishButtonEnabled = false;
String userID = userIDField.getText();
String userID = accountPanel.getUsername();
if ((userID != null) && !userID.equals(""))
{
String resource = resourceField.getText();
String resource = connectionPanel.getResource();
if ((resource != null) && !resource.equals(""))
{
nextFinishButtonEnabled = true;
@ -397,49 +203,11 @@ private void setNextButtonAccordingToUserIDAndResource()
.setNextFinishButtonEnabled(nextFinishButtonEnabled);
}
/**
* Handles the <tt>DocumentEvent</tt> triggered when user types in the
* UserID field. Enables or disables the "Next" wizard button according to
* whether the UserID field is empty.
*
* @param evt the document event that has triggered this method call.
*/
public void insertUpdate(DocumentEvent evt)
{
this.setNextButtonAccordingToUserIDAndResource();
public void pageHiding() {}
this.setServerFieldAccordingToUserID();
}
public void pageShown() {}
/**
* Handles the <tt>DocumentEvent</tt> triggered when user deletes letters
* from the User ID field. Enables or disables the "Next" wizard button
* according to whether the User ID field is empty.
*
* @param evt the document event that has triggered this method call.
*/
public void removeUpdate(DocumentEvent evt)
{
this.setNextButtonAccordingToUserIDAndResource();
this.setServerFieldAccordingToUserID();
}
public void changedUpdate(DocumentEvent evt)
{
}
public void pageHiding()
{
}
public void pageShown()
{
}
public void pageBack()
{
}
public void pageBack() {}
/**
* Fills the User ID and Password fields in this panel with the data coming
@ -457,45 +225,91 @@ public void loadAccount(ProtocolProviderService protocolProvider)
String password
= accountProperties.get(ProtocolProviderFactory.PASSWORD);
this.userIDField.setEnabled(false);
this.userIDField.setText(accountID.getUserID());
accountPanel.setRememberPassword(false);
accountPanel.setUsername(accountID.getUserID());
if (password != null)
{
this.passField.setText(password);
this.rememberPassBox.setSelected(true);
accountPanel.setPassword(password);
accountPanel.setRememberPassword(true);
}
String serverAddress
= accountProperties.get(ProtocolProviderFactory.SERVER_ADDRESS);
serverField.setText(serverAddress);
connectionPanel.setServerAddress(serverAddress);
String serverPort
= accountProperties.get(ProtocolProviderFactory.SERVER_PORT);
portField.setText(serverPort);
connectionPanel.setServerPort(serverPort);
boolean keepAlive
= Boolean.parseBoolean(accountProperties.get("SEND_KEEP_ALIVE"));
sendKeepAliveBox.setSelected(keepAlive);
connectionPanel.setSendKeepAlive(keepAlive);
boolean gmailNotificationEnabled
= Boolean.parseBoolean(
accountProperties.get("GMAIL_NOTIFICATIONS_ENABLED"));
gmailNotificationsBox.setSelected(gmailNotificationEnabled);
connectionPanel.setGmailNotificationsEnabled(gmailNotificationEnabled);
String resource
= accountProperties.get(ProtocolProviderFactory.RESOURCE);
resourceField.setText(resource);
connectionPanel.setResource(resource);
String priority
= accountProperties.get(ProtocolProviderFactory.RESOURCE_PRIORITY);
priorityField.setText(priority);
connectionPanel.setPriority(priority);
// Disable STUN and ICE configs until it's implemented.
//
// boolean isUseIce
// = Boolean.parseBoolean(
// accountProperties.get(ProtocolProviderFactory.IS_USE_ICE));
//
// iceConfigPanel.setUseIce(isUseIce);
//
// boolean isAutoDiscoverStun
// = Boolean.parseBoolean(
// accountProperties.get(
// ProtocolProviderFactory.AUTO_DISCOVER_STUN));
//
// iceConfigPanel.setAutoDiscoverStun(isAutoDiscoverStun);
for (int i = 0; i < 100; i ++)
{
String stunAddress = accountProperties
.get(ProtocolProviderFactory.STUN_ADDRESS + i);
// If we don't find a stun address with the given index, it means
// that there're no more in the properties table, so we're nothing
// more to do here.
if (stunAddress == null)
break;
String stunPort = accountProperties
.get(ProtocolProviderFactory.STUN_PORT + i);
String stunUsername = accountProperties
.get(ProtocolProviderFactory.STUN_USERNAME + i);
String stunPassword = accountProperties
.get(ProtocolProviderFactory.STUN_PASSWORD + i);
boolean stunIsTurnSupported
= Boolean.parseBoolean(accountProperties
.get(ProtocolProviderFactory.STUN_IS_TURN_SUPPORTED + i));
StunServer stunServer = new StunServer( stunAddress,
stunPort,
stunIsTurnSupported,
stunUsername,
stunPassword.toCharArray(),
i);
iceConfigPanel.addStunServer(stunServer);
}
this.isServerOverridden
= accountID.getAccountPropertyBoolean(
@ -504,43 +318,44 @@ public void loadAccount(ProtocolProviderService protocolProvider)
}
/**
* Parse the server part from the jabber id and set it to server as default
* value. If Advanced option is enabled Do nothing.
* Returns the simple form.
* @return the simple form
*/
private void setServerFieldAccordingToUserID()
public Object getSimpleForm()
{
if (!wizard.isModification() || !isServerOverridden)
{
String userId = userIDField.getText();
serverField.setText(wizard.getServerFromUserName(userId));
}
return accountPanel;
}
/**
* Disables Next Button if Port field value is incorrect
* Indicates if this page has been already committed.
* @return <tt>true</tt> if this page has been already committed,
* <tt>false</tt> - otherwise
*/
private void setNextButtonAccordingToPortAndPriority()
public boolean isCommitted()
{
try
{
Integer.parseInt(portField.getText());
Integer.parseInt(priorityField.getText());
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
}
catch (NumberFormatException ex)
{
wizard.getWizardContainer().setNextFinishButtonEnabled(false);
}
return isCommitted;
}
public Object getSimpleForm()
/**
* Parse the server part from the jabber id and set it to server as default
* value. If the server was overriden do nothing.
* @param username the username from which to extract the server address
*/
void setServerFieldAccordingToUsername(String username)
{
return userIDPassPanel;
if (!wizard.isModification() || !isServerOverridden)
{
connectionPanel.setServerAddress(
wizard.getServerFromUserName(username));
}
}
public boolean isCommitted()
/**
* Returns the contained connection panel.
* @return the contained connection panel
*/
ConnectionPanel getConnectionPanel()
{
return isCommitted;
return connectionPanel;
}
}

@ -0,0 +1,526 @@
/*
* 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.jabberaccregwizz;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.table.*;
import net.java.sip.communicator.util.swing.*;
/**
*
* @author Yana Stamcheva
*/
public class IceConfigPanel
extends TransparentPanel
{
/**
* The check box allowing the user to choose to use ICE.
*/
private final JCheckBox iceBox = new SIPCommCheckBox(
Resources.getString("plugin.jabberaccregwizz.USE_ICE"));
/**
* The check box allowing the user to choose to automatically discover
* STUN servers.
*/
private final JCheckBox autoDiscoverBox = new SIPCommCheckBox(
Resources.getString("plugin.jabberaccregwizz.AUTO_DISCOVER_STUN"));
/**
* The table model for our additional stun servers table.
*/
private final DefaultTableModel tableModel = new StunServerTableModel();
/**
* The stun server table.
*/
private final JTable table = new JTable(tableModel);
/**
* Creates an instance of <tt>IceConfigPanel</tt>.
*/
public IceConfigPanel()
{
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
iceBox.setAlignmentX(Component.LEFT_ALIGNMENT);
autoDiscoverBox.setAlignmentX(Component.LEFT_ALIGNMENT);
JPanel checkBoxPanel = new TransparentPanel(new GridLayout(0, 1));
checkBoxPanel.add(iceBox);
checkBoxPanel.add(autoDiscoverBox);
add(checkBoxPanel);
add(Box.createVerticalStrut(10));
add(createAdditionalServersComponent());
}
/**
* Creates the list of additional STUN/TURN servers that are added by the
* user.
* @return the created component
*/
private Component createAdditionalServersComponent()
{
table.setPreferredScrollableViewportSize(new Dimension(450, 60));
tableModel.addColumn(
Resources.getString("plugin.jabberaccregwizz.IP_ADDRESS")
+ "/" + Resources.getString("plugin.jabberaccregwizz.PORT"));
tableModel.addColumn(
Resources.getString("plugin.jabberaccregwizz.SUPPORT_TURN"));
table.setDefaultRenderer( StunServer.class,
new StunServerCellRenderer());
//Create the scroll pane and add the table to it.
JScrollPane scrollPane = new JScrollPane(table);
JButton addButton
= new JButton(Resources.getString("service.gui.ADD"));
addButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
StunConfigDialog stunDialog = new StunConfigDialog();
stunDialog.setVisible(true);
}
});
JButton editButton
= new JButton(Resources.getString("service.gui.EDIT"));
editButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
StunServer stunServer
= (StunServer) tableModel.getValueAt(
table.getSelectedRow(), 0);
if (stunServer != null)
{
StunConfigDialog dialog
= new StunConfigDialog( stunServer.getIpAddress(),
stunServer.getPort(),
stunServer.isSupportTurn(),
stunServer.getUsername(),
stunServer.getPassword());
dialog.setVisible(true);
}
}
});
JButton deleteButton
= new JButton(Resources.getString("service.gui.DELETE"));
deleteButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
tableModel.removeRow(table.getSelectedRow());
}
});
TransparentPanel buttonsPanel
= new TransparentPanel(new FlowLayout(FlowLayout.RIGHT));
buttonsPanel.add(addButton);
buttonsPanel.add(editButton);
buttonsPanel.add(deleteButton);
TransparentPanel mainPanel = new TransparentPanel(new BorderLayout());
mainPanel.setBorder(BorderFactory.createTitledBorder(
Resources.getString(
"plugin.jabberaccregwizz.ADDITIONAL_STUN_SERVERS")));
mainPanel.add(scrollPane);
mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
return mainPanel;
}
/**
* The STUN configuration window.
*/
private class StunConfigDialog extends SIPCommDialog
{
private final JPanel mainPanel = new TransparentPanel(new BorderLayout());
private final JTextField addressField = new JTextField();
private final JTextField portField = new JTextField();
private final JCheckBox supportTurnCheckBox = new JCheckBox(
Resources.getString("plugin.jabberaccregwizz.SUPPORT_TURN"));
private final JTextField usernameField = new JTextField();
private final JPasswordField passwordField = new JPasswordField();
private JEditorPane errorMessagePane;
public StunConfigDialog(String address,
String port,
boolean isSupportTurn,
String username,
char[] password)
{
this();
addressField.setText(address);
portField.setText(port);
supportTurnCheckBox.setSelected(isSupportTurn);
usernameField.setText(username);
passwordField.setText(password.toString());
}
public StunConfigDialog()
{
super(false);
setTitle(Resources.getString(
"plugin.jabberaccregwizz.ADD_STUN_SERVER"));
JLabel addressLabel = new JLabel(
Resources.getString("plugin.jabberaccregwizz.IP_ADDRESS"));
JLabel portLabel = new JLabel(
Resources.getString("plugin.jabberaccregwizz.PORT"));
JLabel usernameLabel = new JLabel(
Resources.getString("plugin.jabberaccregwizz.USERNAME"));
JLabel passwordLabel = new JLabel(
Resources.getString("service.gui.PASSWORD"));
TransparentPanel labelsPanel
= new TransparentPanel(new GridLayout(0, 1));
labelsPanel.add(new JLabel());
labelsPanel.add(addressLabel);
labelsPanel.add(portLabel);
labelsPanel.add(usernameLabel);
labelsPanel.add(passwordLabel);
TransparentPanel valuesPanel
= new TransparentPanel(new GridLayout(0, 1));
valuesPanel.add(supportTurnCheckBox);
valuesPanel.add(addressField);
valuesPanel.add(portField);
valuesPanel.add(usernameField);
valuesPanel.add(passwordField);
JButton addButton
= new JButton(Resources.getString("service.gui.ADD"));
JButton cancelButton
= new JButton(Resources.getString("service.gui.CANCEL"));
addButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String address = addressField.getText();
String port = portField.getText();
String username = usernameField.getText();
char[] password = passwordField.getPassword();
String errorMessage = null;
if (address == null || address.length() <= 0)
errorMessage = Resources.getString(
"plugin.jabberaccregwizz.NO_STUN_ADDRESS");
if (username == null || username.length() <= 0)
errorMessage = Resources.getString(
"plugin.jabberaccregwizz.NO_STUN_USERNAME");
if (port == null || port.length() <= 0)
port = JabberAccountRegistration.DEFAULT_STUN_PORT;
if (containsStunServer(address, port))
errorMessage = Resources.getString(
"plugin.jabberaccregwizz.STUN_ALREADY_EXIST");
if (errorMessage != null)
{
loadErrorMessage(errorMessage);
return;
}
StunServer stunServer = new StunServer(
address,
port,
supportTurnCheckBox.isSelected(),
username,
password,
table.getRowCount());
addStunServer(stunServer);
dispose();
}
});
cancelButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
dispose();
}
});
TransparentPanel buttonsPanel
= new TransparentPanel(new FlowLayout(FlowLayout.RIGHT));
buttonsPanel.add(addButton);
buttonsPanel.add(cancelButton);
mainPanel.add(labelsPanel, BorderLayout.WEST);
mainPanel.add(valuesPanel, BorderLayout.CENTER);
mainPanel.add(buttonsPanel, BorderLayout.SOUTH);
mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
getContentPane().add(mainPanel, BorderLayout.NORTH);
pack();
}
/**
* Loads the given error message in the current dialog, by re-validating
* the content.
*
* @param errorMessage The error message to load.
*/
private void loadErrorMessage(String errorMessage)
{
if (errorMessagePane == null)
{
errorMessagePane = new JEditorPane();
errorMessagePane.setOpaque(false);
errorMessagePane.setForeground(Color.RED);
mainPanel.add(errorMessagePane, BorderLayout.NORTH);
}
errorMessagePane.setText(errorMessage);
mainPanel.revalidate();
mainPanel.repaint();
this.pack();
//WORKAROUND: there's something wrong happening in this pack and
//components get cluttered, partially hiding the password text field.
//I am under the impression that this has something to do with the
//message pane preferred size being ignored (or being 0) which is why
//I am adding it's height to the dialog. It's quite ugly so please fix
//if you have something better in mind.
this.setSize(getWidth(), getHeight()+errorMessagePane.getHeight());
}
@Override
protected void close(boolean escaped) {}
}
/**
* A custom cell renderer used in the cell containing the
* <tt>StunServer</tt> instance.
*/
private static class StunServerCellRenderer
extends DefaultTableCellRenderer
{
// We need a place to store the color the JLabel should be returned
// to after its foreground and background colors have been set
// to the selection background color.
// These ivars will be made protected when their names are finalized.
private Color unselectedForeground;
private Color unselectedBackground;
/**
* Overrides <code>JComponent.setForeground</code> to assign
* the unselected-foreground color to the specified color.
*
* @param c set the foreground color to this value
*/
public void setForeground(Color c)
{
super.setForeground(c);
unselectedForeground = c;
}
/**
* Overrides <code>JComponent.setBackground</code> to assign
* the unselected-background color to the specified color.
*
* @param c set the background color to this value
*/
public void setBackground(Color c)
{
super.setBackground(c);
unselectedBackground = c;
}
public Component getTableCellRendererComponent( JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{
if (value instanceof StunServer)
{
StunServer stunServer = (StunServer) value;
this.setText( stunServer.getIpAddress()
+ "/" + stunServer.getPort());
if (isSelected)
{
super.setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
}
else
{
super.setForeground((unselectedForeground != null)
? unselectedForeground
: table.getForeground());
super.setBackground((unselectedBackground != null)
? unselectedBackground
: table.getBackground());
}
}
else
return super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
return this;
}
}
/**
* A custom table model, with a non editable cells and a custom class column
* objects.
*
*/
private class StunServerTableModel
extends DefaultTableModel
{
/**
* Returns the class of the objects contained in the column given by
* the index. The class is used to distinguish which renderer should be
* used.
*
* @param columnIndex the column being queried
* @return the class of objects contained in the column
*/
public Class getColumnClass(int columnIndex)
{
return getValueAt(0, columnIndex).getClass();
}
/**
* Returns <tt>false</tt> to indicate that none of the columns is
* editable.
*
* @param row the row whose value is to be queried
* @param column the column whose value is to be queried
* @return false
*/
public boolean isCellEditable(int row, int column)
{
return false;
}
}
/**
* Indicates if ice should be used for this account.
* @return <tt>true</tt> if ICE should be used for this account, otherwise
* returns <tt>false</tt>
*/
boolean isUseIce()
{
return iceBox.isSelected();
}
/**
* Sets the <tt>useIce</tt> property.
* @param isUseIce <tt>true</tt> to indicate that ICE should be used for
* this account, <tt>false</tt> - otherwise.
*/
void setUseIce(boolean isUseIce)
{
iceBox.setSelected(isUseIce);
}
/**
* Indicates if the stun server should be automatically discovered.
* @return <tt>true</tt> if the stun server should be automatically
* discovered, otherwise returns <tt>false</tt>.
*/
boolean isAutoDiscoverStun()
{
return autoDiscoverBox.isSelected();
}
/**
* Sets the <tt>autoDiscoverStun</tt> property.
* @param isAutoDiscover <tt>true</tt> to indicate that stun server should
* be auto-discovered, <tt>false</tt> - otherwise.
*/
void setAutoDiscoverStun(boolean isAutoDiscover)
{
autoDiscoverBox.setSelected(isAutoDiscover);
}
/**
* Returns the list of additional stun servers entered by the user.
* @return the list of additional stun servers entered by the user
*/
@SuppressWarnings("unchecked")
List<StunServer> getAdditionalStunServers()
{
LinkedList<StunServer> serversList = new LinkedList<StunServer>();
Iterator i = tableModel.getDataVector().iterator();
while(i.hasNext())
{
Vector row = (Vector) i.next();
serversList.add((StunServer) row.elementAt(0));
}
return serversList;
}
/**
* Adds the given <tt>stunServer</tt> to the list of additional stun
* servers.
* @param stunServer the stun server to add
*/
void addStunServer(StunServer stunServer)
{
tableModel.addRow(new Object[]{stunServer,
stunServer.isSupportTurn()});
}
/**
* Indicates if a stun server with the given <tt>address</tt> and
* <tt>port</tt> already exists in the additional stun servers table.
* @param address the STUN server address to check
* @param port the STUN server port to check
* @return <tt>true</tt> if a STUN server with the given <tt>address</tt>
* and <tt>port</tt> already exists in the table, otherwise returns
* <tt>false</tt>
*/
boolean containsStunServer(String address, String port)
{
for (int i = 0; i < tableModel.getRowCount(); i++)
{
StunServer stunServer = (StunServer) tableModel.getValueAt(i, 0);
if (stunServer.getIpAddress().equalsIgnoreCase(address)
&& stunServer.getPort().equalsIgnoreCase(port))
return true;
}
return false;
}
}

@ -6,6 +6,8 @@
*/
package net.java.sip.communicator.plugin.jabberaccregwizz;
import java.util.*;
/**
* The <tt>JabberAccountRegistration</tt> is used to store all user input data
* through the <tt>JabberAccountRegistrationWizard</tt>.
@ -14,30 +16,86 @@
*/
public class JabberAccountRegistration
{
/**
* The default value of server port for jabber accounts.
*/
public static final String DEFAULT_PORT = "5222";
/**
* The default value of the priority property.
*/
public static final String DEFAULT_PRIORITY = "10";
/**
* The default value of the resource property.
*/
public static final String DEFAULT_RESOURCE = "sip-comm";
/**
* The default value of stun server port for jabber accounts.
*/
public static final String DEFAULT_STUN_PORT = "3478";
/**
* The user identifier.
*/
private String userID;
/**
* The password.
*/
private String password;
/**
* Indicates if the password should be remembered.
*/
private boolean rememberPassword = true;
/**
* The server address.
*/
private String serverAddress;
/**
* The port.
*/
private int port = new Integer(DEFAULT_PORT).intValue();
/**
* The resource property, initialized to the default resource.
*/
private String resource = DEFAULT_RESOURCE;
/**
* The priority property.
*/
private int priority = new Integer(DEFAULT_PRIORITY).intValue();
/**
* Indicates if keep alive packets should be send.
*/
private boolean sendKeepAlive = true;
/**
* Indicates if gmail notifications should be enabled.
*/
private boolean enableGmailNotification = false;
/**
* Indicates if ICE should be used.
*/
private boolean isUseIce = false;
/**
* Indicates if STUN server should be automatically discovered.
*/
private boolean isAutoDiscoverStun = false;
/**
* The list of additional STUN servers entered by user.
*/
private LinkedList<StunServer> additionalStunServers;
/**
* Returns the password of the jabber registration account.
* @return the password of the jabber registration account.
@ -179,23 +237,103 @@ public void setGmailNotificationEnabled(boolean enabled)
this.enableGmailNotification = enabled;
}
/**
* Returns the resource.
* @return the resource
*/
public String getResource()
{
return resource;
}
/**
* Sets the resource.
* @param resource the resource for the jabber account
*/
public void setResource(String resource)
{
this.resource = resource;
}
/**
* Returns the priority property.
* @return priority
*/
public int getPriority()
{
return priority;
}
/**
* Sets the priority property.
* @param priority the priority to set
*/
public void setPriority(int priority)
{
this.priority = priority;
}
/**
* Indicates if ice should be used for this account.
* @return <tt>true</tt> if ICE should be used for this account, otherwise
* returns <tt>false</tt>
*/
public boolean isUseIce()
{
return isUseIce;
}
/**
* Sets the <tt>useIce</tt> property.
* @param isUseIce <tt>true</tt> to indicate that ICE should be used for
* this account, <tt>false</tt> - otherwise.
*/
public void setUseIce(boolean isUseIce)
{
this.isUseIce = isUseIce;
}
/**
* Indicates if the stun server should be automatically discovered.
* @return <tt>true</tt> if the stun server should be automatically
* discovered, otherwise returns <tt>false</tt>.
*/
public boolean isAutoDiscoverStun()
{
return isAutoDiscoverStun;
}
/**
* Sets the <tt>autoDiscoverStun</tt> property.
* @param isAutoDiscover <tt>true</tt> to indicate that stun server should
* be auto-discovered, <tt>false</tt> - otherwise.
*/
public void setAutoDiscoverStun(boolean isAutoDiscover)
{
this.isAutoDiscoverStun = isAutoDiscover;
}
/**
* Adds the given <tt>stunServer</tt> to the list of additional stun servers.
* @param stunServer the <tt>StunServer</tt> to add
*/
public void addStunServer(StunServer stunServer)
{
if (additionalStunServers == null)
additionalStunServers = new LinkedList<StunServer>();
additionalStunServers.add(stunServer);
}
/**
* Returns an <tt>Iterator</tt> over a list of all additional stun servers
* entered by the user.
* @return an <tt>Iterator</tt> over a list of all additional stun servers
*/
public Iterator<StunServer> getAdditionalStunServers()
{
if (additionalStunServers != null)
return additionalStunServers.iterator();
return null;
}
}

@ -157,9 +157,10 @@ public Iterator<Map.Entry<String,String>> getSummary()
}
/**
* Installs the account created through this wizard.
*
* @return ProtocolProviderService
* Installs the account defined in this wizard.
* @return the created <tt>ProtocolProviderService</tt> corresponding to the
* new account
* @throws OperationFailedException if the operation didn't succeed
*/
public ProtocolProviderService signin()
throws OperationFailedException
@ -170,6 +171,15 @@ public ProtocolProviderService signin()
registration.getPassword());
}
/**
* Installs the account defined in this wizard.
*
* @param userName the user name to sign in with
* @param password the password to sign in with
* @return the created <tt>ProtocolProviderService</tt> corresponding to the
* new account
* @throws OperationFailedException if the operation didn't succeed
*/
public ProtocolProviderService signin(String userName, String password)
throws OperationFailedException
{
@ -189,6 +199,7 @@ public ProtocolProviderService signin(String userName, String password)
* @param userName the user identifier
* @param passwd the password
* @return the <tt>ProtocolProviderService</tt> for the new account.
* @throws OperationFailedException if the operation didn't succeed
*/
public ProtocolProviderService installAccount(
ProtocolProviderFactory providerFactory,
@ -235,13 +246,58 @@ public ProtocolProviderService installAccount(
serverName);
accountProperties.put(ProtocolProviderFactory.SERVER_PORT,
String.valueOf(registration.getPort()));
String.valueOf(registration.getPort()));
accountProperties.put(ProtocolProviderFactory.RESOURCE,
registration.getResource());
registration.getResource());
accountProperties.put(ProtocolProviderFactory.RESOURCE_PRIORITY,
String.valueOf(registration.getPriority()));
String.valueOf(registration.getPriority()));
// Disable STUN and ICE configs until it's implemented.
//
// accountProperties.put(ProtocolProviderFactory.IS_USE_ICE,
// String.valueOf(registration.isUseIce()));
//
// accountProperties.put(ProtocolProviderFactory.AUTO_DISCOVER_STUN,
// String.valueOf(registration.isAutoDiscoverStun()));
Iterator<StunServer> stunServers
= registration.getAdditionalStunServers();
while(stunServers != null && stunServers.hasNext())
{
StunServer stunServer = stunServers.next();
int stunIndex = stunServer.getIndex();
String stunPort = stunServer.getPort();
String stunUsername = stunServer.getUsername();
String stunPassword = stunServer.getPassword().toString();
boolean isSupportTurn = stunServer.isSupportTurn();
accountProperties.put(
ProtocolProviderFactory.STUN_ADDRESS + stunIndex,
stunServer.getIpAddress());
if (stunPort != null && stunPort.length() > 0)
accountProperties.put(
ProtocolProviderFactory.STUN_PORT + stunIndex,
stunPort);
if (stunUsername != null && stunUsername.length() > 0)
accountProperties.put(
ProtocolProviderFactory.STUN_USERNAME + stunIndex,
stunUsername);
if (stunPassword != null && stunPassword.length() > 0)
accountProperties.put(
ProtocolProviderFactory.STUN_PASSWORD + stunIndex,
stunPassword);
accountProperties.put(
ProtocolProviderFactory.STUN_IS_TURN_SUPPORTED + stunIndex,
new Boolean(isSupportTurn).toString());
}
if (isModification)
{
@ -399,7 +455,7 @@ public void setModification(boolean isModification)
*/
public String getUserNameExample()
{
return FirstWizardPage.USER_NAME_EXAMPLE;
return AccountPanel.USER_NAME_EXAMPLE;
}
/**

@ -0,0 +1,173 @@
package net.java.sip.communicator.plugin.jabberaccregwizz;
/**
* The <tt>StunServer</tt> keeps all information related to the stun server.
*
* @author Yana Stamcheva
*/
public class StunServer
{
/**
* The IP address of the server.
*/
private String ipAddress;
/**
* The port of the server.
*/
private String port;
/**
* Indicates if Turn is supported by this server.
*/
private boolean supportTurn;
/**
* The username.
*/
private String username;
/**
* The password.
*/
private char[] password;
/**
* The index of this server in the additional servers table.
*/
private int index;
/**
* Creates an instance of <tt>StunServer</tt> by specifying all parameters.
* @param ipAddress the IP address of the STUN server
* @param port the port of the server
* @param supportTurn indicates if this STUN server supports TURN
* @param username the user name for authenticating
* @param password the password
* @param index the index of this server in the additional servers table
*/
public StunServer( String ipAddress,
String port,
boolean supportTurn,
String username,
char[] password,
int index)
{
this.ipAddress = ipAddress;
this.port = port;
this.supportTurn = supportTurn;
this.username = username;
this.password = password;
this.index = index;
}
/**
* Returns the IP address of this server.
* @return the IP address of this server
*/
String getIpAddress()
{
return ipAddress;
}
/**
* Sets the IP address of this server.
* @param ipAddress the IP address to set
*/
void setIpAddress(String ipAddress)
{
this.ipAddress = ipAddress;
}
/**
* Returns the port of this server.
* @return the port of this server
*/
String getPort()
{
return port;
}
/**
* Sets the port corresponding to this server.
* @param port the port to set
*/
void setPort(String port)
{
this.port = port;
}
/**
* Indicates if Turn is supported by this server.
* @return <tt>true</tt> if Turn is supported by this server, otherwise -
* returns <tt>false</tt>
*/
boolean isSupportTurn()
{
return supportTurn;
}
/**
* Sets the support turn property to indicate if this server supports Turn.
* @param supportTurn <tt>true</tt> to indicate that Turn is supported,
* <tt>false</tt> - otherwise
*/
void setSupportTurn(boolean supportTurn)
{
this.supportTurn = supportTurn;
}
/**
* Returns the username associated to this server.
* @return the username associated to this server
*/
String getUsername()
{
return username;
}
/**
* Sets the username associated to this server.
* @param username the username to set
*/
void setUsername(String username)
{
this.username = username;
}
/**
* Returns the password associated to this server username.
* @return the password associated to this server username
*/
char[] getPassword()
{
return password;
}
/**
* Sets the password associated to this server username.
* @param password the password to set
*/
void setPassword(char[] password)
{
this.password = password;
}
/**
* The index of this server int the additional stun servers table.
* @return the index of this server int the additional stun servers table
*/
int getIndex()
{
return index;
}
/**
* Sets the index of this server int the additional stun servers table.
* @param index the index to set
*/
void setIndex(int index)
{
this.index = index;
}
}

@ -118,6 +118,9 @@ public interface AccountRegistrationWizard
/**
* Defines the operations that will be executed when the user clicks on
* the wizard "Signin" button.
* @return the created <tt>ProtocolProviderService</tt> corresponding to the
* new account
* @throws OperationFailedException if the operation didn't succeed
*/
public ProtocolProviderService signin()
throws OperationFailedException;
@ -125,9 +128,12 @@ public ProtocolProviderService signin()
/**
* Defines the operations that will be executed when the user clicks on
* the wizard "Signin" button.
*
*
* @param userName the user name to sign in with
* @param password the password to sign in with
* @return the created <tt>ProtocolProviderService</tt> corresponding to the
* new account
* @throws OperationFailedException if the operation didn't succeed
*/
public ProtocolProviderService signin( String userName,
String password)

@ -255,6 +255,42 @@ public abstract class ProtocolProviderFactory
*/
public static final String IS_ACCOUNT_DISABLED = "IS_ACCOUNT_DISABLED";
/**
* Indicates if ICE should be used.
*/
public static final String IS_USE_ICE = "IS_USE_ICE";
/**
* Indicates if STUN server should be automatically discovered.
*/
public static final String AUTO_DISCOVER_STUN = "AUTO_DISCOVER_STUN";
/**
* The base property name for address of additional STUN servers specified.
*/
public static final String STUN_ADDRESS = "STUN_ADDRESS";
/**
* The base property name for port of additional STUN servers specified.
*/
public static final String STUN_PORT = "STUN_PORT";
/**
* The base property name for username of additional STUN servers specified.
*/
public static final String STUN_USERNAME = "STUN_USERNAME";
/**
* The base property name for password of additional STUN servers specified.
*/
public static final String STUN_PASSWORD = "STUN_PASSWORD";
/**
* The base property name for the turn supported property of additional
* STUN servers specified.
*/
public static final String STUN_IS_TURN_SUPPORTED = "STUN_IS_TURN_SUPPORTED";
/**
* The <code>BundleContext</code> containing (or to contain) the service
* registration of this factory.

@ -21,7 +21,6 @@
public abstract class SIPCommDialog
extends JDialog
{
/**
* The <tt>Logger</tt> used by the <tt>SIPCommDialog</tt> class and its
* instances for logging output.

Loading…
Cancel
Save