Fixes provider searching and registration handling in global display service.

fix-message-formatting
Damian Minkov 12 years ago
parent 35ef27e5c8
commit 1936f5fb74

@ -68,21 +68,52 @@ public void start(BundleContext bc)
bundleContext = bc; bundleContext = bc;
displayDetailsImpl = new GlobalDisplayDetailsImpl(); displayDetailsImpl = new GlobalDisplayDetailsImpl();
globalStatusService = new GlobalStatusServiceImpl();
bundleContext.addServiceListener(this); bundleContext.addServiceListener(this);
handleAlreadyRegisteredProviders();
bundleContext.registerService( bundleContext.registerService(
GlobalDisplayDetailsService.class.getName(), GlobalDisplayDetailsService.class.getName(),
displayDetailsImpl, displayDetailsImpl,
null); null);
globalStatusService = new GlobalStatusServiceImpl();
bundleContext.registerService( bundleContext.registerService(
GlobalStatusService.class.getName(), GlobalStatusService.class.getName(),
globalStatusService, globalStatusService,
null); null);
} }
/**
* Searches and processes already registered providers.
*/
private void handleAlreadyRegisteredProviders()
{
for (ServiceReference protocolProviderRef :
ServiceUtils.getServiceReferences(
bundleContext, ProtocolProviderService.class))
{
ProtocolProviderService provider
= (ProtocolProviderService)
bundleContext.getService(protocolProviderRef);
this.handleProviderAdded(provider);
}
}
/**
* Used to attach the listeners to existing or
* just registered protocol provider.
*
* @param pps ProtocolProviderService
*/
private void handleProviderAdded(ProtocolProviderService pps)
{
pps.addRegistrationStateChangeListener(displayDetailsImpl);
globalStatusService.handleProviderAdded(pps);
}
/** /**
* Stops this bundle. * Stops this bundle.
* *
@ -199,12 +230,11 @@ public void serviceChanged(ServiceEvent event)
switch (event.getType()) switch (event.getType())
{ {
case ServiceEvent.REGISTERED: case ServiceEvent.REGISTERED:
pps.addRegistrationStateChangeListener(displayDetailsImpl); this.handleProviderAdded(pps);
pps.addRegistrationStateChangeListener(globalStatusService);
break; break;
case ServiceEvent.UNREGISTERING: case ServiceEvent.UNREGISTERING:
pps.removeRegistrationStateChangeListener(displayDetailsImpl); pps.removeRegistrationStateChangeListener(displayDetailsImpl);
pps.removeRegistrationStateChangeListener(globalStatusService); globalStatusService.handleProviderRemoved(pps);
break; break;
} }
} }

@ -32,6 +32,29 @@ public class GlobalStatusServiceImpl
private final Logger logger private final Logger logger
= Logger.getLogger(GlobalStatusServiceImpl.class); = Logger.getLogger(GlobalStatusServiceImpl.class);
/**
* Handles newly added providers.
* @param pps
*/
void handleProviderAdded(ProtocolProviderService pps)
{
pps.addRegistrationStateChangeListener(this);
if(pps.isRegistered())
{
handleProviderRegistered(pps);
}
}
/**
* Handles removed providers.
* @param pps the provider.
*/
void handleProviderRemoved(ProtocolProviderService pps)
{
pps.removeRegistrationStateChangeListener(this);
}
/** /**
* Returns the global presence status. * Returns the global presence status.
* *
@ -513,9 +536,9 @@ private void publishStatus(
if (!protocolProvider.isRegistered()) if (!protocolProvider.isRegistered())
return; return;
PresenceStatus status = getPresenceStatus( protocolProvider, PresenceStatus status = getPresenceStatus(protocolProvider,
floorStatusValue, floorStatusValue,
ceilStatusValue); ceilStatusValue);
if (status != null) if (status != null)
{ {
@ -639,8 +662,17 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt)
if(!evt.getNewState().equals(RegistrationState.REGISTERED)) if(!evt.getNewState().equals(RegistrationState.REGISTERED))
return; return;
ProtocolProviderService pps = evt.getProvider(); handleProviderRegistered(evt.getProvider());
}
/**
* Handles registered providers. If provider has a stored last status
* publish that status, otherwise we just publish that they
* are Online/Available/
* @param pps the provider
*/
private void handleProviderRegistered(ProtocolProviderService pps)
{
PresenceStatus status = getLastPresenceStatus(pps); PresenceStatus status = getLastPresenceStatus(pps);
if(status == null) if(status == null)

Loading…
Cancel
Save