/*
* 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.dictaccregwizz;
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 DictAccountRegistrationWizard is an implementation of the
* AccountRegistrationWizard for the Dict protocol. It should allow
* the user to create and configure a new Dict account.
*
* @author ROTH Damien
* @author LITZELMANN Cedric
*/
public class DictAccountRegistrationWizard
implements AccountRegistrationWizard
{
/**
* The reference to the first page of the wizard.
*/
private FirstWizardPage firstWizardPage;
/**
* The registration of the DICT account.
*/
private DictAccountRegistration registration = new DictAccountRegistration();
/**
* The container of the wizard.
*/
private WizardContainer wizardContainer;
/**
* The protocole provider.
*/
private ProtocolProviderService protocolProvider;
/**
* Tells us if the is a modification wiazrd or not.
*/
private boolean isModification;
/**
* Creates an instance of DictAccountRegistrationWizard.
*
* @param wizardContainer the wizard container, where this wizard is added
*/
public DictAccountRegistrationWizard(WizardContainer wizardContainer)
{
this.wizardContainer = wizardContainer;
}
/**
* Implements the AccountRegistrationWizard.getIcon
method.
* @return Returns the icon to be used for this wizard.
*/
public byte[] getIcon()
{
return Resources.getImage(Resources.DICT_LOGO);
}
/**
* 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.
* @return Returns the protocol name for this wizard.
*/
public String getProtocolName()
{
return Resources.getString("protocolNameDict");
}
/**
* Implements the AccountRegistrationWizard.getProtocolDescription
*
method.
* @return Returns the description of the protocol for this wizard.
*/
public String getProtocolDescription()
{
return Resources.getString("protocolDescriptionDict");
}
/**
* Returns the set of pages contained in this wizard.
*
* @return Returns the set of pages contained in this wizard.
*/
public Iterator getPages()
{
ArrayList pages = new ArrayList();
this.firstWizardPage = new FirstWizardPage(this);
pages.add(this.firstWizardPage);
return pages.iterator();
}
/**
* Returns the set of data that user has entered through this wizard.
* @return Returns the set of data that user has entered through this wizard.
*/
public Iterator getSummary()
{
LinkedHashMap summaryTable = new LinkedHashMap();
summaryTable.put("Host", registration.getHost());
summaryTable.put("Port", String.valueOf(registration.getPort()));
summaryTable.put("Strategy", registration.getStrategy());
return summaryTable.entrySet().iterator();
}
/**
* Installs the account created through this wizard.
*
* @return The ProtocoleProviderService installed for the account.
*/
public ProtocolProviderService finish()
{
firstWizardPage = null;
ProtocolProviderFactory factory =
DictAccRegWizzActivator.getDictProtocolProviderFactory();
return this.installAccount(factory, registration.getHost(),
registration.getPort(),
registration.getStrategyCode());
}
/**
* Installs the account created through this wizard.
* @return ProtocolProviderService
*/
public ProtocolProviderService signin()
{
if (!firstWizardPage.isCommitted())
firstWizardPage.commitPage();
return signin(registration.getUserID(), null);
}
/**
* Installs the account created through this wizard.
* @return ProtocolProviderService
*/
public ProtocolProviderService signin(String userName, String password)
{
firstWizardPage = null;
ProtocolProviderFactory factory
= DictAccRegWizzActivator.getDictProtocolProviderFactory();
/*return this.installAccount(factory,
userName);*/
return this.installAccount(factory, registration.getHost(),
registration.getPort(),
registration.getStrategyCode());
}
/**
* Creates an account for the given user and password.
*
* @param providerFactory the ProtocolProviderFactory which will create the
* account.
* @param host The hostname of the DICT server.
* @param port The port used by the DICT server.
* @param strategy The strategy choosen for matching words in the
* dictionnaries.
* @return the ProtocolProviderService for the new account.
*/
public ProtocolProviderService installAccount(
ProtocolProviderFactory providerFactory,
String host,
int port,
String strategy)
{
Hashtable accountProperties = new Hashtable();
// Set this property to indicate that Dict account does not require
// authentication.
accountProperties.put(
ProtocolProviderFactory.NO_PASSWORD_REQUIRED,
new Boolean(true).toString());
// Save host
accountProperties.put(ProtocolProviderFactory.SERVER_ADDRESS, host);
// Save port
accountProperties.put(ProtocolProviderFactory.SERVER_PORT, String.valueOf(port));
// Save strategy
accountProperties.put(ProtocolProviderFactory.STRATEGY, strategy);
if (isModification)
{
providerFactory.uninstallAccount(protocolProvider.getAccountID());
this.protocolProvider = null;
this.isModification = false;
}
try
{
String uid = this.generateUID();
AccountID accountID =
providerFactory.installAccount(uid, accountProperties);
ServiceReference serRef =
providerFactory.getProviderForAccount(accountID);
protocolProvider =
(ProtocolProviderService) DictAccRegWizzActivator.bundleContext
.getService(serRef);
}
catch (IllegalArgumentException e)
{
DictAccRegWizzActivator.getUIService().getPopupDialog()
.showMessagePopupDialog(e.getMessage(),
Resources.getString("error"),
PopupDialog.ERROR_MESSAGE);
}
catch (IllegalStateException e)
{
DictAccRegWizzActivator.getUIService().getPopupDialog()
.showMessagePopupDialog(e.getMessage(),
Resources.getString("error"),
PopupDialog.ERROR_MESSAGE);
}
return protocolProvider;
}
/**
* Fills the UIN and Password fields in this panel with the data coming
* 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 DictAccountRegistration();
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;
}
/**
* Sets if this wizard is opened for modification or for creating a
* new account.
*
* @param b True
if this wizard is opened for modification and
* false
otherwise.
*/
public void setModification(boolean b)
{
this.isModification = b;
}
/**
* 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 DictAccountRegistration getRegistration()
{
return registration;
}
/**
* Returns the size of this wizard.
* @return the size of this wizard
*/
public Dimension getSize()
{
return new Dimension(300, 150);
}
/**
* 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();
}
/**
* Generate the UID for the acount
* @return the new UID
*/
private String generateUID()
{
String uid;
int nbAccounts = this.getNumberOfAccounts();
String host = this.registration.getHost();
int nbAccountsForHost = this.getNbAccountForHost(host);
if (nbAccounts == 0 || (this.isModification() && nbAccounts == 1) ||
nbAccountsForHost == 0 || (this.isModification() && nbAccountsForHost == 1))
{
// We create the first account or we edit the onlyone
// Or we create the first account for this server or edit the onlyone
uid = host;
}
else
{
uid = host + ":" + this.registration.getPort();
}
return uid;
}
/**
* Returns the number of accounts stored for the protocol
* @return the number of accounts stored for the protocol
*/
private int getNumberOfAccounts()
{
ProtocolProviderFactory factory =
DictAccRegWizzActivator.getDictProtocolProviderFactory();
return factory.getRegisteredAccounts().size();
}
/**
* Returns the number of account for a given host
* @param hostName the host
* @return the number of account for a given host
*/
private int getNbAccountForHost(String host)
{
ProtocolProviderFactory factory =
DictAccRegWizzActivator.getDictProtocolProviderFactory();
ArrayList registeredAccounts = factory.getRegisteredAccounts();
int total = 0;
for (int i = 0; i < registeredAccounts.size(); i++)
{
AccountID accountID = (AccountID) registeredAccounts.get(i);
// The host is always stored at the start
if (accountID.getUserID().startsWith(host.toLowerCase()))
{
total++;
}
}
return total;
}
/**
* 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 null;
}
/**
* Disables the simple "Sign in" form.
*/
public boolean isSimpleFormEnabled()
{
return false;
}
/**
* Nothing to do here in the case of dictionary.
*/
public void webSignup()
{
throw new UnsupportedOperationException(
"The web sign up is not supproted by the dictionary 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();
}
}