/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.service.gui; import java.util.*; import net.java.sip.communicator.service.gui.internal.*; import net.java.sip.communicator.service.protocol.*; /** * The <tt>AccountRegistrationWizard</tt> is meant to provide a wizard which * will guide the user through a protocol account registration. Each * <tt>AccountRegistrationWizard</tt> should provide a set of * <tt>WizardPage</tt>s, an icon, the name and the description of the * corresponding protocol. * <p> * Note that the <tt>AccountRegistrationWizard</tt> is NOT a real wizard, it * doesn't handle wizard events. Each UI Service implementation should provide * its own wizard UI control, which should manage all the events, panels and * buttons, etc. * <p> * It depends on the wizard implementation in the UI for whether or not a * summary will be shown to the user before "Finish". * * @author Yana Stamcheva */ public abstract class AccountRegistrationWizard { /** * Is current wizard run as modification of an existing account. */ private boolean isModification; /** * The parent wizard container. */ private WizardContainer wizardContainer; /** * Returns the protocol icon that will be shown on the left of the protocol * name in the list, where user will choose the protocol to register to. * * @return a short description of the protocol. */ public abstract byte[] getIcon(); /** * Returns the image that will be shown on the left of the wizard pages. * @return the image that will be shown on the left of the wizard pages */ public abstract byte[] getPageImage(); /** * Returns the protocol display name that will be shown in the list, * where user will choose the protocol to register to. * * @return the protocol name. */ public abstract String getProtocolName(); /** * Returns a short description of the protocol that will be shown on the * right of the protocol name in the list, where user will choose the * protocol to register to. * * @return a short description of the protocol. */ public abstract String getProtocolDescription(); /** * Returns an example string, which should indicate to the user how the * user name should look like. For example: john@jabber.org. * @return an example string, which should indicate to the user how the * user name should look like. */ public abstract String getUserNameExample(); /** * Loads all data concerning the given <tt>ProtocolProviderService</tt>. * This method is meant to be used when a modification in an already * created account is needed. * * @param protocolProvider The <tt>ProtocolProviderService</tt> to * load data from. */ public abstract void loadAccount(ProtocolProviderService protocolProvider); /** * Returns the set of <tt>WizardPage</tt>-s for this * wizard. * * @return the set of <tt>WizardPage</tt>-s for this * wizard. */ public abstract Iterator<WizardPage> getPages(); /** * Returns the identifier of the first account registration wizard page. * This method is meant to be used by the wizard container to determine, * which is the first page to show to the user. * * @return the identifier of the first account registration wizard page */ public abstract Object getFirstPageIdentifier(); /** * Returns the identifier of the last account registration wizard page. This * method is meant to be used by the wizard container to determine which is * the page to show before the summary page (of course if there's a summary). * * @return the identifier of the last account registration wizard page */ public abstract Object getLastPageIdentifier(); /** * Returns a set of key-value pairs that will represent the summary for * this wizard. * * @return a set of key-value pairs that will represent the summary for * this wizard. */ public abstract Iterator<Map.Entry<String, String>> getSummary(); /** * 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 abstract ProtocolProviderService signin() throws OperationFailedException; /** * 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 abstract ProtocolProviderService signin( String userName, String password) throws OperationFailedException; /** * Indicates that the account corresponding to the given * <tt>protocolProvider</tt> has been removed. * @param protocolProvider the protocol provider that has been removed */ public void accountRemoved(ProtocolProviderService protocolProvider) {} /** * 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 false; } /** * Defines the operation that will be executed when user clicks on the * "Sign up" link. * * @throws UnsupportedOperationException if the web sign up operation is * not supported by the current implementation. */ public void webSignup() throws UnsupportedOperationException {} /** * Returns the forgot password link name. * * @return the forgot password link name */ public String getForgotPasswordLinkName() { return null; } /** * Returns the forgot password link if one exists. * * @return the forgot password link */ public String getForgotPasswordLink() { return null; } /** * Returns a simple account registration form that would be the first form * shown to the user. Only if the user needs more settings she'll choose * to open the advanced wizard, consisted by all pages. * * @param isCreateAccount indicates if the simple form should be opened as * a create account form or as a login form * @return a simple account registration form */ public abstract Object getSimpleForm(boolean isCreateAccount); /** * 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; } /** * Indicates if this wizard is modifying an existing account or is creating * a new one. * * @return <code>true</code> to indicate that this wizard is currently in * modification mode, <code>false</code> - otherwise. */ public boolean isModification() { return isModification; } /** * Indicates whether this wizard enables the simple "sign in" form shown * when the user opens the application for the first time. The simple * "sign in" form allows user to configure her account in one click, just * specifying her username and password and leaving any other configuration * as by default. * @return <code>true</code> if the simple "Sign in" form is enabled or * <code>false</code> otherwise. */ public boolean isSimpleFormEnabled() { return true; } /** * Whether the advanced configuration is enabled. Gives an option * to disable/hide advanced config button. * @return whether the advanced configuration is enabled. */ public boolean isAdvancedConfigurationEnabled() { return true; } /** * Returns the wizard container, where all pages are added. * * @return the wizard container, where all pages are added */ public WizardContainer getWizardContainer() { return wizardContainer; } /** * Sets the wizard container, where all pages are added. * * @param wizardContainer the wizard container, where all pages are added */ protected void setWizardContainer(WizardContainer wizardContainer) { this.wizardContainer = wizardContainer; } /** * Indicates if this wizard is for the preferred protocol. * * @return <tt>true</tt> if this wizard corresponds to the preferred * protocol, otherwise returns <tt>false</tt> */ public boolean isPreferredProtocol() { // Check for preferred account through the PREFERRED_ACCOUNT_WIZARD // property. String prefWName = GuiServiceActivator.getResources(). getSettingsString("impl.gui.PREFERRED_ACCOUNT_WIZARD"); if(prefWName != null && prefWName.length() > 0 && prefWName.equals(this.getClass().getName())) return true; return false; } /** * Indicates if a wizard is hidden. This may be used if we don't want that * a wizard appears in the list of available networks. * * @return <tt>true</tt> to indicate that a wizard is hidden, <tt>false</tt> * otherwise */ public boolean isHidden() { return false; } }