/* * 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.facebookaccregwizz; 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 FacebookAccountRegistrationWizard is an implementation of the * AccountRegistrationWizard for the Facebook Chat protocol. It allows * the user to create and configure a new Facebook account. * * @author Dai Zhiwei */ public class FacebookAccountRegistrationWizard implements AccountRegistrationWizard { /** * The first page of the facebook account registration wizard. */ private FirstWizardPage firstWizardPage; /** * The object that we use to store details on an account that we will be * creating. */ private FacebookAccountRegistration registration = new FacebookAccountRegistration(); private WizardContainer wizardContainer; private ProtocolProviderService protocolProvider; private boolean isModification; /** * Creates an instance of FacebookAccountRegistrationWizard. * @param wizardContainer the wizard container, where this wizard * is added */ public FacebookAccountRegistrationWizard(WizardContainer wizardContainer) { this.wizardContainer = wizardContainer; this.wizardContainer .setFinishButtonText( Resources.getString("service.gui.SIGN_IN")); } /** * Implements the AccountRegistrationWizard.getIcon method. * Returns the icon to be used for this wizard. * @return byte[] */ public byte[] getIcon() { return Resources.getImage(Resources.PROTOCOL_ICON); } /** * Implements the AccountRegistrationWizard.getPageImage 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 AccountRegistrationWizard.getProtocolName * method. Returns the protocol name for this wizard. * @return String */ public String getProtocolName() { return Resources.getString("plugin.facebookaccregwizz.PROTOCOL_NAME"); } /** * Implements the AccountRegistrationWizard.getProtocolDescription * method. Returns the description of the protocol for this wizard. * @return String */ public String getProtocolDescription() { return Resources.getString( "plugin.facebookaccregwizz.PROTOCOL_DESCRIPTION"); } /** * Returns the set of pages contained in this wizard. * @return Iterator */ public Iterator getPages() { java.util.List 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() { Map summaryTable = new Hashtable(); summaryTable.put("User ID", registration.getEmail()); return summaryTable.entrySet().iterator(); } /** * Installs the account created through this wizard. * @return ProtocolProviderService */ public ProtocolProviderService signin() { if (!firstWizardPage.isCommitted()) firstWizardPage.commitPage(); return signin(registration.getEmail(), null); } /** * Installs the account created through this wizard. * @return ProtocolProviderService */ public ProtocolProviderService signin(String userName, String password) { firstWizardPage = null; ProtocolProviderFactory factory = FacebookAccRegWizzActivator.getFacebookProtocolProviderFactory(); return this.installAccount(factory, userName); } /** * Creates an account for the given user and password. * @param providerFactory the ProtocolProviderFactory which will create * the account * @param user the user identifier * @return the ProtocolProviderService for the new account. */ public ProtocolProviderService installAccount( ProtocolProviderFactory providerFactory, String user) { Map accountProperties = new Hashtable(); if (registration.isRememberPassword()) { accountProperties.put( ProtocolProviderFactory.PASSWORD, registration.getPassword()); } if (isModification) { providerFactory.uninstallAccount(protocolProvider.getAccountID()); this.protocolProvider = null; this.isModification = false; } Throwable exception = null; try { AccountID accountID = providerFactory.installAccount( user, accountProperties); ServiceReference serRef = providerFactory .getProviderForAccount(accountID); protocolProvider = (ProtocolProviderService) FacebookAccRegWizzActivator.bundleContext .getService(serRef); } catch (IllegalArgumentException exc) { exception = exc; } catch (IllegalStateException exc) { exception = exc; } if (exception != null) FacebookAccRegWizzActivator .getUIService() .getPopupDialog() .showMessagePopupDialog( exception.getMessage(), Resources.getString("service.gui.ERROR"), PopupDialog.ERROR_MESSAGE); return protocolProvider; } /** * Fills the UserID and Password fields in this panel with the data comming * from the given protocolProvider. * @param protocolProvider The ProtocolProviderService to load the * data from. */ public void loadAccount(ProtocolProviderService protocolProvider) { this.isModification = true; this.protocolProvider = protocolProvider; this.registration = new FacebookAccountRegistration(); this.firstWizardPage.loadAccount(protocolProvider); } /** * Indicates if this wizard is opened for modification or for creating a * new account. * * @return true if this wizard is opened for modification and * false 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 FacebookAccountRegistration getRegistration() { return registration; } /** * Returns the size of this wizard. * @return the size of this wizard */ public Dimension getSize() { return new Dimension(600, 500); } /** * 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; } /** * Disables the simple "Sign in" form. */ public boolean isSimpleFormEnabled() { return false; } /** * Nothing to do here in the case of Facebook. */ public void webSignup() { throw new UnsupportedOperationException( "The web sign up is not supproted by the facebook wizard."); } /** * Returns true if the web sign up is supported by the current * implementation, false - otherwise. * @return true if the web sign up is supported by the current * implementation, false - otherwise */ public boolean isWebSignupSupported() { return false; } public Object getSimpleForm() { firstWizardPage = new FirstWizardPage(this); return firstWizardPage.getSimpleForm(); } }