mirror of https://github.com/sipwise/jitsi.git
parent
9d944c7023
commit
dc5a595eb0
@ -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…
Reference in new issue