Adding a GoogleTalk Wizard (Contributed by Lubomir Marinov)

cusax-fix
Emil Ivov 18 years ago
parent 9d944c7023
commit dc5a595eb0

@ -624,7 +624,8 @@
bundle-plugin-statusupdate,
bundle-updatecheckplugin,
bundle-dict,bundle-plugin-dictaccregwizz,
bundle-plugin-simpleaccreg,bundle-plugin-generalconfig"/>
bundle-plugin-simpleaccreg,bundle-plugin-generalconfig,
bundle-plugin-googletalkaccregwizz"/>
<!--BUNDLE-HISTORY-->
<target name="bundle-history">
@ -1198,6 +1199,20 @@ javax.swing.event, javax.swing.border"/>
</jar>
</target>
<!-- BUNDLE-PLUGIN-GOOGLETALKACCREGWIZZ -->
<target name="bundle-plugin-googletalkaccregwizz">
<!-- Creates a bundle for the plugin Google Talk Account Registration Wizard.-->
<jar compress="false" destfile="${bundles.dest}/googletalkaccregwizz.jar"
manifest="${src}/net/java/sip/communicator/plugin/googletalkaccregwizz/googletalkaccregwizz.manifest.mf">
<zipfileset dir="${dest}/net/java/sip/communicator/plugin/googletalkaccregwizz"
prefix="net/java/sip/communicator/plugin/googletalkaccregwizz"/>
<zipfileset dir="${resources}/images/protocol/googletalk"
prefix="resources/images/protocol/googletalk"/>
<zipfileset dir="${resources}/languages/plugin/googletalkaccregwizz"
prefix="resources/languages/plugin/googletalkaccregwizz"/>
</jar>
</target>
<!-- BUNDLE-PLUGIN-MSNACCREGWIZZ -->
<target name="bundle-plugin-msnaccregwizz">
<!-- Creates a bundle for the plugin Msn Account Registration Wizard.-->

@ -0,0 +1,582 @@
/*
* 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.googletalkaccregwizz;
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.*;
/**
* The <tt>FirstWizardPage</tt> is the page, where user could enter the user
* ID and the password of the account.
*
* @author Lubomir Marinov
*/
public class FirstWizardPage
extends JPanel
implements WizardPage,
DocumentListener
{
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@gmail.com";
private JPanel userIDPassPanel = new JPanel(new BorderLayout(10, 10));
private JPanel labelsPanel = new JPanel();
private JPanel valuesPanel = new JPanel();
private JLabel userIDLabel = new JLabel(Resources.getString("username"));
private JLabel passLabel = new JLabel(Resources.getString("password"));
private JLabel existingAccountLabel = new JLabel(Resources
.getString("existingAccount"));
private JPanel emptyPanel = new JPanel();
private JLabel userIDExampleLabel = new JLabel(USER_NAME_EXAMPLE);
private JTextField userIDField = new JTextField();
private JPasswordField passField = new JPasswordField();
private JCheckBox rememberPassBox = new JCheckBox(Resources
.getString("rememberPassword"));
private JPanel advancedOpPanel = new JPanel(new BorderLayout(10, 10));
private JPanel labelsAdvOpPanel = new JPanel(new GridLayout(0, 1, 10, 10));
private JPanel valuesAdvOpPanel = new JPanel(new GridLayout(0, 1, 10, 10));
private JCheckBox sendKeepAliveBox = new JCheckBox(Resources
.getString("enableKeepAlive"));
private JCheckBox enableAdvOpButton = new JCheckBox(Resources
.getString("ovverideServerOps"), false);
private JLabel resourceLabel = new JLabel(Resources.getString("resource"));
private JTextField resourceField
= new JTextField(GoogleTalkAccountRegistration.DEFAULT_RESOURCE);
private JLabel priorityLabel = new JLabel(Resources.getString("priority"));
private JTextField priorityField
= new JTextField(GoogleTalkAccountRegistration.DEFAULT_PRIORITY);
private JLabel serverLabel = new JLabel(Resources.getString("server"));
private JTextField serverField = new JTextField();
private JLabel portLabel = new JLabel(Resources.getString("port"));
private JTextField portField
= new JTextField(GoogleTalkAccountRegistration.DEFAULT_PORT);
private JPanel registerPanel = new JPanel(new GridLayout(0, 1));
private JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
private JTextArea registerArea = new JTextArea(Resources
.getString("registerNewAccountText"));
private JButton registerButton = new JButton(Resources
.getString("registerNewAccount"));
private JPanel mainPanel = new JPanel();
private Object nextPageIdentifier = WizardPage.SUMMARY_PAGE_IDENTIFIER;
private GoogleTalkAccountRegistrationWizard wizard;
private boolean isCommitted = false;
/**
* Creates an instance of <tt>FirstWizardPage</tt>.
*
* @param wizard the parent wizard
*/
public FirstWizardPage(GoogleTalkAccountRegistrationWizard wizard)
{
super(new BorderLayout());
this.wizard = wizard;
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.userIDField.getDocument().addDocumentListener(this);
this.rememberPassBox.setSelected(true);
this.existingAccountLabel.setForeground(Color.RED);
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("userIDAndPassword")));
mainPanel.add(userIDPassPanel);
serverField.setEnabled(false);
portField.setEnabled(false);
resourceField.setEnabled(false);
priorityField.setEnabled(false);
enableAdvOpButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
// Perform action
JCheckBox cb = (JCheckBox) evt.getSource();
if (!wizard.isModification())
serverField.setEnabled(cb.isSelected());
portField.setEnabled(cb.isSelected());
resourceField.setEnabled(cb.isSelected());
priorityField.setEnabled(cb.isSelected());
if(!cb.isSelected())
{
setServerFieldAccordingToUserID();
portField.setText(
GoogleTalkAccountRegistration.DEFAULT_PORT);
resourceField.setText(
GoogleTalkAccountRegistration.DEFAULT_RESOURCE);
priorityField.setText(
GoogleTalkAccountRegistration.DEFAULT_PRIORITY);
}
}
});
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 JPanel(new GridLayout(0, 1, 10, 10));
checkBoxesPanel.add(sendKeepAliveBox);
checkBoxesPanel.add(enableAdvOpButton);
advancedOpPanel.add(checkBoxesPanel, BorderLayout.NORTH);
advancedOpPanel.add(labelsAdvOpPanel, BorderLayout.WEST);
advancedOpPanel.add(valuesAdvOpPanel, BorderLayout.CENTER);
advancedOpPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("advancedOptions")));
mainPanel.add(advancedOpPanel);
registerButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
logger.debug("Reg OK");
/*
* We don't have our own implementation of registering/signing
* up with Google Talk so we'll just use webSignup.
*/
wizard.webSignup();
logger.debug("Reg End");
}
});
buttonPanel.add(registerButton);
registerArea.setEnabled(false);
registerArea.setOpaque(false);
registerArea.setLineWrap(true);
registerArea.setWrapStyleWord(true);
registerPanel.add(registerArea);
registerPanel.add(buttonPanel);
registerPanel.setBorder(BorderFactory.createTitledBorder(Resources
.getString("registerNewAccount")));
mainPanel.add(registerPanel);
this.add(mainPanel, BorderLayout.NORTH);
}
/**
* Implements the <code>WizardPage.getIdentifier</code> to return this
* page identifier.
*
* @return the id of the first wizard page.
*/
public Object getIdentifier()
{
return FIRST_PAGE_IDENTIFIER;
}
/**
* Implements the <code>WizardPage.getNextPageIdentifier</code> to return
* the next page identifier - the summary page.
*
* @return the id of the next wizard page.
*/
public Object getNextPageIdentifier()
{
return nextPageIdentifier;
}
/**
* Implements the <code>WizardPage.getBackPageIdentifier</code> to return
* the next back identifier - the default page.
*
* @return the id of the default wizard page.
*/
public Object getBackPageIdentifier()
{
return WizardPage.DEFAULT_PAGE_IDENTIFIER;
}
/**
* Implements the <code>WizardPage.getWizardForm</code> to return this
* panel.
*
* @return this wizard page.
*/
public Object getWizardForm()
{
return this;
}
/**
* Before this page is displayed enables or disables the "Next" wizard
* button according to whether the User ID field is empty.
*/
public void pageShowing()
{
this.setNextButtonAccordingToUserIDAndResource();
}
/**
* Saves the user input when the "Next" wizard buttons is clicked.
*/
public void commitPage()
{
String userID = userIDField.getText();
if (!wizard.isModification() && isExistingAccount(userID))
{
nextPageIdentifier = FIRST_PAGE_IDENTIFIER;
userIDPassPanel.add(existingAccountLabel, BorderLayout.NORTH);
this.revalidate();
}
else
{
nextPageIdentifier = SUMMARY_PAGE_IDENTIFIER;
userIDPassPanel.remove(existingAccountLabel);
GoogleTalkAccountRegistration registration = wizard.getRegistration();
registration.setUserID(userIDField.getText());
registration.setPassword(new String(passField.getPassword()));
registration.setRememberPassword(rememberPassBox.isSelected());
registration.setServerAddress(serverField.getText());
registration.setSendKeepAlive(sendKeepAliveBox.isSelected());
registration.setResource(resourceField.getText());
if (portField.getText() != null)
registration.setPort(Integer.parseInt(portField.getText()));
if (priorityField.getText() != null)
registration.setPriority(
Integer.parseInt(priorityField.getText()));
}
isCommitted = true;
}
/**
* Enables or disables the "Next" wizard button according to whether the
* UserID field is empty.
*/
private void setNextButtonAccordingToUserIDAndResource()
{
if (userIDField.getText() == null
|| userIDField.getText().equals("")
|| resourceField.getText() == null
|| resourceField.getText().equals(""))
{
wizard.getWizardContainer().setNextFinishButtonEnabled(false);
}
else
{
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
}
}
/**
* 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();
this.setServerFieldAccordingToUserID();
}
/**
* 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()
{
}
/**
* Fills the User ID and Password fields in this panel with the data coming
* from the given protocolProvider.
*
* @param protocolProvider The <tt>ProtocolProviderService</tt> to load
* the data from.
*/
public void loadAccount(ProtocolProviderService protocolProvider)
{
AccountID accountID = protocolProvider.getAccountID();
Map accountProperties = accountID.getAccountProperties();
String password = (String) accountProperties.get(
ProtocolProviderFactory.PASSWORD);
this.userIDField.setEnabled(false);
this.userIDField.setText(accountID.getUserID());
if (password != null)
{
this.passField.setText(password);
this.rememberPassBox.setSelected(true);
}
String serverAddress = (String) accountProperties
.get(ProtocolProviderFactory.SERVER_ADDRESS);
serverField.setText(serverAddress);
String serverPort = (String) accountProperties
.get(ProtocolProviderFactory.SERVER_PORT);
portField.setText(serverPort);
boolean keepAlive = new Boolean((String)accountProperties
.get("SEND_KEEP_ALIVE")).booleanValue();
sendKeepAliveBox.setSelected(keepAlive);
String resource = (String) accountProperties.get(
ProtocolProviderFactory.RESOURCE);
resourceField.setText(resource);
String priority = (String) accountProperties.get(
ProtocolProviderFactory.RESOURCE_PRIORITY);
priorityField.setText(priority);
if (!serverPort.equals(GoogleTalkAccountRegistration.DEFAULT_PORT)
|| !resource.equals(GoogleTalkAccountRegistration.DEFAULT_RESOURCE)
|| !priority.equals(GoogleTalkAccountRegistration.DEFAULT_PRIORITY))
{
enableAdvOpButton.setSelected(true);
// The server field should stay disabled in modification mode,
// because the user should not be able to change anything concerning
// the account identifier and server name is part of it.
serverField.setEnabled(false);
portField.setEnabled(true);
resourceField.setEnabled(true);
priorityField.setEnabled(true);
}
}
/**
* Parse the server part from the Google Talk id and set it to server as
* default value. If Advanced option is enabled Do nothing.
*/
private void setServerFieldAccordingToUserID()
{
if (!enableAdvOpButton.isSelected())
{
String userId = userIDField.getText();
serverField.setText(wizard.getServerFromUserName(userId));
}
}
/**
* Disables Next Button if Port field value is incorrect
*/
private void setNextButtonAccordingToPortAndPriority()
{
try
{
new Integer(portField.getText());
new Integer(priorityField.getText());
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
}
catch (NumberFormatException ex)
{
wizard.getWizardContainer().setNextFinishButtonEnabled(false);
}
}
/**
* Checks if the accountName corresponds to an already existing account.
*
* @param accountName the name of the account to check
* @return TRUE if an account with the specified name already exists, FALSE -
* otherwise.
*/
private boolean isExistingAccount(String accountName)
{
ProtocolProviderFactory factory = GoogleTalkAccRegWizzActivator
.getGoogleTalkProtocolProviderFactory();
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 userIDPassPanel;
}
public boolean isCommitted()
{
return isCommitted;
}
}

@ -0,0 +1,126 @@
/*
* 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.googletalkaccregwizz;
import java.util.*;
import org.osgi.framework.*;
import net.java.sip.communicator.service.browserlauncher.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*;
/**
* Registers the <tt>GoogleTalkAccountRegistrationWizard</tt> in the UI Service.
*
* @author Lubomir Marinov
*/
public class GoogleTalkAccRegWizzActivator
implements BundleActivator
{
public static BundleContext bundleContext;
private static final Logger logger = Logger.getLogger(
GoogleTalkAccRegWizzActivator.class.getName());
private static BrowserLauncherService browserLauncherService;
private static UIService uiService;
/**
* Starts this bundle.
* @param bc BundleContext
* @throws Exception
*/
public void start(BundleContext bc)
throws Exception
{
bundleContext = bc;
uiService =
(UIService) bundleContext.getService(bundleContext
.getServiceReference(UIService.class.getName()));
GoogleTalkAccountRegistrationWizard wizard =
new GoogleTalkAccountRegistrationWizard(uiService
.getAccountRegWizardContainer());
Hashtable<String, String> containerFilter
= new Hashtable<String, String>();
containerFilter.put(
ProtocolProviderFactory.PROTOCOL,
GoogleTalkAccountRegistrationWizard.PROTOCOL);
bundleContext.registerService(
AccountRegistrationWizard.class.getName(),
wizard,
containerFilter);
}
public void stop(BundleContext bundleContext)
throws Exception
{
}
/**
* Returns the <tt>ProtocolProviderFactory</tt> for the Google Talk
* protocol.
*
* @return the <tt>ProtocolProviderFactory</tt> for the Google Talk
* protocol
*/
public static ProtocolProviderFactory getGoogleTalkProtocolProviderFactory()
{
ServiceReference[] serRefs = null;
String osgiFilter = "("
+ ProtocolProviderFactory.PROTOCOL
+ "=" + ProtocolNames.JABBER + ")";
try
{
serRefs = bundleContext.getServiceReferences(
ProtocolProviderFactory.class.getName(), osgiFilter);
}
catch (InvalidSyntaxException ex)
{
logger.error("GoogleTalkAccRegWizzActivator : " + ex);
}
return (ProtocolProviderFactory) bundleContext.getService(serRefs[0]);
}
/**
* Returns the <tt>UIService</tt>.
*
* @return the <tt>UIService</tt>
*/
public static UIService getUIService()
{
return uiService;
}
/**
* Returns the <tt>BrowserLauncherService</tt> obtained from the bundle
* context.
* @return the <tt>BrowserLauncherService</tt> obtained from the bundle
* context
*/
public static BrowserLauncherService getBrowserLauncher() {
if (browserLauncherService == null)
{
browserLauncherService =
(BrowserLauncherService) bundleContext
.getService(bundleContext
.getServiceReference(BrowserLauncherService.class
.getName()));
}
return browserLauncherService;
}
}

@ -0,0 +1,167 @@
/*
* 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.googletalkaccregwizz;
/**
* The <tt>GoogleTalkAccountRegistration</tt> is used to store all user input
* data through the <tt>GoogleTalkAccountRegistrationWizard</tt>.
*
* @author Lubomir Marinov
*/
public class GoogleTalkAccountRegistration
{
public static final String DEFAULT_PORT = "5222";
public static final String DEFAULT_PRIORITY = "10";
public static final String DEFAULT_RESOURCE = "sip-comm";
private String userID;
private String password;
private boolean rememberPassword = true;
private String serverAddress;
private int port = new Integer(DEFAULT_PORT).intValue();
private String resource = DEFAULT_RESOURCE;
private int priority = new Integer(DEFAULT_PRIORITY).intValue();
private boolean sendKeepAlive = true;
/**
* Returns the password of the Google Talk registration account.
* @return the password of the Google Talk registration account.
*/
public String getPassword()
{
return password;
}
/**
* Sets the password of the Google Talk registration account.
* @param password the password of the Google Talk registration account.
*/
public void setPassword(String password)
{
this.password = password;
}
/**
* Returns TRUE if password has to remembered, FALSE otherwise.
* @return TRUE if password has to remembered, FALSE otherwise
*/
public boolean isRememberPassword()
{
return rememberPassword;
}
/**
* Sets the rememberPassword value of this Google Talk account registration.
* @param rememberPassword TRUE if password has to remembered, FALSE
* otherwise
*/
public void setRememberPassword(boolean rememberPassword)
{
this.rememberPassword = rememberPassword;
}
/**
* Returns the User ID of the Google Talk registration account.
* @return the User ID of the Google Talk registration account.
*/
public String getUserID()
{
return userID;
}
/**
* The address of the server we will use for this account
* @return String
*/
public String getServerAddress()
{
return serverAddress;
}
/**
* The port on the specified server
* @return int
*/
public int getPort()
{
return port;
}
/**
* Is sending of keep alive packets is enabled
* @return boolean
*/
public boolean isSendKeepAlive()
{
return sendKeepAlive;
}
/**
* Sets the User ID of the Google Talk registration account.
* @param userID the identifier of the Google Talk registration account.
*/
public void setUserID(String userID)
{
this.userID = userID;
}
/**
* Setting the server
* @param serverAddress String
*/
public void setServerAddress(String serverAddress)
{
this.serverAddress = serverAddress;
}
/**
* Setting the port
* @param port int
*/
public void setPort(int port)
{
this.port = port;
}
/**
* Set whether to send keep alive packets
* @param sendKeepAlive boolean
*/
public void setSendKeepAlive(boolean sendKeepAlive)
{
this.sendKeepAlive = sendKeepAlive;
}
public String getResource()
{
return resource;
}
public void setResource(String resource)
{
this.resource = resource;
}
public int getPriority()
{
return priority;
}
public void setPriority(int priority)
{
this.priority = priority;
}
}

@ -0,0 +1,415 @@
/*
* 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.googletalkaccregwizz;
import java.awt.*;
import java.util.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
import org.osgi.framework.*;
/**
* The <tt>GoogleTalkAccountRegistrationWizard</tt> is an implementation of the
* <tt>AccountRegistrationWizard</tt> for the Google Talk protocol. It should
* allow the user to create and configure a new Google Talk account.
*
* @author Lubomir Marinov
*/
public class GoogleTalkAccountRegistrationWizard
implements AccountRegistrationWizard
{
private static final String GOOGLE_USER_SUFFIX = "gmail.com";
private static final String GOOGLE_CONNECT_SRV = "talk.google.com";
public static final String PROTOCOL = "Google Talk";
private FirstWizardPage firstWizardPage;
private GoogleTalkAccountRegistration registration
= new GoogleTalkAccountRegistration();
private WizardContainer wizardContainer;
private ProtocolProviderService protocolProvider;
private boolean isModification;
/**
* Creates an instance of <tt>GoogleTalkAccountRegistrationWizard</tt>.
* @param wizardContainer the wizard container, where this wizard
* is added
*/
public GoogleTalkAccountRegistrationWizard(WizardContainer wizardContainer)
{
this.wizardContainer = wizardContainer;
this.wizardContainer.setFinishButtonText(Resources.getString("signin"));
}
/**
* Implements the <code>AccountRegistrationWizard.getIcon</code> method.
* Returns the icon to be used for this wizard.
* @return byte[]
*/
public byte[] getIcon()
{
return Resources.getImage(Resources.PROTOCOL_ICON);
}
/**
* Implements the <code>AccountRegistrationWizard.getPageImage</code> method.
* Returns the image used to decorate the wizard page
*
* @return byte[] the image used to decorate the wizard page
*/
public byte[] getPageImage()
{
return Resources.getImage(Resources.PAGE_IMAGE);
}
/**
* Implements the <code>AccountRegistrationWizard.getProtocolName</code>
* method. Returns the protocol name for this wizard.
* @return String
*/
public String getProtocolName()
{
return Resources.getString("protocolName");
}
/**
* Implements the <code>AccountRegistrationWizard.getProtocolDescription
* </code> method. Returns the description of the protocol for this wizard.
* @return String
*/
public String getProtocolDescription()
{
return Resources.getString("protocolDescription");
}
/**
* Returns the set of pages contained in this wizard.
* @return Iterator
*/
public Iterator getPages()
{
ArrayList pages = new ArrayList();
firstWizardPage = new FirstWizardPage(this);
pages.add(firstWizardPage);
return pages.iterator();
}
/**
* Returns the set of data that user has entered through this wizard.
* @return Iterator
*/
public Iterator getSummary()
{
Hashtable summaryTable = new Hashtable();
summaryTable.put( Resources.getString("username"),
registration.getUserID());
summaryTable.put( Resources.getString("rememberPassword"),
new Boolean(registration.isRememberPassword()));
summaryTable.put( Resources.getString("server"),
registration.getServerAddress());
summaryTable.put( Resources.getString("port"),
String.valueOf(registration.getPort()));
summaryTable.put( Resources.getString("enableKeepAlive"),
String.valueOf(registration.isSendKeepAlive()));
summaryTable.put( Resources.getString("resource"),
registration.getResource());
summaryTable.put( Resources.getString("priority"),
String.valueOf(registration.getPriority()));
return summaryTable.entrySet().iterator();
}
/**
* Installs the account created through this wizard.
*
* @return ProtocolProviderService
*/
public ProtocolProviderService signin()
{
if (!firstWizardPage.isCommitted())
firstWizardPage.commitPage();
return signin( registration.getUserID(),
registration.getPassword());
}
public ProtocolProviderService signin(String userName, String password)
{
firstWizardPage = null;
ProtocolProviderFactory factory
= GoogleTalkAccRegWizzActivator.getGoogleTalkProtocolProviderFactory();
return this.installAccount(factory,
userName,
password);
}
/**
* Creates an account for the given user and password.
*
* @param providerFactory the ProtocolProviderFactory which will create
* the account
* @param user the user identifier
* @param passwd the password
* @return the <tt>ProtocolProviderService</tt> for the new account.
*/
public ProtocolProviderService installAccount(
ProtocolProviderFactory providerFactory,
String userName,
String passwd)
{
Hashtable accountProperties = new Hashtable();
/* Make the account use the resources specific to Google Talk. */
accountProperties.put(ProtocolProviderFactory.PROTOCOL, PROTOCOL);
accountProperties
.put(ProtocolProviderFactory.PROTOCOL_ICON_PATH,
GoogleTalkAccountRegistrationWizard.class.getClassLoader()
.getResource("resources/images/protocol/googletalk")
.toString());
if (registration.isRememberPassword())
{
accountProperties.put(ProtocolProviderFactory.PASSWORD, passwd);
}
accountProperties.put("SEND_KEEP_ALIVE",
String.valueOf(registration.isSendKeepAlive()));
String serverName = null;
if (registration.getServerAddress() != null)
{
serverName = registration.getServerAddress();
}
else
{
serverName = getServerFromUserName(userName);
}
accountProperties.put(ProtocolProviderFactory.SERVER_ADDRESS,
serverName);
accountProperties.put(ProtocolProviderFactory.SERVER_PORT,
String.valueOf(registration.getPort()));
accountProperties.put(ProtocolProviderFactory.RESOURCE,
registration.getResource());
accountProperties.put(ProtocolProviderFactory.RESOURCE_PRIORITY,
String.valueOf(registration.getPriority()));
if (isModification)
{
providerFactory.modifyAccount( protocolProvider,
accountProperties);
this.isModification = false;
return protocolProvider;
}
try
{
AccountID accountID = providerFactory.installAccount(
userName, accountProperties);
ServiceReference serRef = providerFactory
.getProviderForAccount(accountID);
protocolProvider = (ProtocolProviderService)
GoogleTalkAccRegWizzActivator.bundleContext
.getService(serRef);
}
catch (IllegalArgumentException exc)
{
GoogleTalkAccRegWizzActivator.getUIService().getPopupDialog()
.showMessagePopupDialog(exc.getMessage(),
Resources.getString("error"),
PopupDialog.ERROR_MESSAGE);
}
catch (IllegalStateException exc)
{
GoogleTalkAccRegWizzActivator.getUIService().getPopupDialog()
.showMessagePopupDialog(exc.getMessage(),
Resources.getString("error"),
PopupDialog.ERROR_MESSAGE);
}
return protocolProvider;
}
/**
* Fills the User ID and Password fields in this panel with the data coming
* from the given protocolProvider.
* @param protocolProvider The <tt>ProtocolProviderService</tt> to load the
* data from.
*/
public void loadAccount(ProtocolProviderService protocolProvider)
{
this.isModification = true;
this.protocolProvider = protocolProvider;
this.registration = new GoogleTalkAccountRegistration();
this.firstWizardPage.loadAccount(protocolProvider);
}
/**
* Indicates if this wizard is opened for modification or for creating a
* new account.
*
* @return <code>true</code> if this wizard is opened for modification and
* <code>false</code> otherwise.
*/
public boolean isModification()
{
return isModification;
}
/**
* Returns the wizard container, where all pages are added.
*
* @return the wizard container, where all pages are added
*/
public WizardContainer getWizardContainer()
{
return wizardContainer;
}
/**
* Returns the registration object, which will store all the data through
* the wizard.
*
* @return the registration object, which will store all the data through
* the wizard
*/
public GoogleTalkAccountRegistration getRegistration()
{
return registration;
}
/**
* Returns the size of this wizard.
* @return the size of this wizard
*/
public Dimension getSize()
{
return new Dimension(300, 480);
}
/**
* Returns the identifier of the page to show first in the wizard.
* @return the identifier of the page to show first in the wizard.
*/
public Object getFirstPageIdentifier()
{
return firstWizardPage.getIdentifier();
}
/**
* Returns the identifier of the page to show last in the wizard.
* @return the identifier of the page to show last in the wizard.
*/
public Object getLastPageIdentifier()
{
return firstWizardPage.getIdentifier();
}
/**
* Sets the modification property to indicate if this wizard is opened for
* a modification.
*
* @param isModification indicates if this wizard is opened for modification
* or for creating a new account.
*/
public void setModification(boolean isModification)
{
this.isModification = isModification;
}
/**
* Returns an example string, which should indicate to the user how the
* user name should look like.
* @return an example string, which should indicate to the user how the
* user name should look like.
*/
public String getUserNameExample()
{
return FirstWizardPage.USER_NAME_EXAMPLE;
}
/**
* Enables the simple "Sign in" form.
*/
public boolean isSimpleFormEnabled()
{
return true;
}
/**
* Parse the server part from the Google Talk id and set it to server as
* default value. If Advanced option is enabled Do nothing.
*/
protected String getServerFromUserName(String userName)
{
int delimIndex = userName.indexOf("@");
if (delimIndex != -1)
{
String newServerAddr = userName.substring(delimIndex + 1);
if (newServerAddr.equals(GOOGLE_USER_SUFFIX))
{
return GOOGLE_CONNECT_SRV;
}
else
{
return newServerAddr;
}
}
return null;
}
public void webSignup()
{
GoogleTalkAccRegWizzActivator.getBrowserLauncher()
.openURL("https://www.google.com/accounts/NewAccount");
}
/**
* Returns <code>true</code> if the web sign up is supported by the current
* implementation, <code>false</code> - otherwise.
* @return <code>true</code> if the web sign up is supported by the current
* implementation, <code>false</code> - otherwise
*/
public boolean isWebSignupSupported()
{
return true;
}
public Object getSimpleForm()
{
firstWizardPage = new FirstWizardPage(this);
return firstWizardPage.getSimpleForm();
}
}

@ -0,0 +1,181 @@
/*
* 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.googletalkaccregwizz;
import java.io.*;
import java.util.*;
import net.java.sip.communicator.util.*;
/**
* The <tt>Resources</tt> class manages the access to the internationalization
* properties files and the image resources used in this plugin.
*
* @author Lubomir Marinov
*/
public class Resources
{
private static Logger log = Logger.getLogger(Resources.class);
/**
* The name of the resource, where internationalization strings for this
* plugin are stored.
*/
private static final String STRING_RESOURCE_NAME =
"resources.languages.plugin.googletalkaccregwizz.resources";
/**
* The name of the resource, where paths to images used in this bundle are
* stored.
*/
private static final String RESOURCE_NAME =
"net.java.sip.communicator.plugin.googletalkaccregwizz.resources";
/**
* The string resource bundle.
*/
private static final ResourceBundle STRING_RESOURCE_BUNDLE =
ResourceBundle.getBundle(STRING_RESOURCE_NAME);
/**
* The image resource bundle.
*/
private static final ResourceBundle RESOURCE_BUNDLE =
ResourceBundle.getBundle(RESOURCE_NAME);
/**
* A constant pointing to the Google Talk protocol logo image.
*/
public static ImageID PROTOCOL_ICON = new ImageID("protocolIcon");
/**
* A constant pointing to the Aim protocol wizard page image.
*/
public static ImageID PAGE_IMAGE = new ImageID("pageImage");
/**
* Returns an internationalized string corresponding to the given key.
*
* @param key The key of the string.
* @return An internationalized string corresponding to the given key.
*/
public static String getString(String key)
{
String resourceString;
try
{
resourceString = STRING_RESOURCE_BUNDLE.getString(key);
int mnemonicIndex = resourceString.indexOf('&');
if (mnemonicIndex > -1)
{
String firstPart = resourceString.substring(0, mnemonicIndex);
String secondPart = resourceString.substring(mnemonicIndex + 1);
resourceString = firstPart.concat(secondPart);
}
}
catch (MissingResourceException e)
{
resourceString = '!' + key + '!';
}
return resourceString;
}
/**
* Returns an internationalized string corresponding to the given key.
*
* @param key The key of the string.
* @return An internationalized string corresponding to the given key.
*/
public static char getMnemonic(String key)
{
String resourceString;
try
{
resourceString = STRING_RESOURCE_BUNDLE.getString(key);
int mnemonicIndex = resourceString.indexOf('&');
if (mnemonicIndex > -1)
{
return resourceString.charAt(mnemonicIndex + 1);
}
}
catch (MissingResourceException e)
{
return '!';
}
return '!';
}
/**
* Loads an image from a given image identifier.
*
* @param imageID The identifier of the image.
* @return The image for the given identifier.
*/
public static byte[] getImage(ImageID imageID)
{
byte[] image = new byte[100000];
String path = RESOURCE_BUNDLE.getString(imageID.getId());
try
{
Resources.class.getClassLoader().getResourceAsStream(path).read(
image);
}
catch (IOException e)
{
log.error("Failed to load image:" + path, e);
}
return image;
}
/**
* Returns the resource for the given key. This could be any resource stored
* in the resources.properties file of this bundle.
*
* @param key the key of the resource to search for
* @return the resource for the given key
*/
public static String getProperty(String key)
{
try
{
return RESOURCE_BUNDLE.getString(key);
}
catch (MissingResourceException e)
{
return '!' + key + '!';
}
}
/**
* Represents the Image Identifier.
*/
public static class ImageID
{
private String id;
private ImageID(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
}
}

@ -0,0 +1,38 @@
Bundle-Activator: net.java.sip.communicator.plugin.googletalkaccregwizz.GoogleTalkAccRegWizzActivator
Bundle-Name: Google Talk account registration wizard
Bundle-Description: Google Talk account registration wizard.
Bundle-Vendor: sip-communicator.org
Bundle-Version: 0.0.1
Import-Package: org.osgi.framework,
net.java.sip.communicator.util,
net.java.sip.communicator.service.configuration,
net.java.sip.communicator.service.configuration.event,
net.java.sip.communicator.service.protocol,
net.java.sip.communicator.service.protocol.icqconstants,
net.java.sip.communicator.service.protocol.event,
net.java.sip.communicator.service.contactlist,
net.java.sip.communicator.service.contactlist.event,
net.java.sip.communicator.service.gui,
net.java.sip.communicator.service.gui.event,
net.java.sip.communicator.service.fileaccess,
net.java.sip.communicator.service.browserlauncher,
javax.naming,
javax.naming.directory,
javax.xml.parsers,
org.w3c.dom,
org.xml.sax,
javax.swing,
javax.swing.event,
javax.swing.table,
javax.swing.text,
javax.swing.text.html,
javax.accessibility,
javax.swing.plaf,
javax.swing.plaf.metal,
javax.swing.plaf.basic,
javax.imageio,
javax.swing.filechooser,
javax.swing.tree,
javax.swing.undo,
javax.swing.border,
org.jivesoftware.smack

@ -0,0 +1,2 @@
protocolIcon=resources/images/protocol/googletalk/status16x16-online.png
pageImage=resources/images/protocol/googletalk/logo48x48.png
Loading…
Cancel
Save