mirror of https://github.com/sipwise/jitsi.git
Attempts the fix the tests broken when the loading of the stored accounts was moved into a background thread.
parent
fb6c84388c
commit
a1801e9f3c
@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* 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.service.protocol;
|
||||||
|
|
||||||
|
import net.java.sip.communicator.service.protocol.event.*;
|
||||||
|
|
||||||
|
import org.osgi.framework.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides utilities to aid the manipulation of {@link AccountManager}.
|
||||||
|
*
|
||||||
|
* @author Lubomir Marinov
|
||||||
|
*/
|
||||||
|
public final class AccountManagerUtils
|
||||||
|
{
|
||||||
|
private static AccountManager getAccountManager(BundleContext bundleContext)
|
||||||
|
{
|
||||||
|
return (AccountManager) bundleContext.getService(bundleContext
|
||||||
|
.getServiceReference(AccountManager.class.getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts a specific <code>Bundle</code> and wait for the
|
||||||
|
* <code>AccountManager</code> available in a specific
|
||||||
|
* <code>BundleContext</code> to load the stored accounts of a
|
||||||
|
* <code>ProtocolProviderFactory</code> with a specific protocol name.
|
||||||
|
*
|
||||||
|
* @param bundleContextWithAccountManager the <code>BundleContext</code> in
|
||||||
|
* which an <code>AccountManager</code> service is registered
|
||||||
|
* @param bundleToStart the <code>Bundle</code> to be started
|
||||||
|
* @param protocolNameToWait the protocol name of a
|
||||||
|
* <code>ProtocolProviderFactory</code> to wait the end of the
|
||||||
|
* loading of the stored accounts for
|
||||||
|
* @throws BundleException
|
||||||
|
* @throws InterruptedException if any thread interrupted the current thread
|
||||||
|
* before or while the current thread was waiting for the
|
||||||
|
* loading of the stored accounts
|
||||||
|
*/
|
||||||
|
public static void startBundleAndWaitStoredAccountsLoaded(
|
||||||
|
BundleContext bundleContextWithAccountManager, Bundle bundleToStart,
|
||||||
|
final String protocolNameToWait)
|
||||||
|
throws BundleException,
|
||||||
|
InterruptedException
|
||||||
|
{
|
||||||
|
AccountManager accountManager =
|
||||||
|
getAccountManager(bundleContextWithAccountManager);
|
||||||
|
final boolean[] storedAccountsAreLoaded = new boolean[1];
|
||||||
|
AccountManagerListener listener = new AccountManagerListener()
|
||||||
|
{
|
||||||
|
public void handleAccountManagerEvent(AccountManagerEvent event)
|
||||||
|
{
|
||||||
|
if (AccountManagerEvent.STORED_ACCOUNTS_LOADED == event
|
||||||
|
.getType())
|
||||||
|
{
|
||||||
|
ProtocolProviderFactory factory = event.getFactory();
|
||||||
|
|
||||||
|
if ((factory == null)
|
||||||
|
|| protocolNameToWait.equals(factory.getProtocolName()))
|
||||||
|
{
|
||||||
|
synchronized (storedAccountsAreLoaded)
|
||||||
|
{
|
||||||
|
storedAccountsAreLoaded[0] = true;
|
||||||
|
storedAccountsAreLoaded.notify();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
accountManager.addListener(listener);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bundleToStart.start();
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
synchronized (storedAccountsAreLoaded)
|
||||||
|
{
|
||||||
|
if (storedAccountsAreLoaded[0])
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
storedAccountsAreLoaded.wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
accountManager.removeListener(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevents the creation of <code>AccountManagerUtils</code> instances.
|
||||||
|
*/
|
||||||
|
private AccountManagerUtils()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in new issue