mirror of https://github.com/sipwise/jitsi.git
parent
5c12cfed50
commit
fa9d637520
@ -0,0 +1,136 @@
|
||||
/*
|
||||
* 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.util.*;
|
||||
|
||||
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.*;
|
||||
|
||||
import org.osgi.framework.*;
|
||||
|
||||
/**
|
||||
* Registers the <tt>DictAccountRegistrationWizard</tt> in the UI Service.
|
||||
*
|
||||
* @author ROTH Damien
|
||||
* @author LITZELMANN Cédric
|
||||
*/
|
||||
public class DictAccRegWizzActivator implements BundleActivator
|
||||
{
|
||||
public static BundleContext bundleContext;
|
||||
|
||||
private static Logger logger = Logger.getLogger(
|
||||
DictAccRegWizzActivator.class);
|
||||
|
||||
private static BrowserLauncherService browserLauncherService;
|
||||
|
||||
private static WizardContainer wizardContainer;
|
||||
|
||||
private static DictAccountRegistrationWizard dictWizard;
|
||||
|
||||
private static UIService uiService;
|
||||
|
||||
/**
|
||||
* Starts this bundle.
|
||||
*
|
||||
* @param bc The bundle context.
|
||||
*/
|
||||
public void start(BundleContext bc) throws Exception {
|
||||
|
||||
bundleContext = bc;
|
||||
|
||||
ServiceReference uiServiceRef = bundleContext
|
||||
.getServiceReference(UIService.class.getName());
|
||||
|
||||
uiService = (UIService) bundleContext.getService(uiServiceRef);
|
||||
|
||||
wizardContainer = uiService.getAccountRegWizardContainer();
|
||||
|
||||
dictWizard = new DictAccountRegistrationWizard(wizardContainer);
|
||||
|
||||
//wizardContainer.addAccountRegistrationWizard(dictWizard);
|
||||
Hashtable<String, String> containerFilter
|
||||
= new Hashtable<String, String>();
|
||||
|
||||
containerFilter.put(
|
||||
ProtocolProviderFactory.PROTOCOL,
|
||||
ProtocolNames.DICT);
|
||||
|
||||
bundleContext.registerService(
|
||||
AccountRegistrationWizard.class.getName(),
|
||||
dictWizard,
|
||||
containerFilter);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Stops this bundle.
|
||||
*
|
||||
* @param bundleContext The bundle context (unused).
|
||||
*
|
||||
* @throws Exception Throws an execption from the
|
||||
* "wizardContainer.removeAccountRegistrationWizard" method.
|
||||
*
|
||||
*/
|
||||
public void stop(BundleContext bundleContext) throws Exception
|
||||
{
|
||||
//wizardContainer.removeAccountRegistrationWizard(dictWizard);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the <tt>ProtocolProviderFactory</tt> for the Dict protocol.
|
||||
* @return the <tt>ProtocolProviderFactory</tt> for the Dict protocol
|
||||
*/
|
||||
public static ProtocolProviderFactory getDictProtocolProviderFactory() {
|
||||
|
||||
ServiceReference[] serRefs = null;
|
||||
|
||||
String osgiFilter = "("
|
||||
+ ProtocolProviderFactory.PROTOCOL
|
||||
+ "="+ProtocolNames.DICT+")";
|
||||
|
||||
try {
|
||||
serRefs = bundleContext.getServiceReferences(
|
||||
ProtocolProviderFactory.class.getName(), osgiFilter);
|
||||
}
|
||||
catch (InvalidSyntaxException ex){
|
||||
logger.error("DictAccRegWizzActivator : " + ex);
|
||||
}
|
||||
|
||||
return (ProtocolProviderFactory) bundleContext.getService(serRefs[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
ServiceReference serviceReference = bundleContext
|
||||
.getServiceReference(BrowserLauncherService.class.getName());
|
||||
|
||||
browserLauncherService = (BrowserLauncherService) bundleContext
|
||||
.getService(serviceReference);
|
||||
}
|
||||
|
||||
return browserLauncherService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the <tt>UIService</tt>.
|
||||
*
|
||||
* @return the <tt>UIService</tt>
|
||||
*/
|
||||
public static UIService getUIService()
|
||||
{
|
||||
return uiService;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,123 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* The <tt>DictAccountRegistration</tt> is used to store all user input data
|
||||
* through the <tt>DictAccountRegistrationWizard</tt>.
|
||||
*
|
||||
* @author ROTH Damien
|
||||
* @author LITZELMANN Cédric
|
||||
*/
|
||||
public class DictAccountRegistration
|
||||
{
|
||||
private String userID;
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* The hostname of the DICT server.
|
||||
*/
|
||||
private String host;
|
||||
|
||||
/**
|
||||
* The port of the DICT server.
|
||||
*/
|
||||
private int port;
|
||||
|
||||
/**
|
||||
* The code id of the strategie selected for the matching of words in dictionnaries.
|
||||
*/
|
||||
private String strategyCode;
|
||||
|
||||
/**
|
||||
* The real name of the strategie selected for the matching of words in dictionnaries.
|
||||
*/
|
||||
private String strategy;
|
||||
|
||||
/**
|
||||
* Returns the User ID of the dict registration account.
|
||||
* @return the User ID of the dict registration account.
|
||||
*/
|
||||
public String getUserID()
|
||||
{
|
||||
return userID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the password of the dict registration account.
|
||||
*
|
||||
* @param password the password of the dict registration account.
|
||||
*/
|
||||
public void setPassword(String password)
|
||||
{
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the port of the dict registration account.
|
||||
* @return the port of the dict registration account.
|
||||
*/
|
||||
public int getPort() {
|
||||
return this.port;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the port of the dict registration account.
|
||||
* @param port the port of the dict registration account.
|
||||
*/
|
||||
public void setPort(int port) {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the host of the dict registration account.
|
||||
* @return the host of the dict registration account.
|
||||
*/
|
||||
public String getHost() {
|
||||
return this.host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the host of the dict registration account.
|
||||
* @param uin the host of the dict registration account.
|
||||
*/
|
||||
public void setHost(String host) {
|
||||
this.host = host;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the strategy that will be used for this dict account.
|
||||
* @return the strategy that will be used for this dict account.
|
||||
*/
|
||||
public String getStrategy() {
|
||||
return this.strategy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the strategy for this dict account.
|
||||
* @param strategy the strategy for this dict account.
|
||||
*/
|
||||
public void setStrategy(String strategy) {
|
||||
this.strategy = strategy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the strategy code that will be used for this dict account.
|
||||
* @return the strategy code that will be used for this dict account.
|
||||
*/
|
||||
public String getStrategyCode() {
|
||||
return this.strategyCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the strategy code for this dict account.
|
||||
* @param strategyCode the strategy code for this dict account.
|
||||
*/
|
||||
public void setStrategyCode(String strategyCode) {
|
||||
this.strategyCode = strategyCode;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,409 @@
|
||||
/*
|
||||
* 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 <tt>DictAccountRegistrationWizard</tt> is an implementation of the
|
||||
* <tt>AccountRegistrationWizard</tt> for the Dict protocol. It should allow
|
||||
* the user to create and configure a new Dict account.
|
||||
*
|
||||
* @author ROTH Damien
|
||||
* @author LITZELMANN Cédric
|
||||
*/
|
||||
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 <tt>DictAccountRegistrationWizard</tt>.
|
||||
*
|
||||
* @param wizardContainer the wizard container, where this wizard is added
|
||||
*/
|
||||
public DictAccountRegistrationWizard(WizardContainer wizardContainer)
|
||||
{
|
||||
this.wizardContainer = wizardContainer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the <code>AccountRegistrationWizard.getIcon</code> method.
|
||||
* @return Returns the icon to be used for this wizard.
|
||||
*/
|
||||
public byte[] getIcon()
|
||||
{
|
||||
return Resources.getImage(Resources.DICT_LOGO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
* @return Returns the protocol name for this wizard.
|
||||
*/
|
||||
public String getProtocolName()
|
||||
{
|
||||
return Resources.getString("protocolName");
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the <code>AccountRegistrationWizard.getProtocolDescription
|
||||
* </code> method.
|
||||
* @return Returns the description of the protocol for this wizard.
|
||||
*/
|
||||
public String getProtocolDescription()
|
||||
{
|
||||
return Resources.getString("protocolDescription");
|
||||
}
|
||||
|
||||
/**
|
||||
* 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<String, String> summaryTable = new LinkedHashMap<String, String>();
|
||||
|
||||
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()
|
||||
{
|
||||
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 <tt>ProtocolProviderService</tt> for the new account.
|
||||
*/
|
||||
public ProtocolProviderService installAccount(
|
||||
ProtocolProviderFactory providerFactory,
|
||||
String host,
|
||||
int port,
|
||||
String strategy)
|
||||
{
|
||||
Hashtable accountProperties = new Hashtable();
|
||||
|
||||
// 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 <tt>ProtocolProviderService</tt> 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 <code>true</code> if this wizard is opened for modification and
|
||||
* <code>false</code> otherwise.
|
||||
*/
|
||||
public boolean isModification()
|
||||
{
|
||||
return isModification;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets if this wizard is opened for modification or for creating a
|
||||
* new account.
|
||||
*
|
||||
* @param b <code>True</code> if this wizard is opened for modification and
|
||||
* <code>false</code> 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;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* 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.io.*;
|
||||
import java.net.*;
|
||||
import java.util.*;
|
||||
|
||||
import net.java.sip.communicator.util.Logger;
|
||||
|
||||
/**
|
||||
* Copy of DictAdapter class to solve the import problem
|
||||
* @author ROTH Damien
|
||||
* @author LITZELMANN Cédric
|
||||
*/
|
||||
|
||||
public class DictAdapter
|
||||
{
|
||||
private static Logger logger = Logger.getLogger(DictAdapter.class);
|
||||
|
||||
/**
|
||||
* The socket used to connect to the DICT server.
|
||||
*/
|
||||
private Socket socket = null;
|
||||
|
||||
/**
|
||||
* A output stream piped to the socket in order to send command to the server.
|
||||
*/
|
||||
private PrintWriter out = null;
|
||||
|
||||
/**
|
||||
* A input stream piped to the socket in order to receive messages from the server.
|
||||
*/
|
||||
private BufferedReader in = null;
|
||||
|
||||
/**
|
||||
* A boolean telling if we are currently connected to the DICT server.
|
||||
*/
|
||||
private boolean connected = false;
|
||||
|
||||
/**
|
||||
* Get the strategies allowed by the server for the MATCH command
|
||||
* @return a HashMap containing the database list - otherwise null
|
||||
*/
|
||||
public ArrayList<String> getStrategies()
|
||||
{
|
||||
String fromServer;
|
||||
boolean quit = false;
|
||||
ArrayList<String> result = null;
|
||||
|
||||
// Connexion
|
||||
if (!this.connected)
|
||||
{
|
||||
// Not connected
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
this.out.println("SHOW STRAT");
|
||||
fromServer = this.in.readLine();
|
||||
|
||||
if (fromServer.startsWith("111"))
|
||||
{ // OK - getting responses from the server
|
||||
result = new ArrayList<String>();
|
||||
while (quit == false && (fromServer = this.in.readLine()) != null)
|
||||
{
|
||||
if (fromServer.startsWith("250"))
|
||||
{
|
||||
quit = true;
|
||||
}
|
||||
else if (!fromServer.equals("."))
|
||||
{
|
||||
result.add(fromServer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
logger.trace("Cannot get the strategies : " + ioe.getMessage());
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Open a connection to the given host on the given port
|
||||
* @param host The hostname of the server.
|
||||
* @param port The port used by the server.
|
||||
* @return true, if a connection is open - false otherwise
|
||||
*/
|
||||
public boolean connect(String host, int port)
|
||||
{
|
||||
this.connected = false;
|
||||
String fromServer;
|
||||
|
||||
try
|
||||
{
|
||||
this.socket = new Socket(host, port);
|
||||
this.out = new PrintWriter(new OutputStreamWriter(this.socket.getOutputStream(),
|
||||
"UTF-8"), true);
|
||||
this.in = new BufferedReader(new InputStreamReader(this.socket.getInputStream(),
|
||||
"UTF-8"));
|
||||
|
||||
fromServer = this.in.readLine(); // Server banner
|
||||
|
||||
if (fromServer.startsWith("220"))
|
||||
{ // 220 = connect ok
|
||||
this.connected = true;
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{ // If an exception is throw == connexion impossible
|
||||
logger.trace("Cannot establish a connexion to the server ("
|
||||
+ host + ":" + port + ")", ex);
|
||||
}
|
||||
|
||||
return this.connected;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the connexion to the server
|
||||
*/
|
||||
public void close()
|
||||
{
|
||||
String fromServer;
|
||||
|
||||
try
|
||||
{
|
||||
this.out.println("QUIT");
|
||||
|
||||
// Clean the socket buffer
|
||||
while ((fromServer = this.in.readLine()) != null)
|
||||
{
|
||||
if (fromServer.startsWith("221"))
|
||||
{ // Quit response
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.out.close();
|
||||
this.in.close();
|
||||
this.socket.close();
|
||||
}
|
||||
catch (IOException ioe)
|
||||
{
|
||||
logger.info("Cannot close the connextion to the server", ioe);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given url is correct and exists
|
||||
* @param host The url that we have to test if it is correct and if it
|
||||
* exists.
|
||||
* @return true if the url exists - false otherwise
|
||||
*/
|
||||
public static boolean isUrl(String host)
|
||||
{
|
||||
boolean ok = false;
|
||||
|
||||
if (host == null || host.length() == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// If an exception is throw, the host format isn't correct or isn't recheable
|
||||
try
|
||||
{
|
||||
InetAddress.getByName(host);
|
||||
ok = true;
|
||||
}
|
||||
catch (UnknownHostException uhex)
|
||||
{
|
||||
logger.trace("Test URL ("+host+") : " + uhex.getMessage(), uhex);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,672 @@
|
||||
/*
|
||||
* 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.awt.event.*;
|
||||
import java.util.*;
|
||||
|
||||
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 host,
|
||||
* port and the strategy of the account.
|
||||
*
|
||||
* @author ROTH Damien
|
||||
* @author LITZELMANN Cédric
|
||||
*/
|
||||
public class FirstWizardPage
|
||||
extends JPanel
|
||||
implements WizardPage, DocumentListener, ActionListener
|
||||
{
|
||||
private static Logger logger = Logger.getLogger(FirstWizardPage.class);
|
||||
|
||||
public static final String FIRST_PAGE_IDENTIFIER = "FirstPageIdentifier";
|
||||
|
||||
private JPanel hostPortPanel = new JPanel(new BorderLayout(10, 10));
|
||||
|
||||
private JPanel labelsPanel = new JPanel();
|
||||
|
||||
private JPanel valuesPanel = new JPanel();
|
||||
|
||||
private JLabel hostLabel = new JLabel("Host");
|
||||
|
||||
private JPanel emptyPanel = new JPanel();
|
||||
|
||||
private JLabel hostExampleLabel = new JLabel("Ex: dict.org");
|
||||
|
||||
private JLabel portLabel = new JLabel("Port");
|
||||
|
||||
private JLabel existingAccountLabel =
|
||||
new JLabel(Resources.getString("existingAccount"));
|
||||
|
||||
private JTextField hostField = new JTextField();
|
||||
|
||||
private JTextField portField = new JTextField("2628");
|
||||
|
||||
|
||||
private JPanel strategyPanel = new JPanel(new BorderLayout(10, 10));
|
||||
|
||||
private JPanel strategyTitleBloc = new JPanel(new BorderLayout());
|
||||
|
||||
private JLabel strategyTitle = new JLabel(Resources.getString("strategyList"));
|
||||
|
||||
private JButton strategyLoader = new JButton(Resources.getString("strategyActu"));
|
||||
|
||||
private Vector<String> strategyList;
|
||||
private JScrollPane jScrollPane;
|
||||
private JList strategyBox;
|
||||
private JTextArea strategyDescription = new JTextArea(Resources.getString("strategyDesc"));
|
||||
private JLabel strategyMessage;
|
||||
private boolean strategyMessInstall = false;
|
||||
|
||||
private JPanel mainPanel = new JPanel();
|
||||
|
||||
private Object nextPageIdentifier = WizardPage.SUMMARY_PAGE_IDENTIFIER;
|
||||
|
||||
private DictAccountRegistrationWizard wizard;
|
||||
|
||||
private String initstrategy = "";
|
||||
|
||||
private ArrayList<String> strategiesAssoc = new ArrayList<String>();
|
||||
|
||||
private StrategyThread populateThread = null;
|
||||
|
||||
private boolean firstAccount = false;
|
||||
|
||||
/**
|
||||
* Initial AccountID (null if new account)
|
||||
* Used to check if there are modifications to the account
|
||||
*/
|
||||
private AccountID initAccountID = null;
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>FirstWizardPage</tt>.
|
||||
*
|
||||
* @param wizard the parent wizard
|
||||
*/
|
||||
public FirstWizardPage(DictAccountRegistrationWizard wizard)
|
||||
{
|
||||
super(new BorderLayout());
|
||||
|
||||
this.wizard = wizard;
|
||||
|
||||
this.setPreferredSize(new Dimension(300, 150));
|
||||
|
||||
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
|
||||
|
||||
this.populateThread = new StrategyThread(this);
|
||||
|
||||
this.firstAccount = !this.hasAccount();
|
||||
|
||||
if (this.firstAccount)
|
||||
{
|
||||
this.initFirstAccount();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.init();
|
||||
}
|
||||
|
||||
this.populateThread = new StrategyThread(this);
|
||||
this.populateThread.start();
|
||||
|
||||
this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes all panels, buttons, etc.
|
||||
*/
|
||||
private void init()
|
||||
{
|
||||
// Host and port Field
|
||||
this.hostField = new JTextField();
|
||||
this.portField = new JTextField("2628");
|
||||
|
||||
this.hostField.getDocument().addDocumentListener(this);
|
||||
this.portField.getDocument().addDocumentListener(this);
|
||||
|
||||
// Server informations
|
||||
this.existingAccountLabel.setForeground(Color.RED);
|
||||
|
||||
this.hostExampleLabel.setForeground(Color.GRAY);
|
||||
this.hostExampleLabel.setFont(hostExampleLabel.getFont().deriveFont(8));
|
||||
this.emptyPanel.setMaximumSize(new Dimension(40, 35));
|
||||
this.hostExampleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 8,
|
||||
0));
|
||||
|
||||
labelsPanel.add(hostLabel);
|
||||
labelsPanel.add(emptyPanel);
|
||||
labelsPanel.add(portLabel);
|
||||
|
||||
valuesPanel.add(hostField);
|
||||
valuesPanel.add(hostExampleLabel);
|
||||
valuesPanel.add(portField);
|
||||
|
||||
hostPortPanel.add(labelsPanel, BorderLayout.WEST);
|
||||
hostPortPanel.add(valuesPanel, BorderLayout.CENTER);
|
||||
|
||||
hostPortPanel.setBorder(BorderFactory.createTitledBorder("Server informations"));
|
||||
|
||||
this.labelsPanel.setLayout(new BoxLayout(labelsPanel, BoxLayout.Y_AXIS));
|
||||
this.valuesPanel.setLayout(new BoxLayout(valuesPanel, BoxLayout.Y_AXIS));
|
||||
|
||||
mainPanel.add(hostPortPanel);
|
||||
|
||||
this.portField.addKeyListener(new KeyListener() {
|
||||
public void keyTyped(KeyEvent evt)
|
||||
{
|
||||
// If evt isn't a digit, we don't add it
|
||||
if (!Character.isDigit(evt.getKeyChar()))
|
||||
{
|
||||
evt.consume();
|
||||
}
|
||||
}
|
||||
|
||||
// Not used
|
||||
public void keyPressed(KeyEvent evt) {;}
|
||||
public void keyReleased(KeyEvent evt) {;}
|
||||
});
|
||||
|
||||
// Strategies
|
||||
this.strategyList = new Vector<String>();
|
||||
this.strategyBox = new JList(this.strategyList);
|
||||
|
||||
for (int i=0; i<20; i++)
|
||||
{
|
||||
this.strategyList.add("Elem "+i);
|
||||
}
|
||||
|
||||
this.strategyBox.setVisibleRowCount(6);
|
||||
|
||||
this.strategyBox.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
|
||||
this.jScrollPane = new JScrollPane();
|
||||
this.jScrollPane.getViewport().add(this.strategyBox);
|
||||
this.strategyPanel.add(this.jScrollPane);
|
||||
|
||||
// Strategy title + button
|
||||
this.strategyTitleBloc.add(this.strategyTitle, BorderLayout.WEST);
|
||||
this.strategyTitleBloc.add(this.strategyLoader, BorderLayout.EAST);
|
||||
|
||||
// Button action listener
|
||||
this.strategyLoader.setActionCommand("populateList");
|
||||
this.strategyLoader.addActionListener(this);
|
||||
|
||||
// South Panel
|
||||
JPanel sSouthPanel = new JPanel(new BorderLayout());
|
||||
|
||||
// Description
|
||||
this.strategyDescription.setLineWrap(true);
|
||||
this.strategyDescription.setLineWrap(true);
|
||||
this.strategyDescription.setRows(4);
|
||||
this.strategyDescription.setWrapStyleWord(true);
|
||||
this.strategyDescription.setAutoscrolls(false);
|
||||
sSouthPanel.add(this.strategyDescription);
|
||||
|
||||
// Message
|
||||
this.strategyMessage = new JLabel(" ");
|
||||
sSouthPanel.add(this.strategyMessage, BorderLayout.SOUTH);
|
||||
|
||||
this.strategyPanel.add(sSouthPanel, BorderLayout.SOUTH);
|
||||
|
||||
this.strategyPanel.add(this.strategyTitleBloc, BorderLayout.NORTH);
|
||||
this.strategyPanel.setBorder(BorderFactory.createTitledBorder("Strategy selection"));
|
||||
mainPanel.add(this.strategyPanel);
|
||||
|
||||
this.add(mainPanel, BorderLayout.NORTH);
|
||||
}
|
||||
|
||||
private void initFirstAccount()
|
||||
{
|
||||
// Data init
|
||||
this.hostField = new JTextField("dict.org");
|
||||
this.portField = new JTextField("2628");
|
||||
|
||||
// Init strategy box
|
||||
this.strategyList = new Vector<String>();
|
||||
this.strategyBox = new JList(this.strategyList);
|
||||
this.strategyMessage = new JLabel(" ");
|
||||
|
||||
|
||||
JPanel infoTitlePanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
|
||||
JTextArea firstDescription = new JTextArea(Resources.getString("firstAccount"));
|
||||
JLabel title = new JLabel(Resources.getString("dictAccountInfoTitle"));
|
||||
|
||||
// Title
|
||||
title.setFont(title.getFont().deriveFont(Font.BOLD, 14.0f));
|
||||
infoTitlePanel.add(title);
|
||||
this.add(infoTitlePanel, BorderLayout.NORTH);
|
||||
this.add(this.strategyMessage, BorderLayout.SOUTH);
|
||||
|
||||
// Description
|
||||
firstDescription.setLineWrap(true);
|
||||
firstDescription.setLineWrap(true);
|
||||
firstDescription.setRows(6);
|
||||
firstDescription.setWrapStyleWord(true);
|
||||
firstDescription.setAutoscrolls(false);
|
||||
this.add(firstDescription);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the <code>WizardPage.getIdentifier</code> to return this
|
||||
* page identifier.
|
||||
*
|
||||
* @return Returns the identifier of the current (the first) page of the wizard.
|
||||
*/
|
||||
public Object getIdentifier()
|
||||
{
|
||||
return FIRST_PAGE_IDENTIFIER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the <code>WizardPage.getNextPageIdentifier</code> to return
|
||||
* the next page identifier - the summary page.
|
||||
*
|
||||
* @return Returns the identifier of the next page of the wizard.
|
||||
*/
|
||||
public Object getNextPageIdentifier()
|
||||
{
|
||||
return nextPageIdentifier;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the <code>WizardPage.getBackPageIdentifier</code> to return
|
||||
* the next back identifier - the default page.
|
||||
*
|
||||
* @return Returns the identifier of the previous page of the wizard.
|
||||
*/
|
||||
public Object getBackPageIdentifier()
|
||||
{
|
||||
return WizardPage.DEFAULT_PAGE_IDENTIFIER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the <code>WizardPage.getWizardForm</code> to return this
|
||||
* panel.
|
||||
* @return Returns this form of the wizard.
|
||||
*/
|
||||
public Object getWizardForm()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Before this page is displayed enables or disables the "Next" wizard
|
||||
* button according to whether the UIN field is empty.
|
||||
*/
|
||||
public void pageShowing()
|
||||
{
|
||||
this.setNextButtonEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the user input when the "Next" wizard buttons is clicked.
|
||||
*/
|
||||
public void pageNext()
|
||||
{
|
||||
//*
|
||||
String host = hostField.getText();
|
||||
int port = Integer.parseInt(portField.getText());
|
||||
int stPos;
|
||||
boolean isModified = false;
|
||||
|
||||
if (this.initAccountID instanceof AccountID)
|
||||
{ // We check if there is modifications to the server
|
||||
String accHost = (String) this.initAccountID.getAccountProperties()
|
||||
.get(ProtocolProviderFactory.SERVER_ADDRESS);
|
||||
int accPort = Integer.parseInt((String) this.initAccountID.getAccountProperties()
|
||||
.get(ProtocolProviderFactory.SERVER_PORT));
|
||||
|
||||
if (accHost != host || accPort != port)
|
||||
{
|
||||
isModified = true;
|
||||
}
|
||||
}
|
||||
|
||||
// We check if a strategy has been selected
|
||||
if (this.strategyList.size() == 0)
|
||||
{ // No Strategy, we get them
|
||||
this.populateStrategies();
|
||||
|
||||
while (this.populateThread.isRunning()) {;}
|
||||
}
|
||||
|
||||
if (this.strategyList.size() == 0)
|
||||
{
|
||||
// No strategy, maybe not connected
|
||||
// Information message is already on the wizard
|
||||
nextPageIdentifier = FIRST_PAGE_IDENTIFIER;
|
||||
this.revalidate();
|
||||
}
|
||||
else if ((!wizard.isModification() && isExistingAccount(host, port))
|
||||
|| (isModified && isExistingAccount(host, port)))
|
||||
{
|
||||
nextPageIdentifier = FIRST_PAGE_IDENTIFIER;
|
||||
hostPortPanel.add(existingAccountLabel, BorderLayout.NORTH);
|
||||
this.revalidate();
|
||||
}
|
||||
else
|
||||
{
|
||||
nextPageIdentifier = SUMMARY_PAGE_IDENTIFIER;
|
||||
hostPortPanel.remove(existingAccountLabel);
|
||||
|
||||
DictAccountRegistration registration = wizard.getRegistration();
|
||||
|
||||
registration.setHost(host);
|
||||
registration.setPort(port);
|
||||
|
||||
stPos = this.strategyBox.getSelectedIndex();
|
||||
registration.setStrategyCode(this.strategiesAssoc.get(stPos));
|
||||
registration.setStrategy(this.strategyBox.getSelectedValue().toString());
|
||||
}
|
||||
//*/
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables or disables the "Next" wizard button according to whether the UIN
|
||||
* field is empty.
|
||||
*/
|
||||
private void setNextButtonEnabled()
|
||||
{
|
||||
boolean hostOK = DictAdapter.isUrl(hostField.getText());
|
||||
boolean portOK = !this.portField.getText().isEmpty()
|
||||
&& Integer.parseInt(this.portField.getText()) > 10;
|
||||
|
||||
if (this.firstAccount)
|
||||
{
|
||||
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
|
||||
}
|
||||
else if (hostOK && portOK)
|
||||
{
|
||||
this.strategyLoader.setEnabled(true);
|
||||
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Disable the finish button
|
||||
wizard.getWizardContainer().setNextFinishButtonEnabled(false);
|
||||
|
||||
// Clear the list and disable the button
|
||||
this.strategyList.clear();
|
||||
this.strategyLoader.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the <tt>DocumentEvent</tt> triggered when user types in the UIN
|
||||
* field. Enables or disables the "Next" wizard button according to whether
|
||||
* the UIN field is empty.
|
||||
*
|
||||
* @param e the <tt>DocumentEvent</tt> triggered when user types in the UIN
|
||||
* field.
|
||||
*/
|
||||
public void insertUpdate(DocumentEvent e)
|
||||
{
|
||||
this.setNextButtonEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the <tt>DocumentEvent</tt> triggered when user deletes letters
|
||||
* from the UIN field. Enables or disables the "Next" wizard button
|
||||
* according to whether the UIN field is empty.
|
||||
*
|
||||
* @param e The <tt>DocumentEvent</tt> triggered when user deletes letters
|
||||
* from the UIN field.
|
||||
*/
|
||||
public void removeUpdate(DocumentEvent e)
|
||||
{
|
||||
this.setNextButtonEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the <tt>DocumentEvent</tt> triggered when user changes an
|
||||
* attribute or set of attributes from the UIN field.
|
||||
* Currently this notification has no effect and is just here to implement
|
||||
* the DocumentListener interface.
|
||||
*
|
||||
* @param e The <tt>DocumentEvent</tt> triggered when an attribute or set of
|
||||
* attributes changed from the UIN field.
|
||||
*/
|
||||
public void changedUpdate(DocumentEvent e)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoked when this WizardPage will be hidden eighter because the user has
|
||||
* clicked "Back" or "Next".
|
||||
* This function has no effect.
|
||||
*/
|
||||
public void pageHiding()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoked when this WizardPage will be shown eighter because the user has
|
||||
* clicked "Back" on the next wizard page or "Next" on the previous one.
|
||||
* This function has no effect.
|
||||
*/
|
||||
public void pageShown()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoked when user clicks on the "Back" wizard button.
|
||||
* This function has no effect.
|
||||
*/
|
||||
public void pageBack()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Fills the Host, Port and Strategy fields in this panel with the data comming
|
||||
* from the given protocolProvider.
|
||||
*
|
||||
* @param protocolProvider The <tt>ProtocolProviderService</tt> to load
|
||||
* the data from.
|
||||
*/
|
||||
public void loadAccount(ProtocolProviderService protocolProvider)
|
||||
{
|
||||
AccountID accountID = protocolProvider.getAccountID();
|
||||
String host = (String) accountID.getAccountProperties()
|
||||
.get(ProtocolProviderFactory.SERVER_ADDRESS);
|
||||
String port = (String) accountID.getAccountProperties()
|
||||
.get(ProtocolProviderFactory.SERVER_PORT);
|
||||
String strategy = (String) accountID.getAccountProperties()
|
||||
.get(ProtocolProviderFactory.STRATEGY);
|
||||
|
||||
this.initAccountID = accountID;
|
||||
|
||||
// Host field
|
||||
this.hostField.setText(host);
|
||||
|
||||
// Port Field
|
||||
this.portField.setText(port);
|
||||
|
||||
// Load strategies
|
||||
this.initstrategy = strategy;
|
||||
this.populateStrategies();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the action of the button.
|
||||
*
|
||||
* @param e The event generated when the button is pressed.
|
||||
*/
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
// Button action -> populate the list
|
||||
if (e.getActionCommand().equals("populateList"))
|
||||
{
|
||||
this.populateStrategies();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an account is stored for this protocol
|
||||
* @return TRUE, if an account is stored - FALSE otherwise
|
||||
*/
|
||||
private boolean hasAccount()
|
||||
{
|
||||
ProtocolProviderFactory factory =
|
||||
DictAccRegWizzActivator.getDictProtocolProviderFactory();
|
||||
|
||||
ArrayList registeredAccounts = factory.getRegisteredAccounts();
|
||||
return !registeredAccounts.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an acount with the given account already exists.
|
||||
*
|
||||
* @param host the host of the account to check
|
||||
* @param port the port of the account to check
|
||||
* @return TRUE, if an account with the given name already exists, FALSE -
|
||||
* otherwise
|
||||
*/
|
||||
private boolean isExistingAccount(String host, int port)
|
||||
{
|
||||
//*
|
||||
ProtocolProviderFactory factory =
|
||||
DictAccRegWizzActivator.getDictProtocolProviderFactory();
|
||||
|
||||
ArrayList registeredAccounts = factory.getRegisteredAccounts();
|
||||
|
||||
String accHost;
|
||||
int accPort;
|
||||
|
||||
for (int i = 0; i < registeredAccounts.size(); i++)
|
||||
{
|
||||
AccountID accountID = (AccountID) registeredAccounts.get(i);
|
||||
accHost = (String) accountID.getAccountProperties()
|
||||
.get(ProtocolProviderFactory.SERVER_ADDRESS);
|
||||
|
||||
if (host.equalsIgnoreCase(accHost))
|
||||
{
|
||||
// We check the port, only if there is an account with the same host
|
||||
accPort = Integer.parseInt((String) accountID.getAccountProperties()
|
||||
.get(ProtocolProviderFactory.SERVER_PORT));
|
||||
|
||||
if (port == accPort)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
//*/
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the thread which will populate the Strategy List
|
||||
*/
|
||||
public void populateStrategies()
|
||||
{
|
||||
// Clear ArrayLists
|
||||
this.strategiesAssoc.clear();
|
||||
this.strategyList.clear();
|
||||
|
||||
|
||||
//this.populateThread = new StrategyThread(this);
|
||||
this.populateThread.setHost(this.hostField.getText())
|
||||
.setPort(Integer.parseInt(this.portField.getText()))
|
||||
.sendProcessRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the thread, display a message
|
||||
* @param message a message
|
||||
*/
|
||||
public void threadMessage(String message)
|
||||
{
|
||||
this.strategyMessage.setText(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the thread, remove the special message section
|
||||
*/
|
||||
public void threadRemoveMessage()
|
||||
{
|
||||
this.strategyMessage.setText(" ");
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the thread, add a strategy in the list
|
||||
* @param code The strategy code
|
||||
* @param description The strategy description
|
||||
*/
|
||||
public void threadAddStrategy(String code, String description)
|
||||
{
|
||||
this.strategiesAssoc.add(code);
|
||||
this.strategyList.add(description);
|
||||
this.strategyBox.setListData(this.strategyList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Automatic selection of a strategy
|
||||
*/
|
||||
public void autoSelectStrategy()
|
||||
{
|
||||
int index = -1;
|
||||
|
||||
if (this.initstrategy.length() > 0)
|
||||
{ // saved strategy
|
||||
index = this.strategiesAssoc.indexOf(this.initstrategy);
|
||||
this.initstrategy = "";
|
||||
}
|
||||
if (index < 0)
|
||||
{
|
||||
// First case : levenstein distance
|
||||
index = this.strategiesAssoc.indexOf("lev");
|
||||
}
|
||||
if (index < 0)
|
||||
{
|
||||
// Second case : soundex
|
||||
index = this.strategiesAssoc.indexOf("soundex");
|
||||
}
|
||||
if (index < 0)
|
||||
{
|
||||
// Last case : prefix
|
||||
index = this.strategiesAssoc.indexOf("prefix");
|
||||
}
|
||||
|
||||
// If the index is still < 0, we select the first index
|
||||
if (index < 0)
|
||||
{
|
||||
index = 0;
|
||||
}
|
||||
if (index < this.strategyBox.getVisibleRowCount())
|
||||
{
|
||||
// If the index is visible row, we don't need to scroll
|
||||
this.strategyBox.setSelectedIndex(index);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, we scroll to the selected value
|
||||
this.strategyBox.setSelectedValue(this.strategyList.get(index), true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables or disable the Next Button and the Strategy Button
|
||||
* @param e TRUE enables - FALSE disables
|
||||
*/
|
||||
public void setStrategyButtonEnable(boolean e)
|
||||
{
|
||||
// During all the process the buttons and the fieldsset are in the same state
|
||||
|
||||
this.hostField.setEnabled(e);
|
||||
this.portField.setEnabled(e);
|
||||
|
||||
this.strategyLoader.setEnabled(e);
|
||||
wizard.getWizardContainer().setNextFinishButtonEnabled(e);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* 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.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 ROTH Damien
|
||||
* @author LITZELMAN Cédric
|
||||
*/
|
||||
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.dictaccregwizz.resources";
|
||||
|
||||
/**
|
||||
* The name of the resource, where paths to images used in this bundle are
|
||||
* stored.
|
||||
*/
|
||||
private static final String IMAGE_RESOURCE_NAME
|
||||
= "net.java.sip.communicator.plugin.dictaccregwizz.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 IMAGE_RESOURCE_BUNDLE
|
||||
= ResourceBundle.getBundle(IMAGE_RESOURCE_NAME);
|
||||
|
||||
public static ImageID DICT_LOGO = new ImageID("protocolIcon");
|
||||
|
||||
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)
|
||||
{
|
||||
try
|
||||
{
|
||||
return STRING_RESOURCE_BUNDLE.getString(key);
|
||||
}
|
||||
catch (MissingResourceException e)
|
||||
{
|
||||
return '!' + key + '!';
|
||||
}
|
||||
//return '!' + key + '!';
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 = IMAGE_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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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,207 @@
|
||||
/*
|
||||
* 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.util.*;
|
||||
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
/**
|
||||
* The <tt>StrategyThread</tt> is the thread called by the wizzard to populate
|
||||
* the strategies list.
|
||||
*
|
||||
* @author ROTH Damien
|
||||
* @author LITZELMANN Cédric
|
||||
*/
|
||||
public class StrategyThread
|
||||
extends Thread
|
||||
{
|
||||
private static Logger logger = Logger.getLogger(StrategyThread.class);
|
||||
|
||||
/**
|
||||
* The hostname of the DICT server.
|
||||
*/
|
||||
private String host;
|
||||
|
||||
/**
|
||||
* The port used by the DICT server.
|
||||
*/
|
||||
private int port;
|
||||
|
||||
/**
|
||||
* True if the thread is running.
|
||||
*/
|
||||
private boolean isRunning = false;
|
||||
|
||||
/**
|
||||
* True if we need to search the strategies handled by the server in order
|
||||
* to populate the list.
|
||||
*/
|
||||
private boolean needProcess = false;
|
||||
|
||||
/**
|
||||
* The first page wizard for the DICT protocole.
|
||||
*/
|
||||
private FirstWizardPage wizard;
|
||||
|
||||
/**
|
||||
* The java abstraction of the DICT server.
|
||||
*/
|
||||
private DictAdapter adapter = null;
|
||||
|
||||
/**
|
||||
* Create a new StrategyThread
|
||||
* @param wizard the wizard for callback methods
|
||||
*/
|
||||
public StrategyThread(FirstWizardPage wizard)
|
||||
{
|
||||
this.wizard = wizard;
|
||||
}
|
||||
|
||||
/**
|
||||
* Thread method running until it's destroy
|
||||
*/
|
||||
public void run()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if (this.needProcess())
|
||||
{
|
||||
this.setRunning(true);
|
||||
this.process();
|
||||
this.processDone();
|
||||
this.setRunning(false);
|
||||
}
|
||||
try
|
||||
{
|
||||
this.sleep(500);
|
||||
}
|
||||
catch (InterruptedException ie)
|
||||
{
|
||||
// Action de log
|
||||
logger.info("DICT THREAD : " + ie);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Search the strategies on the server and populate the list
|
||||
*/
|
||||
private void process()
|
||||
{
|
||||
ArrayList<String> strategies = null;
|
||||
String temp[];
|
||||
|
||||
if (adapter == null) {
|
||||
adapter = new DictAdapter();
|
||||
}
|
||||
|
||||
this.wizard.setStrategyButtonEnable(false);
|
||||
|
||||
// Initialize the connexion
|
||||
this.wizard.threadMessage("Trying to connect to server");
|
||||
if (!adapter.connect(this.host, this.port))
|
||||
{
|
||||
// Connexion attempt failed
|
||||
this.wizard.threadMessage("Connexion attempt failed, this isn't a"
|
||||
+ "dict server or the server is offline");
|
||||
return;
|
||||
}
|
||||
|
||||
// Retrieving strategies
|
||||
this.wizard.threadMessage("Retrieving strategies");
|
||||
strategies = adapter.getStrategies();
|
||||
if (strategies == null)
|
||||
{
|
||||
// No strategy found
|
||||
this.wizard.threadMessage("No strategy found on the server");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Insert the strategies in the list
|
||||
for (int i=0; i<strategies.size(); i++)
|
||||
{
|
||||
temp = strategies.get(i).split(" ", 2);
|
||||
|
||||
this.wizard.threadAddStrategy(temp[0], temp[1].replace("\"", ""));
|
||||
}
|
||||
|
||||
this.wizard.autoSelectStrategy();
|
||||
|
||||
// Closing connexion
|
||||
this.wizard.threadMessage("Closing connexion");
|
||||
adapter.close();
|
||||
|
||||
this.wizard.threadRemoveMessage();
|
||||
this.wizard.setStrategyButtonEnable(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the hostname of the dict server
|
||||
* @param host The hostname of the server.
|
||||
* @return The thread for populating strategie list.
|
||||
*/
|
||||
public StrategyThread setHost(String host)
|
||||
{
|
||||
this.host = host;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the port of the dict server
|
||||
* @param port The port of the DICT server.
|
||||
* @return The thread for populating strategie list.
|
||||
*/
|
||||
public StrategyThread setPort(int port)
|
||||
{
|
||||
this.port = port;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the thread is processing a query
|
||||
* @return TRUE if the thread is processing a query - FALSE otherwise
|
||||
*/
|
||||
public synchronized boolean isRunning()
|
||||
{
|
||||
return this.isRunning || this.needProcess;
|
||||
}
|
||||
|
||||
/**
|
||||
* Marks the thread as running or not
|
||||
* @param r Activate or desactivate the strategie thread.
|
||||
*/
|
||||
public synchronized void setRunning(boolean r)
|
||||
{
|
||||
this.isRunning = r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if we need to process a query
|
||||
* @return Returns true if we need to search and populate the strategie list. False otherwise.
|
||||
*/
|
||||
private synchronized boolean needProcess()
|
||||
{
|
||||
return this.needProcess;
|
||||
}
|
||||
|
||||
/**
|
||||
* Init the request
|
||||
*/
|
||||
public synchronized void sendProcessRequest()
|
||||
{
|
||||
this.needProcess = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defines that the thread has done the query
|
||||
*/
|
||||
private synchronized void processDone()
|
||||
{
|
||||
this.needProcess = false;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
Bundle-Activator: net.java.sip.communicator.plugin.dictaccregwizz.DictAccRegWizzActivator
|
||||
Bundle-Name: Dict account registration wizard
|
||||
Bundle-Description: Dict 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.browserlauncher,
|
||||
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
|
||||
@ -0,0 +1,2 @@
|
||||
protocolIcon=resources/images/protocol/dict/dict-16x16.png
|
||||
pageImage=resources/images/protocol/dict/dict-64x64.png
|
||||
Loading…
Reference in new issue