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